joshbuddy-usher 0.4.3 → 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/lib/usher/generate.rb +82 -0
- data/lib/usher/grapher.rb +30 -8
- data/lib/usher/interface/email_interface.rb +1 -1
- data/lib/usher/interface/rack_interface.rb +9 -2
- data/lib/usher/interface/{rails2_interface → rails2_2_interface}/mapper.rb +1 -1
- data/lib/usher/interface/{rails2_interface.rb → rails2_2_interface.rb} +9 -8
- data/lib/usher/interface/rails2_3_interface.rb +137 -0
- data/lib/usher/interface.rb +6 -3
- data/lib/usher/node.rb +15 -15
- data/lib/usher/route/path.rb +7 -5
- data/lib/usher/route/variable.rb +8 -6
- data/lib/usher/route.rb +21 -9
- data/lib/usher/splitter.rb +9 -10
- data/lib/usher.rb +9 -77
- data/rails/init.rb +7 -3
- data/spec/private/generate_spec.rb +70 -41
- data/spec/private/grapher_spec.rb +19 -17
- data/spec/private/path_spec.rb +11 -11
- data/spec/private/{rails → rails2_2}/compat.rb +0 -0
- data/spec/private/{rails → rails2_2}/generate_spec.rb +2 -2
- data/spec/private/{rails → rails2_2}/path_spec.rb +2 -2
- data/spec/private/{rails → rails2_2}/recognize_spec.rb +2 -2
- data/spec/private/rails2_3/compat.rb +1 -0
- data/spec/private/rails2_3/generate_spec.rb +28 -0
- data/spec/private/rails2_3/path_spec.rb +16 -0
- data/spec/private/rails2_3/recognize_spec.rb +79 -0
- data/spec/private/split_spec.rb +19 -19
- metadata +17 -10
@@ -1,39 +1,41 @@
|
|
1
1
|
require 'lib/usher'
|
2
2
|
|
3
|
-
route_set = Usher.new
|
4
3
|
|
5
4
|
describe "Usher grapher" do
|
6
5
|
|
7
6
|
before(:each) do
|
8
|
-
route_set.
|
7
|
+
@route_set = Usher.new
|
8
|
+
@route_set.reset!
|
9
|
+
@url_generator = Usher::Generators::URL.new(@route_set)
|
9
10
|
end
|
10
11
|
|
11
12
|
it "should find a simple path" do
|
12
|
-
route_set.add_route('/:a/:b/:c')
|
13
|
-
|
13
|
+
@route_set.add_route('/:a/:b/:c')
|
14
|
+
@url_generator.generate(nil, {:a => 'A', :b => 'B', :c => 'C'}).should == '/A/B/C'
|
14
15
|
end
|
15
16
|
|
16
17
|
it "should pick a more specific route" do
|
17
|
-
route_set.add_route('/:a/:b')
|
18
|
-
route_set.add_route('/:a/:b/:c')
|
19
|
-
|
18
|
+
@route_set.add_route('/:a/:b')
|
19
|
+
@route_set.add_route('/:a/:b/:c')
|
20
|
+
@url_generator.generate(nil, {:a => 'A', :b => 'B', :c => 'C'}).should == '/A/B/C'
|
20
21
|
end
|
21
22
|
|
22
23
|
it "should fail to generate a route when none matches" do
|
23
|
-
route_set.add_route('/:a/:b')
|
24
|
-
proc {
|
24
|
+
@route_set.add_route('/:a/:b')
|
25
|
+
proc {@url_generator.generate(nil, {:c => 'C', :d => 'D'}) }.should raise_error Usher::UnrecognizedException
|
25
26
|
end
|
26
27
|
|
27
28
|
it "should find the most specific route and append extra parts on as a query string" do
|
28
|
-
route_set.add_route('/:a/:b/:c')
|
29
|
-
route_set.add_route('/:a/:b')
|
30
|
-
|
29
|
+
@route_set.add_route('/:a/:b/:c')
|
30
|
+
@route_set.add_route('/:a/:b')
|
31
|
+
@url_generator.generate(nil, {:a => 'A', :b => 'B', :d => 'C'}).should == '/A/B?d=C'
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
# FIXME
|
35
|
+
#it "should do a validity check against the incoming variables when asked to" do
|
36
|
+
# route_set.add_route('/:a/:b', :b => /\d+/)
|
37
|
+
# route_set.generate_url(nil, {:a => 'A', :b => 'B'}).should == '/A/B'
|
38
|
+
# proc{ route_set.generate_url(nil, {:a => 'A', :b => 'B'})}.should raise_error Usher::ValidationException
|
39
|
+
#end
|
38
40
|
|
39
41
|
end
|
data/spec/private/path_spec.rb
CHANGED
@@ -22,12 +22,12 @@ describe "Usher route adding" do
|
|
22
22
|
it "should add every kind of optional route possible" do
|
23
23
|
route_set.add_route('/a/b(/c)(/d(/e))')
|
24
24
|
route_set.routes.first.paths.collect{|a| a.parts }.should == [
|
25
|
-
[
|
26
|
-
[
|
27
|
-
[
|
28
|
-
[
|
29
|
-
[
|
30
|
-
[
|
25
|
+
['/', "a", '/', "b"],
|
26
|
+
['/', "a", '/', "b", '/', "c", '/', "d"],
|
27
|
+
['/', "a", '/', "b", '/', "d", '/', "e"],
|
28
|
+
['/', "a", '/', "b", '/', "c"],
|
29
|
+
['/', "a", '/', "b", '/', "d"],
|
30
|
+
['/', "a", '/', "b", '/', "c", '/', "d", '/', "e"]
|
31
31
|
]
|
32
32
|
|
33
33
|
end
|
@@ -39,7 +39,7 @@ describe "Usher route adding" do
|
|
39
39
|
it "should calculate depths for nodes" do
|
40
40
|
route_set.add_named_route(:route, '/bad/route/three/four')
|
41
41
|
route_set.tree.depth.should == 0
|
42
|
-
route_set.tree.lookup[
|
42
|
+
route_set.tree.lookup['/'].depth.should == 1
|
43
43
|
end
|
44
44
|
|
45
45
|
it "should pp for nodes" do
|
@@ -47,19 +47,19 @@ describe "Usher route adding" do
|
|
47
47
|
route_set.tree.depth.should == 0
|
48
48
|
old_out = $stdout
|
49
49
|
$stdout = (output = StringIO.new)
|
50
|
-
route_set.tree.lookup[
|
50
|
+
route_set.tree.lookup['/'].lookup['bad'].lookup['/'].pp
|
51
51
|
$stdout = old_out
|
52
52
|
output.rewind
|
53
53
|
output.read.should == <<-HEREDOC
|
54
|
-
3:
|
54
|
+
3: "/" false
|
55
55
|
route ==>
|
56
56
|
4: "route" false
|
57
57
|
/ ==>
|
58
|
-
5:
|
58
|
+
5: "/" false
|
59
59
|
three ==>
|
60
60
|
6: "three" false
|
61
61
|
/ ==>
|
62
|
-
7:
|
62
|
+
7: "/" false
|
63
63
|
four ==>
|
64
64
|
8: "four" true
|
65
65
|
HEREDOC
|
File without changes
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'compat')
|
2
2
|
require 'lib/usher'
|
3
3
|
|
4
|
-
route_set = Usher::Interface.for(:
|
4
|
+
route_set = Usher::Interface.for(:rails2_2)
|
5
5
|
|
6
|
-
describe "Usher (for rails) URL generation" do
|
6
|
+
describe "Usher (for rails 2.2) URL generation" do
|
7
7
|
|
8
8
|
before(:each) do
|
9
9
|
route_set.reset!
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'compat')
|
2
2
|
require 'lib/usher'
|
3
3
|
|
4
|
-
route_set = Usher::Interface.for(:
|
4
|
+
route_set = Usher::Interface.for(:rails2_2)
|
5
5
|
|
6
|
-
describe "Usher (for rails) route adding" do
|
6
|
+
describe "Usher (for rails 2.2) route adding" do
|
7
7
|
|
8
8
|
before(:each) do
|
9
9
|
route_set.reset!
|
@@ -2,7 +2,7 @@ require File.join(File.dirname(__FILE__), 'compat')
|
|
2
2
|
require 'lib/usher'
|
3
3
|
require 'action_controller'
|
4
4
|
|
5
|
-
route_set = Usher::Interface.for(:
|
5
|
+
route_set = Usher::Interface.for(:rails2_2)
|
6
6
|
|
7
7
|
def build_request_mock(path, method, params)
|
8
8
|
request = mock "Request"
|
@@ -16,7 +16,7 @@ end
|
|
16
16
|
|
17
17
|
SampleController = Object.new
|
18
18
|
|
19
|
-
describe "Usher (for rails) route recognition" do
|
19
|
+
describe "Usher (for rails 2.2) route recognition" do
|
20
20
|
|
21
21
|
before(:each) do
|
22
22
|
route_set.reset!
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'activesupport'
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'compat')
|
2
|
+
require 'lib/usher'
|
3
|
+
|
4
|
+
route_set = Usher::Interface.for(:rails2_3)
|
5
|
+
|
6
|
+
describe "Usher (for rails 2.3) URL generation" do
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
route_set.reset!
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should fill in the controller from recall" do
|
13
|
+
route_set.add_route('/:controller/:action/:id')
|
14
|
+
route_set.generate({:action => 'thingy'}, {:controller => 'sample', :action => 'index', :id => 123}, :generate).should == '/sample/thingy'
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should skip the action if not provided" do
|
18
|
+
route_set.add_route('/:controller/:action/:id')
|
19
|
+
route_set.generate({:controller => 'thingy'}, {:controller => 'sample', :action => 'index', :id => 123}, :generate).should == '/thingy'
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should pick the correct param from optional parts" do
|
23
|
+
route_set.add_route('/:controller/:action(.:format)')
|
24
|
+
route_set.generate({:action => 'thingy', :format => 'html'}, {:controller => 'sample', :action => 'index', :id => 123}, :generate).should == '/sample/thingy.html'
|
25
|
+
route_set.generate({:action => 'thingy'}, {:controller => 'sample', :action => 'index', :id => 123}, :generate).should == '/sample/thingy'
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'compat')
|
2
|
+
require 'lib/usher'
|
3
|
+
|
4
|
+
route_set = Usher::Interface.for(:rails2_3)
|
5
|
+
|
6
|
+
describe "Usher (for rails 2.3) route adding" do
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
route_set.reset!
|
10
|
+
end
|
11
|
+
|
12
|
+
it "shouldn't allow routes without a controller to be added" do
|
13
|
+
proc { route_set.add_route('/bad/route') }.should raise_error
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'compat')
|
2
|
+
require 'lib/usher'
|
3
|
+
require 'action_controller'
|
4
|
+
|
5
|
+
route_set = Usher::Interface.for(:rails2_3)
|
6
|
+
|
7
|
+
def build_request_mock(path, method, params)
|
8
|
+
request = mock "Request"
|
9
|
+
request.should_receive(:path).any_number_of_times.and_return(path)
|
10
|
+
request.should_receive(:method).any_number_of_times.and_return(method)
|
11
|
+
params = params.with_indifferent_access
|
12
|
+
request.should_receive(:path_parameters=).any_number_of_times.with(params)
|
13
|
+
request.should_receive(:path_parameters).any_number_of_times.and_return(params)
|
14
|
+
request
|
15
|
+
end
|
16
|
+
|
17
|
+
SampleController = Object.new
|
18
|
+
|
19
|
+
describe "Usher (for rails 2.3) route recognition" do
|
20
|
+
|
21
|
+
before(:each) do
|
22
|
+
route_set.reset!
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should recognize a simple request" do
|
26
|
+
route_set.add_route('/sample', :controller => 'sample', :action => 'action')
|
27
|
+
route_set.recognize(build_request_mock('/sample', 'get', {:controller => 'sample', :action => 'action'})).should == SampleController
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should interpolate action :index" do
|
31
|
+
route_set.add_route('/sample', :controller => 'sample')
|
32
|
+
route_set.recognize(build_request_mock('/sample', 'get', {:controller => 'sample', :action => 'index'})).should == SampleController
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should correctly distinguish between multiple request methods" do
|
36
|
+
route_set.add_route('/sample', :controller => 'not_sample', :conditions => {:method => :get})
|
37
|
+
correct_route = route_set.add_route('/sample', :controller => 'sample', :conditions => {:method => :post})
|
38
|
+
route_set.add_route('/sample', :controller => 'not_sample', :conditions => {:method => :put})
|
39
|
+
route_set.recognize(build_request_mock('/sample', :post, {:controller => 'sample', :action => 'index'})).should == SampleController
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should prefer the static route to the dynamic route" do
|
43
|
+
route_set.add_route('/sample/:action', :controller => 'not_sample')
|
44
|
+
route_set.add_route('/sample/test', :controller => 'sample', :action => 'action')
|
45
|
+
route_set.recognize(build_request_mock('/sample/test', 'get', {:controller => 'sample', :action => 'action'})).should == SampleController
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should raise based upon an invalid param" do
|
49
|
+
route_set.add_named_route(:sample, '/sample/:action', :controller => 'sample', :requirements => {:action => /\d+/})
|
50
|
+
proc { route_set.recognize(build_request_mock('/sample/asdqwe', :post, {})) }.should raise_error
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should raise based upon an invalid route" do
|
54
|
+
route_set.add_named_route(:sample, '/sample', :controller => 'sample', :action => 'test')
|
55
|
+
proc { route_set.recognize(build_request_mock('/test/asdqwe', :post, {})) }.should raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should add /:controller and /:controller/:action if /:controller/:action/:id is added" do
|
59
|
+
route_set.add_route('/:controller/:action/:id')
|
60
|
+
route_set.route_count.should == 3
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should correctly recognize a format (dynamic path path with . delimiter)" do
|
64
|
+
route_set.add_route('/:controller/:action/:id.:format')
|
65
|
+
route_set.recognize(build_request_mock('/sample/test/123.html', 'get', {:controller => 'sample', :action => 'test', :id => '123', :format => 'html'})).should == SampleController
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should support root nodes" do
|
69
|
+
route_set.add_route('/', :controller => 'sample')
|
70
|
+
route_set.recognize(build_request_mock('/', :get, {:controller => 'sample', :action => 'index'})).should == SampleController
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should default action to 'index' when controller (and not index) is specified" do
|
74
|
+
route_set.add_route('/:controller/:action')
|
75
|
+
route_set.recognize(build_request_mock('/sample', :get, {:controller => 'sample', :action => 'index'})).should == SampleController
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
end
|
data/spec/private/split_spec.rb
CHANGED
@@ -4,62 +4,62 @@ describe "Usher route tokenizing" do
|
|
4
4
|
|
5
5
|
|
6
6
|
it "should split / delimited routes" do
|
7
|
-
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this/split').should == [[
|
7
|
+
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this/split').should == [['/', 'test', '/','this', '/', 'split']]
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should split / delimited routes with a regex in it" do
|
11
11
|
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').
|
12
|
-
split('/test/{this}/split').should == [[
|
12
|
+
split('/test/{this}/split').should == [['/', 'test', '/', /this/, '/', 'split']]
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should split on ' ' delimited routes as well" do
|
16
|
-
Usher::Splitter.for_delimiters([' '], '[0-9A-Za-z\$\-_\+!\*\',]+').split('test this split').should == [['test',
|
16
|
+
Usher::Splitter.for_delimiters([' '], '[0-9A-Za-z\$\-_\+!\*\',]+').split('test this split').should == [['test', ' ', 'this', ' ', 'split']]
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should split on email delimiters as well" do
|
20
|
-
Usher::Splitter.for_delimiters(['@', '+', '-', '.'], '[a-zA-Z0-9]+').split('one+more.12345-09876-alphanum3ric5@domain.com').should == [["one",
|
20
|
+
Usher::Splitter.for_delimiters(['@', '+', '-', '.'], '[a-zA-Z0-9]+').split('one+more.12345-09876-alphanum3ric5@domain.com').should == [["one", '+', "more", ".", "12345", '-', "09876", '-', "alphanum3ric5", "@", "domain", ".", "com"]]
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should split on ' ' delimited routes for more complex routes as well" do
|
24
|
-
Usher::Splitter.for_delimiters([' '], '[0-9A-Za-z\$\-_\+!\*\',]+').split('(test|this) split').should == [['test',
|
24
|
+
Usher::Splitter.for_delimiters([' '], '[0-9A-Za-z\$\-_\+!\*\',]+').split('(test|this) split').should == [['test', ' ', 'split'], ['this', ' ', 'split']]
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should group optional parts with brackets" do
|
28
28
|
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this(/split)').should == [
|
29
|
-
[
|
30
|
-
[
|
29
|
+
['/', 'test', '/', 'this'],
|
30
|
+
['/', 'test', '/', 'this', '/', 'split']
|
31
31
|
]
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should group exclusive optional parts with brackets and pipes" do
|
35
35
|
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this(/split|/split2)').should == [
|
36
|
-
[
|
37
|
-
[
|
36
|
+
['/', 'test', '/', 'this','/', 'split'],
|
37
|
+
['/', 'test', '/', 'this','/', 'split2']
|
38
38
|
]
|
39
39
|
end
|
40
40
|
|
41
41
|
it "should group exclusive optional-optional parts with brackets and pipes" do
|
42
42
|
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this((/split|/split2))').should == [
|
43
|
-
[
|
44
|
-
[
|
45
|
-
[
|
43
|
+
['/', 'test','/', 'this'],
|
44
|
+
['/', 'test','/', 'this', '/', 'split'],
|
45
|
+
['/', 'test','/', 'this', '/', 'split2']
|
46
46
|
]
|
47
47
|
end
|
48
48
|
|
49
49
|
it "should group optional parts with brackets (for non overlapping groups)" do
|
50
50
|
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this(/split)(/split2)') == [
|
51
|
-
[
|
52
|
-
[
|
53
|
-
[
|
54
|
-
[
|
51
|
+
['/', "test", '/', "this"],
|
52
|
+
['/', "test", '/', "this", '/', "split"],
|
53
|
+
['/', "test", '/', "this", '/', "split2"],
|
54
|
+
['/', "test", '/', "this", '/', "split", '/', "split2"]
|
55
55
|
]
|
56
56
|
end
|
57
57
|
|
58
58
|
it "should group nested-optional parts with brackets" do
|
59
59
|
Usher::Splitter.for_delimiters(['/', '.'], '[0-9A-Za-z\$\-_\+!\*\',]+').split('/test/this(/split(.:format))') == [
|
60
|
-
[
|
61
|
-
[
|
62
|
-
[
|
60
|
+
['/', "test", '/', "this"],
|
61
|
+
['/', "test", '/', "this", '/', "split"],
|
62
|
+
['/', "test", '/', "this", '/', "split", '.', Usher::Route::Variable.new(:':', :format)]
|
63
63
|
]
|
64
64
|
end
|
65
65
|
|
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.4.
|
4
|
+
version: 0.4.5
|
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-
|
12
|
+
date: 2009-06-03 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- VERSION.yml
|
39
39
|
- lib/usher
|
40
40
|
- lib/usher/exceptions.rb
|
41
|
+
- lib/usher/generate.rb
|
41
42
|
- lib/usher/grapher.rb
|
42
43
|
- lib/usher/interface
|
43
44
|
- lib/usher/interface/email_interface.rb
|
@@ -46,9 +47,10 @@ files:
|
|
46
47
|
- lib/usher/interface/rack_interface/mapper.rb
|
47
48
|
- lib/usher/interface/rack_interface/route.rb
|
48
49
|
- lib/usher/interface/rack_interface.rb
|
49
|
-
- lib/usher/interface/
|
50
|
-
- lib/usher/interface/
|
51
|
-
- lib/usher/interface/
|
50
|
+
- lib/usher/interface/rails2_2_interface
|
51
|
+
- lib/usher/interface/rails2_2_interface/mapper.rb
|
52
|
+
- lib/usher/interface/rails2_2_interface.rb
|
53
|
+
- lib/usher/interface/rails2_3_interface.rb
|
52
54
|
- lib/usher/interface.rb
|
53
55
|
- lib/usher/node.rb
|
54
56
|
- lib/usher/route
|
@@ -66,11 +68,16 @@ files:
|
|
66
68
|
- spec/private/path_spec.rb
|
67
69
|
- spec/private/rack
|
68
70
|
- spec/private/rack/dispatch_spec.rb
|
69
|
-
- spec/private/
|
70
|
-
- spec/private/
|
71
|
-
- spec/private/
|
72
|
-
- spec/private/
|
73
|
-
- spec/private/
|
71
|
+
- spec/private/rails2_2
|
72
|
+
- spec/private/rails2_2/compat.rb
|
73
|
+
- spec/private/rails2_2/generate_spec.rb
|
74
|
+
- spec/private/rails2_2/path_spec.rb
|
75
|
+
- spec/private/rails2_2/recognize_spec.rb
|
76
|
+
- spec/private/rails2_3
|
77
|
+
- spec/private/rails2_3/compat.rb
|
78
|
+
- spec/private/rails2_3/generate_spec.rb
|
79
|
+
- spec/private/rails2_3/path_spec.rb
|
80
|
+
- spec/private/rails2_3/recognize_spec.rb
|
74
81
|
- spec/private/recognize_spec.rb
|
75
82
|
- spec/private/request_method_spec.rb
|
76
83
|
- spec/private/split_spec.rb
|