Class: ActionDispatch::Journey::Path::Pattern
- Inherits:
-
Object
- Object
- ActionDispatch::Journey::Path::Pattern
show all
- Defined in:
- lib/action_dispatch/journey/path/pattern.rb
Overview
Defined Under Namespace
Classes: AnchoredRegexp, MatchData, UnanchoredRegexp
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(ast, requirements, separators, anchored) ⇒ Pattern
Returns a new instance of Pattern.
19
20
21
22
23
24
25
26
27
28
29
30
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 19
def initialize(ast, requirements, separators, anchored)
@spec = ast
@requirements = requirements
@separators = separators
@anchored = anchored
@names = nil
@optional_names = nil
@required_names = nil
@re = nil
@offsets = nil
end
|
Instance Attribute Details
#anchored ⇒ Object
Returns the value of attribute anchored.
7
8
9
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 7
def anchored
@anchored
end
|
#requirements ⇒ Object
Returns the value of attribute requirements.
7
8
9
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 7
def requirements
@requirements
end
|
#spec ⇒ Object
Returns the value of attribute spec.
7
8
9
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 7
def spec
@spec
end
|
Class Method Details
.build(path, requirements, separators, anchored) ⇒ Object
13
14
15
16
17
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 13
def self.build(path, requirements, separators, anchored)
parser = Journey::Parser.new
ast = parser.parse path
new ast, requirements, separators, anchored
end
|
.from_string(string) ⇒ Object
9
10
11
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 9
def self.from_string(string)
build(string, {}, "/.?", true)
end
|
Instance Method Details
#ast ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 43
def ast
@spec.find_all(&:symbol?).each do |node|
re = @requirements[node.to_sym]
node.regexp = re if re
end
@spec.find_all(&:star?).each do |node|
node = node.left
node.regexp = @requirements[node.to_sym] || /(.+)/
end
@spec
end
|
32
33
34
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 32
def build_formatter
Visitors::FormatBuilder.new.accept(spec)
end
|
#eager_load! ⇒ Object
36
37
38
39
40
41
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 36
def eager_load!
required_names
offsets
to_regexp
nil
end
|
#match(other) ⇒ Object
Also known as:
=~
158
159
160
161
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 158
def match(other)
return unless match = to_regexp.match(other)
MatchData.new(names, offsets, match)
end
|
#names ⇒ Object
57
58
59
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 57
def names
@names ||= spec.find_all(&:symbol?).map(&:name)
end
|
#optional_names ⇒ Object
65
66
67
68
69
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 65
def optional_names
@optional_names ||= spec.find_all(&:group?).flat_map { |group|
group.find_all(&:symbol?)
}.map(&:name).uniq
end
|
#required_names ⇒ Object
61
62
63
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 61
def required_names
@required_names ||= names - optional_names
end
|
#source ⇒ Object
164
165
166
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 164
def source
to_regexp.source
end
|
#to_regexp ⇒ Object
168
169
170
|
# File 'lib/action_dispatch/journey/path/pattern.rb', line 168
def to_regexp
@re ||= regexp_visitor.new(@separators, @requirements).accept spec
end
|