# File lib/rack/mount/generatable_regexp.rb, line 31 def self.extended(obj) obj.segments end
# File lib/rack/mount/generatable_regexp.rb, line 72 def captures segments.flatten.find_all { |s| s.is_a?(DynamicSegment) } end
# File lib/rack/mount/generatable_regexp.rb, line 42 def defaults @defaults ||= {} end
# File lib/rack/mount/generatable_regexp.rb, line 35 def defaults=(defaults) @required_captures = nil @required_params = nil @required_defaults = nil @defaults = defaults end
# File lib/rack/mount/generatable_regexp.rb, line 96 def freeze segments captures required_captures required_params required_defaults super end
# File lib/rack/mount/generatable_regexp.rb, line 46 def generatable? segments.any? end
# File lib/rack/mount/generatable_regexp.rb, line 50 def generate(params = {}, recall = {}, options = {}) return nil unless generatable? merged = recall.merge(params) return nil unless required_params.all? { |p| merged.include?(p) } return nil unless required_defaults.all? { |k, v| merged[k] == v } generate_from_segments(segments, params, merged, options) end
# File lib/rack/mount/generatable_regexp.rb, line 76 def required_captures @required_captures ||= segments.find_all { |s| s.is_a?(DynamicSegment) && !@defaults.include?(s.name) }.freeze end
# File lib/rack/mount/generatable_regexp.rb, line 86 def required_defaults @required_defaults ||= begin required_defaults = @defaults.dup captures.inject({}) { |h, s| h.merge!(s.to_hash) }.keys.each { |name| required_defaults.delete(name) } required_defaults end end
# File lib/rack/mount/generatable_regexp.rb, line 82 def required_params @required_params ||= required_captures.map { |s| s.name }.freeze end
# File lib/rack/mount/generatable_regexp.rb, line 60 def segments @segments ||= begin defaults segments = [] catch(:halt) do expression = Utils.parse_regexp(self) segments = parse_segments(expression) end segments end end