joshbuddy-usher 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +2 -2
- data/VERSION.yml +1 -1
- data/lib/usher/exceptions.rb +1 -0
- data/lib/usher.rb +15 -3
- data/spec/generate_spec.rb +27 -0
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -8,7 +8,7 @@ This is a tree-based router (based on Ilya Grigorik suggestion). Turns out looki
|
|
8
8
|
|
9
9
|
Here are some examples of routes recognized by usher (so far)
|
10
10
|
|
11
|
-
|
11
|
+
*Route* *Matches*
|
12
12
|
/path/to/something /path/to/something
|
13
13
|
/path/:variable/more /path/foo/more, /path/bar/more ...
|
14
14
|
/show/*tags /show/hot /show/hot/coffee /show/some/more/hot/coffee ...
|
@@ -48,10 +48,10 @@ Here are some examples of routes recognized by usher (so far)
|
|
48
48
|
== DONE
|
49
49
|
|
50
50
|
* add support for () optional parts
|
51
|
+
* Add support for arbitrary HTTP header checks
|
51
52
|
|
52
53
|
== TODO
|
53
54
|
|
54
|
-
* Add support for arbitrary HTTP header checks
|
55
55
|
* Make it integrate with merb
|
56
56
|
* Make it integrate with rails3
|
57
57
|
* Create decent DSL for use with rack
|
data/VERSION.yml
CHANGED
data/lib/usher/exceptions.rb
CHANGED
data/lib/usher.rb
CHANGED
@@ -90,7 +90,7 @@ class Usher
|
|
90
90
|
# * :transformers - Transforms a variable before it gets to the conditions and requirements. Takes either a +proc+ or a +symbol+. If its a +symbol+, calls the method on the incoming parameter. If its a +proc+, its called with the variable.
|
91
91
|
# * :requirements - After transformation, tests the condition using ===. If it returns false, it raises an +Usher::ValidationException+
|
92
92
|
# * :conditions - Accepts any of the following +:protocol+, +:domain+, +:port+, +:query_string+, +:remote_ip+, +:user_agent+, +:referer+ and +:method+. This can be either a +string+ or a +regexp+.
|
93
|
-
#
|
93
|
+
# * any other key is interpreted as a requirement for the variable of its name.
|
94
94
|
def add_route(path, options = {})
|
95
95
|
transformers = options.delete(:transformers) || {}
|
96
96
|
conditions = options.delete(:conditions) || {}
|
@@ -120,10 +120,22 @@ class Usher
|
|
120
120
|
@tree.find(request)
|
121
121
|
end
|
122
122
|
|
123
|
+
# Recognizes a set of +parameters+ and gets the closest matching Usher::Route::Path or +nil+ if no route exists.
|
124
|
+
#
|
125
|
+
# set = Usher.new
|
126
|
+
# route = set.add_route('/:controller/:action')
|
127
|
+
# set.route_for_options({:controller => 'test', :action => 'action'}) == path.route => true
|
123
128
|
def route_for_options(options)
|
124
129
|
Grapher.instance.find_matching_path(options)
|
125
130
|
end
|
126
131
|
|
132
|
+
# Generates a completed URL based on a +route+ or set of +params+
|
133
|
+
#
|
134
|
+
# set = Usher.new
|
135
|
+
# route = set.add_named_route(:test_route, '/:controller/:action')
|
136
|
+
# set.generate_url(nil, {:controller => 'c', :action => 'a'}) == '/c/a' => true
|
137
|
+
# set.generate_url(:test_route, {:controller => 'c', :action => 'a'}) == '/c/a' => true
|
138
|
+
# set.generate_url(route.primary_path, {:controller => 'c', :action => 'a'}) == '/c/a' => true
|
127
139
|
def generate_url(route, params)
|
128
140
|
path = case route
|
129
141
|
when Symbol
|
@@ -138,9 +150,9 @@ class Usher
|
|
138
150
|
param_list = case params
|
139
151
|
when Hash
|
140
152
|
params_hash = params
|
141
|
-
path.dynamic_parts.collect{|k| params_hash.delete(k.name)}
|
153
|
+
path.dynamic_parts.collect{|k| params_hash.delete(k.name) {|el| raise MissingParameterException.new(k.name)} }
|
142
154
|
when Array
|
143
|
-
params
|
155
|
+
path.dynamic_parts.size == params.size ? params : raise(MissingParameterException.new("got #{params.size} arguments, expected #{path.dynamic_parts.size}"))
|
144
156
|
else
|
145
157
|
Array(params)
|
146
158
|
end
|
data/spec/generate_spec.rb
CHANGED
@@ -58,4 +58,31 @@ describe "Usher URL generation" do
|
|
58
58
|
route_set.generate_url(:sample, {:action => 'action', :format => 'html'}).should == '/sample/action.html'
|
59
59
|
end
|
60
60
|
|
61
|
+
it "should generate from parameters" do
|
62
|
+
caf = route_set.add_route('/:controller/:action.:format')
|
63
|
+
ca = route_set.add_route('/:controller/:action')
|
64
|
+
route_set.generate_url(nil, {:controller => 'controller', :action => 'action'}).should == '/controller/action'
|
65
|
+
route_set.generate_url(nil, {:controller => 'controller', :action => 'action', :format => 'html'}).should == '/controller/action.html'
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should use the first route when generating a URL from two ambiguous routes" do
|
69
|
+
route_set.add_route('/:controller/:action')
|
70
|
+
route_set.add_route('/:action/:controller')
|
71
|
+
route_set.generate_url(nil, {:controller => 'controller', :action => 'action'}).should == '/controller/action'
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should accept an array of parameters" do
|
75
|
+
caf = route_set.add_named_route(:name, '/:controller/:action.:format')
|
76
|
+
route_set.generate_url(:name, ['controller', 'action', 'html']).should == '/controller/action.html'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should require all the parameters (hash) to generate a route" do
|
80
|
+
proc {route_set.generate_url(route_set.add_route('/:controller/:action').primary_path, {:controller => 'controller'})}.should raise_error Usher::MissingParameterException
|
81
|
+
end
|
82
|
+
|
83
|
+
it "should require all the parameters (array) to generate a route" do
|
84
|
+
route_set.add_named_route(:name, '/:controller/:action.:format')
|
85
|
+
proc {route_set.generate_url(:name, ['controller', 'action'])}.should raise_error Usher::MissingParameterException
|
86
|
+
end
|
87
|
+
|
61
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: joshbuddy-usher
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joshua Hull
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-03-
|
12
|
+
date: 2009-03-28 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|