Class: ActionDispatch::Journey::Routes

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
actionpack/lib/action_dispatch/journey/routes.rb

Overview

The Routing table. Contains all routes for a system. Routes can be added to the table by calling Routes#add_route.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Enumerable

#as_json, #exclude?, #index_by, #many?, #sum

Constructor Details

#initializeRoutes


10
11
12
13
14
15
16
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 10

def initialize
  @routes             = []
  @named_routes       = {}
  @ast                = nil
  @partitioned_routes = nil
  @simulator          = nil
end

Instance Attribute Details

#named_routesObject (readonly)

Returns the value of attribute named_routes


8
9
10
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 8

def named_routes
  @named_routes
end

#routesObject (readonly)

Returns the value of attribute routes


8
9
10
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 8

def routes
  @routes
end

Instance Method Details

#add_route(app, path, conditions, defaults, name = nil) ⇒ Object

Add a route to the routing table.


57
58
59
60
61
62
63
64
65
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 57

def add_route(app, path, conditions, defaults, name = nil)
  route = Route.new(name, app, path, conditions, defaults)

  route.precedence = routes.length
  routes << route
  named_routes[name] = route if name && !named_routes[name]
  clear_cache!
  route
end

#astObject


42
43
44
45
46
47
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 42

def ast
  @ast ||= begin
    asts = partitioned_routes.first.map(&:ast)
    Nodes::Or.new(asts) unless asts.empty?
  end
end

#clearObject


31
32
33
34
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 31

def clear
  routes.clear
  named_routes.clear
end

#each(&block) ⇒ Object


27
28
29
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 27

def each(&block)
  routes.each(&block)
end

#lastObject


23
24
25
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 23

def last
  routes.last
end

#lengthObject Also known as: size


18
19
20
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 18

def length
  routes.length
end

#partitioned_routesObject


36
37
38
39
40
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 36

def partitioned_routes
  @partitioned_routes ||= routes.partition do |r|
    r.path.anchored && r.ast.grep(Nodes::Symbol).all?(&:default_regexp?)
  end
end

#simulatorObject


49
50
51
52
53
54
# File 'actionpack/lib/action_dispatch/journey/routes.rb', line 49

def simulator
  @simulator ||= begin
    gtg = GTG::Builder.new(ast).transition_table
    GTG::Simulator.new(gtg)
  end
end