aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis')
-rw-r--r--actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/frequency.rb60
-rw-r--r--actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/histogram.rb74
-rw-r--r--actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/splitting.rb159
3 files changed, 0 insertions, 293 deletions
diff --git a/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/frequency.rb b/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/frequency.rb
deleted file mode 100644
index 671258f807..0000000000
--- a/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/frequency.rb
+++ /dev/null
@@ -1,60 +0,0 @@
-require 'rack/mount/utils'
-
-module Rack::Mount
- module Analysis
- class Frequency #:nodoc:
- def initialize(*keys)
- clear
- keys.each { |key| self << key }
- end
-
- def clear
- @raw_keys = []
- @key_frequency = Analysis::Histogram.new
- self
- end
-
- def <<(key)
- raise ArgumentError unless key.is_a?(Hash)
- @raw_keys << key
- nil
- end
-
- def possible_keys
- @possible_keys ||= begin
- @raw_keys.map do |key|
- key.inject({}) { |requirements, (method, requirement)|
- process_key(requirements, method, requirement)
- requirements
- }
- end
- end
- end
-
- def process_key(requirements, method, requirement)
- if requirement.is_a?(Regexp)
- expression = Utils.parse_regexp(requirement)
-
- if expression.is_a?(Regin::Expression) && expression.anchored_to_line?
- expression = Regin::Expression.new(expression.reject { |e| e.is_a?(Regin::Anchor) })
- return requirements[method] = expression.to_s if expression.literal?
- end
- end
-
- requirements[method] = requirement
- end
-
- def report
- @report ||= begin
- possible_keys.each { |keys| keys.each_pair { |key, _| @key_frequency << key } }
- return [] if @key_frequency.count <= 1
- @key_frequency.keys_in_upper_quartile
- end
- end
-
- def expire!
- @possible_keys = @report = nil
- end
- end
- end
-end
diff --git a/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/histogram.rb b/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/histogram.rb
deleted file mode 100644
index 20aaa132f9..0000000000
--- a/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/histogram.rb
+++ /dev/null
@@ -1,74 +0,0 @@
-module Rack::Mount
- module Analysis
- class Histogram < Hash #:nodoc:
- attr_reader :count
-
- def initialize
- @count = 0
- super(0)
- expire_caches!
- end
-
- def <<(value)
- @count += 1
- self[value] += 1 if value
- expire_caches!
- self
- end
-
- def sorted_by_frequency
- sort_by { |_, value| value }.reverse!
- end
-
- def max
- @max ||= values.max || 0
- end
-
- def min
- @min ||= values.min || 0
- end
-
- def mean
- @mean ||= calculate_mean
- end
-
- def standard_deviation
- @standard_deviation ||= calculate_standard_deviation
- end
-
- def upper_quartile_limit
- @upper_quartile_limit ||= calculate_upper_quartile_limit
- end
-
- def keys_in_upper_quartile
- @keys_in_upper_quartile ||= compute_keys_in_upper_quartile
- end
-
- private
- def calculate_mean
- count / size
- end
-
- def calculate_variance
- values.inject(0) { |sum, e| sum + (e - mean) ** 2 } / count.to_f
- end
-
- def calculate_standard_deviation
- Math.sqrt(calculate_variance)
- end
-
- def calculate_upper_quartile_limit
- mean + standard_deviation
- end
-
- def compute_keys_in_upper_quartile
- sorted_by_frequency.select { |_, value| value >= upper_quartile_limit }.map! { |key, _| key }
- end
-
- def expire_caches!
- @max = @min = @mean = @standard_deviation = nil
- @keys_in_upper_quartile = nil
- end
- end
- end
-end
diff --git a/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/splitting.rb b/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/splitting.rb
deleted file mode 100644
index 8a8c551302..0000000000
--- a/actionpack/lib/action_dispatch/vendor/rack-mount-0.6.6.pre/rack/mount/analysis/splitting.rb
+++ /dev/null
@@ -1,159 +0,0 @@
-require 'rack/mount/utils'
-
-module Rack::Mount
- module Analysis
- class Splitting < Frequency
- NULL = "\0".freeze
-
- class Key < Struct.new(:method, :index, :separators)
- def self.split(value, separator_pattern)
- keys = value.split(separator_pattern)
- keys.shift if keys[0] == ''
- keys << NULL
- keys
- end
-
- def call(cache, obj)
- (cache[method] ||= self.class.split(obj.send(method), separators))[index]
- end
-
- def call_source(cache, obj)
- "(#{cache}[:#{method}] ||= Analysis::Splitting::Key.split(#{obj}.#{method}, #{separators.inspect}))[#{index}]"
- end
-
- def inspect
- "#{method}[#{index}]"
- end
- end
-
- def clear
- @boundaries = {}
- super
- end
-
- def <<(key)
- super
- key.each_pair do |k, v|
- analyze_capture_boundaries(v, @boundaries[k] ||= Histogram.new)
- end
- end
-
- def separators(key)
- (@boundaries[key].keys_in_upper_quartile + ['/']).uniq
- end
-
- def process_key(requirements, method, requirement)
- separators = separators(method)
- if requirement.is_a?(Regexp) && separators.any?
- generate_split_keys(requirement, separators).each_with_index do |value, index|
- requirements[Key.new(method, index, Regexp.union(*separators))] = value
- end
- else
- super
- end
- end
-
- private
- def analyze_capture_boundaries(regexp, boundaries) #:nodoc:
- return boundaries unless regexp.is_a?(Regexp)
-
- parts = Utils.parse_regexp(regexp)
- parts.each_with_index do |part, index|
- if part.is_a?(Regin::Group)
- if index > 0
- previous = parts[index-1]
- if previous.is_a?(Regin::Character) && previous.literal?
- boundaries << previous.to_s
- end
- end
-
- if inside = part.expression[0]
- if inside.is_a?(Regin::Character) && inside.literal?
- boundaries << inside.to_s
- end
- end
-
- if index < parts.length
- following = parts[index+1]
- if following.is_a?(Regin::Character) && following.literal?
- boundaries << following.to_s
- end
- end
- end
- end
-
- boundaries
- end
-
- def generate_split_keys(regexp, separators) #:nodoc:
- segments = []
- buf = nil
- parts = Utils.parse_regexp(regexp)
- parts.each_with_index do |part, index|
- case part
- when Regin::Anchor
- if part.value == '$' || part.value == '\Z'
- segments << join_buffer(buf, regexp) if buf
- segments << NULL
- buf = nil
- break
- end
- when Regin::CharacterClass
- break if separators.any? { |s| part.include?(s) }
- buf = nil
- segments << part.to_regexp(true)
- when Regin::Character
- if separators.any? { |s| part.include?(s) }
- segments << join_buffer(buf, regexp) if buf
- peek = parts[index+1]
- if peek.is_a?(Regin::Character) && separators.include?(peek.value)
- segments << ''
- end
- buf = nil
- else
- buf ||= Regin::Expression.new([])
- buf += [part]
- end
- when Regin::Group
- if part.quantifier == '?'
- value = part.expression.first
- if separators.any? { |s| value.include?(s) }
- segments << join_buffer(buf, regexp) if buf
- buf = nil
- end
- break
- elsif part.quantifier == nil
- break if separators.any? { |s| part.include?(s) }
- buf = nil
- segments << part.to_regexp(true)
- else
- break
- end
- else
- break
- end
-
- if index + 1 == parts.size
- segments << join_buffer(buf, regexp) if buf
- buf = nil
- break
- end
- end
-
- while segments.length > 0 && (segments.last.nil? || segments.last == '')
- segments.pop
- end
-
- segments
- end
-
- def join_buffer(parts, regexp)
- if parts.literal?
- parts.to_s
- else
- parts.to_regexp(true)
- end
- end
- end
- end
-end