joshbuddy-usher 0.0.2

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.
@@ -0,0 +1,66 @@
1
+ require 'lib/usher'
2
+
3
+ route_set = Usher.new
4
+
5
+ def build_request(opts)
6
+ request = mock "Request"
7
+ opts.each do |k,v|
8
+ request.should_receive(k).any_number_of_times.and_return(v)
9
+ end
10
+ request
11
+ end
12
+
13
+ SampleController = Object.new
14
+
15
+ describe "Usher route recognition" do
16
+
17
+ before(:each) do
18
+ route_set.reset!
19
+ end
20
+
21
+ it "should recognize a specific domain name" do
22
+ target_route = route_set.add_route('/sample', :controller => 'sample', :action => 'action', :conditions => {:protocol => 'http'})
23
+ route_set.add_route('/sample', :controller => 'sample', :action => 'action2', :conditions => {:protocol => 'https'})
24
+ target_route.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/sample', :protocol => 'http'})).first).should == true
25
+ end
26
+
27
+ it "should recognize a regex domain name" do
28
+ target_route = route_set.add_route('/sample', :controller => 'sample', :action => 'action', :conditions => {:domain => /^admin.*$/})
29
+ route_set.add_route('/sample', :controller => 'sample', :action => 'action2', :conditions => {:domain => 'www.host.com'})
30
+ target_route.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/sample', :domain => 'admin.host.com'})).first).should == true
31
+ end
32
+
33
+ it "should recognize a specific route when several http-style restrictions are used" do
34
+ target_route_http_admin = route_set.add_route('/sample', :controller => 'sample', :action => 'action', :conditions => {:protocol => 'http', :domain => 'admin.spec.com'})
35
+ target_route_http_www = route_set.add_route('/sample', :controller => 'sample', :action => 'action', :conditions => {:protocol => 'http', :domain => 'www.spec.com'})
36
+ target_route_https_msie = route_set.add_route('/sample', :controller => 'sample', :action => 'action2', :conditions => {:protocol => 'https', :user_agent => 'MSIE 6.0'})
37
+ target_route_https_admin = route_set.add_route('/sample', :controller => 'sample', :action => 'action2', :conditions => {:protocol => 'https', :domain => 'admin.spec.com'})
38
+ target_route_http_admin.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/sample', :protocol => 'http', :domain => 'admin.spec.com', :user_agent => nil})).first).should == true
39
+ target_route_http_www.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/sample', :protocol => 'http', :domain => 'www.spec.com', :user_agent => nil})).first).should == true
40
+ target_route_https_msie.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/sample', :protocol => 'https', :domain => 'admin.spec.com', :user_agent => 'MSIE 6.0'})).first).should == true
41
+ target_route_https_admin.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/sample', :protocol => 'https', :domain => 'admin.spec.com', :user_agent => nil})).first).should == true
42
+ end
43
+
44
+ it "should correctly fix that tree if conditionals are used later" do
45
+ noop_route = route_set.add_route('noop', :controller => 'products', :action => 'noop')
46
+ product_show_route = route_set.add_route('/products/show/:id', :id => /\d+/, :conditions => {:method => 'get'})
47
+ noop_route.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/noop', :domain => 'admin.host.com'})).first).should == true
48
+ product_show_route.paths.include?(route_set.recognize(build_request({:method => 'get', :path => '/products/show/123', :domain => 'admin.host.com'})).first).should == true
49
+ end
50
+
51
+ it "should use a transformer (proc) on incoming variables" do
52
+ route_set.add_route('/:controller/:action/:id', :transformers => {:id => proc{|v| v.to_i}})
53
+ route_set.recognize(build_request({:method => 'get', :path => '/products/show/123asd', :domain => 'admin.host.com'})).last.rassoc(123).first.should == :id
54
+ end
55
+
56
+ it "should use a transformer (symbol) on incoming variables" do
57
+ route_set.add_route('/:controller/:action/:id', :transformers => {:id => :to_i})
58
+ route_set.recognize(build_request({:method => 'get', :path => '/products/show/123asd', :domain => 'admin.host.com'})).last.rassoc(123).first.should == :id
59
+ end
60
+
61
+ it "should should raise if malformed variables are used" do
62
+ route_set.add_route('/products/show/:id', :id => /\d+/, :conditions => {:method => 'get'})
63
+ proc {route_set.recognize(build_request({:method => 'get', :path => '/products/show/qweasd', :domain => 'admin.host.com'}))}.should raise_error
64
+ end
65
+
66
+ end
@@ -0,0 +1,7 @@
1
+ --colour
2
+ --format
3
+ specdoc
4
+ --loadby
5
+ mtime
6
+ --reverse
7
+ --backtrace
@@ -0,0 +1,37 @@
1
+ require 'lib/usher'
2
+
3
+ Slash = Usher::Route::Separator::Slash
4
+ Dot = Usher::Route::Separator::Dot
5
+
6
+ describe "Usher route tokenizing" do
7
+
8
+
9
+ it "should split / delimited routes" do
10
+ Usher::Route::Splitter.new('/test/this/split').paths.first.should == [Slash, 'test', Slash, 'this', Slash, 'split']
11
+ end
12
+
13
+ it "should group optional parts with brackets" do
14
+ Usher::Route::Splitter.new('/test/this(/split)').paths.should == [
15
+ [Slash, 'test', Slash, 'this'],
16
+ [Slash, 'test', Slash, 'this', Slash, 'split']
17
+ ]
18
+ end
19
+
20
+ it "should group optional parts with brackets (for non overlapping groups)" do
21
+ Usher::Route::Splitter.new('/test/this(/split)(/split2)').paths == [
22
+ [Slash, "test", Slash, "this"],
23
+ [Slash, "test", Slash, "this", Slash, "split"],
24
+ [Slash, "test", Slash, "this", Slash, "split2"],
25
+ [Slash, "test", Slash, "this", Slash, "split", Slash, "split2"]
26
+ ]
27
+ end
28
+
29
+ it "should group nested-optional parts with brackets" do
30
+ Usher::Route::Splitter.new('/test/this(/split(.:format))').paths == [
31
+ [Slash, "test", Slash, "this"],
32
+ [Slash, "test", Slash, "this", Slash, "split"],
33
+ [Slash, "test", Slash, "this", Slash, "split", Dot, Usher::Route::Variable.new(:':', :format)]
34
+ ]
35
+ end
36
+
37
+ end
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{usher}
5
+ s.version = "0.0.2"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Joshua HullJoshua Hull"]
9
+ s.date = %q{2009-03-01}
10
+ s.email = %q{joshbuddy@gmail.comjoshbuddy@gmail.com}
11
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt"]
12
+ s.files = ["History.txt", "Manifest.txt", "README.rdoc", "Rakefile", "lib/compat.rb", "lib/usher.rb", "lib/usher/exceptions.rb", "lib/usher/grapher.rb", "lib/usher/interface.rb", "lib/usher/interface/merb_interface.rb", "lib/usher/interface/rack_interface.rb", "lib/usher/interface/rack_interface/mapper.rb", "lib/usher/interface/rack_interface/route.rb", "lib/usher/interface/rails2_interface.rb", "lib/usher/interface/rails2_interface/mapper.rb", "lib/usher/node.rb", "lib/usher/node/lookup.rb", "lib/usher/route.rb", "lib/usher/route/http.rb", "lib/usher/route/path.rb", "lib/usher/route/separator.rb", "lib/usher/route/splitter.rb", "lib/usher/route/variable.rb", "rails/init.rb", "spec/generate_spec.rb", "spec/node/lookup_spec.rb", "spec/path_spec.rb", "spec/rack/dispatch_spec.rb", "spec/rails/generate_spec.rb", "spec/rails/path_spec.rb", "spec/rails/recognize_spec.rb", "spec/recognize_spec.rb", "spec/spec.opts", "spec/split_spec.rb", "usher.gemspec"]
13
+ s.has_rdoc = true
14
+ s.rdoc_options = ["--main", "README.rdoc"]
15
+ s.require_paths = ["lib"]
16
+ s.rubyforge_project = %q{usher}
17
+ s.rubygems_version = %q{1.3.1}
18
+ s.summary = %q{Tree-based router}
19
+
20
+ if s.respond_to? :specification_version then
21
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
22
+ s.specification_version = 2
23
+
24
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
25
+ s.add_development_dependency(%q<hoe>, [">= 1.8.3"])
26
+ else
27
+ s.add_dependency(%q<hoe>, [">= 1.8.3"])
28
+ end
29
+ else
30
+ s.add_dependency(%q<hoe>, [">= 1.8.3"])
31
+ end
32
+ end
metadata ADDED
@@ -0,0 +1,98 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: joshbuddy-usher
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Joshua HullJoshua Hull
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-03-01 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.8.3
24
+ version:
25
+ description:
26
+ email: joshbuddy@gmail.comjoshbuddy@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - History.txt
33
+ - Manifest.txt
34
+ files:
35
+ - History.txt
36
+ - Manifest.txt
37
+ - README.rdoc
38
+ - Rakefile
39
+ - lib/compat.rb
40
+ - lib/usher.rb
41
+ - lib/usher/exceptions.rb
42
+ - lib/usher/grapher.rb
43
+ - lib/usher/interface.rb
44
+ - lib/usher/interface/merb_interface.rb
45
+ - lib/usher/interface/rack_interface.rb
46
+ - lib/usher/interface/rack_interface/mapper.rb
47
+ - lib/usher/interface/rack_interface/route.rb
48
+ - lib/usher/interface/rails2_interface.rb
49
+ - lib/usher/interface/rails2_interface/mapper.rb
50
+ - lib/usher/node.rb
51
+ - lib/usher/node/lookup.rb
52
+ - lib/usher/route.rb
53
+ - lib/usher/route/http.rb
54
+ - lib/usher/route/path.rb
55
+ - lib/usher/route/separator.rb
56
+ - lib/usher/route/splitter.rb
57
+ - lib/usher/route/variable.rb
58
+ - rails/init.rb
59
+ - spec/generate_spec.rb
60
+ - spec/node/lookup_spec.rb
61
+ - spec/path_spec.rb
62
+ - spec/rack/dispatch_spec.rb
63
+ - spec/rails/generate_spec.rb
64
+ - spec/rails/path_spec.rb
65
+ - spec/rails/recognize_spec.rb
66
+ - spec/recognize_spec.rb
67
+ - spec/spec.opts
68
+ - spec/split_spec.rb
69
+ - usher.gemspec
70
+ has_rdoc: true
71
+ homepage:
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --main
75
+ - README.rdoc
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: "0"
83
+ version:
84
+ required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: "0"
89
+ version:
90
+ requirements: []
91
+
92
+ rubyforge_project: usher
93
+ rubygems_version: 1.2.0
94
+ signing_key:
95
+ specification_version: 2
96
+ summary: Tree-based router
97
+ test_files: []
98
+