derailleur 0.0.5 → 0.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/TODO +2 -0
- data/lib/derailleur.rb +1 -1
- data/lib/derailleur/core/application.rb +36 -11
- metadata +3 -6
data/TODO
CHANGED
data/lib/derailleur.rb
CHANGED
@@ -79,18 +79,31 @@ module Derailleur
|
|
79
79
|
# Will (optionally) consecutively yield all the [node, chunk_name]
|
80
80
|
# this is useful when you want to interpret the members of the path
|
81
81
|
# as a parameter.
|
82
|
-
def
|
82
|
+
def get_route_silent(path)
|
83
83
|
current_node = routes
|
84
84
|
chunk_path(path).each do |chunk|
|
85
85
|
unless current_node.absorbent?
|
86
86
|
current_node = current_node.child_for_name(chunk)
|
87
|
-
|
87
|
+
return nil unless current_node
|
88
88
|
end
|
89
89
|
yield current_node, chunk if block_given?
|
90
90
|
end
|
91
91
|
current_node
|
92
92
|
end
|
93
|
-
|
93
|
+
|
94
|
+
# Same as get_route_silent but raise a
|
95
|
+
# NoSuchRoute error if there is no matching route.
|
96
|
+
def get_route(path)
|
97
|
+
node = if block_given?
|
98
|
+
get_route_silent(path) do |node,chunk|
|
99
|
+
yield node, chunk
|
100
|
+
end
|
101
|
+
else
|
102
|
+
get_route_silent(path)
|
103
|
+
end
|
104
|
+
raise NoSuchRoute, "no such path #{path}" unless node
|
105
|
+
node
|
106
|
+
end
|
94
107
|
|
95
108
|
# Registers an handler for a given path.
|
96
109
|
# The path will be interpreted as an absolute path prefixed by '/' .
|
@@ -155,6 +168,25 @@ module Derailleur
|
|
155
168
|
app_node.graft!(split_node)
|
156
169
|
end
|
157
170
|
|
171
|
+
# Similar to get route, but also interprets nodes names as keys for a hash.
|
172
|
+
# The values in the parameters hash are the string corresponding to the
|
173
|
+
# nodes in the path.
|
174
|
+
# A specific key is :splat, which correspond to the remaining chunks in the
|
175
|
+
# paths.
|
176
|
+
# Does NOT take care of key collisions. This should be taken care of at the
|
177
|
+
# application level.
|
178
|
+
def get_route_with_params(path)
|
179
|
+
params = {:splat => []}
|
180
|
+
route = get_route(path) do |node, val|
|
181
|
+
if node.wildcard?
|
182
|
+
params[node.name] = val
|
183
|
+
elsif node.absorbent?
|
184
|
+
params[:splat] << val
|
185
|
+
end
|
186
|
+
end
|
187
|
+
[route, params]
|
188
|
+
end
|
189
|
+
|
158
190
|
# Method implemented to comply to the Rack specification. see
|
159
191
|
# http://rack.rubyforge.org/doc/files/SPEC.html to understand what to
|
160
192
|
# return.
|
@@ -176,14 +208,7 @@ module Derailleur
|
|
176
208
|
begin
|
177
209
|
path = env['PATH_INFO'].sub(/\.\w+$/,'') #ignores the extension if any
|
178
210
|
ctx = {}
|
179
|
-
params =
|
180
|
-
route = get_route(path) do |node, val|
|
181
|
-
if node.wildcard?
|
182
|
-
params[node.name] = val
|
183
|
-
elsif node.absorbent?
|
184
|
-
params[:splat] << val
|
185
|
-
end
|
186
|
-
end
|
211
|
+
route, params = get_route_with_params(path)
|
187
212
|
ctx['derailleur.node'] = route
|
188
213
|
ctx['derailleur.params'] = params
|
189
214
|
ctx['derailleur'] = self
|
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: derailleur
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 21
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
8
|
+
- 6
|
9
|
+
version: 0.0.6
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- crapooze
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2011-
|
17
|
+
date: 2011-03-19 00:00:00 -04:00
|
19
18
|
default_executable:
|
20
19
|
dependencies: []
|
21
20
|
|
@@ -56,7 +55,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
56
55
|
requirements:
|
57
56
|
- - ">="
|
58
57
|
- !ruby/object:Gem::Version
|
59
|
-
hash: 3
|
60
58
|
segments:
|
61
59
|
- 0
|
62
60
|
version: "0"
|
@@ -65,7 +63,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
65
63
|
requirements:
|
66
64
|
- - ">="
|
67
65
|
- !ruby/object:Gem::Version
|
68
|
-
hash: 3
|
69
66
|
segments:
|
70
67
|
- 0
|
71
68
|
version: "0"
|