pendragon 0.6.2 → 1.0.0

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.
@@ -1,32 +0,0 @@
1
- require File.expand_path('../../lib/pendragon', __FILE__)
2
- $:.unshift(File.dirname(__FILE__))
3
- require 'helper'
4
-
5
- describe Pendragon::Configuration do
6
- setup do
7
- @pendragon = pendragon{|config| }
8
- end
9
-
10
- describe "auto_rack_format" do
11
- should "set `true` as default value" do
12
- @pendragon.get("/"){ "hey" }
13
- get "/"
14
- assert_equal "hey", body
15
- assert_equal true, @pendragon.configuration.auto_rack_format?
16
- end
17
-
18
- should "not serialize for rack format if `auto_rack_format` is false" do
19
- @pendragon = pendragon do |config|
20
- config.auto_rack_format = false
21
- end
22
-
23
- @pendragon.get("/"){ "hey" }
24
- assert_raises(Rack::Lint::LintError){ get "/" }
25
-
26
- @pendragon.post("/"){ [200, {'Content-Type' => 'text/html;charset=utf-8'}, ["hey"]] }
27
- post "/"
28
- assert_equal "hey", body
29
- assert_equal false, @pendragon.configuration.auto_rack_format?
30
- end
31
- end
32
- end
@@ -1,229 +0,0 @@
1
- # coding: utf-8
2
- require File.expand_path('../../lib/pendragon', __FILE__)
3
- $:.unshift(File.dirname(__FILE__))
4
- require 'helper'
5
-
6
- describe Pendragon do
7
- setup{ @pendragon = pendragon{|config| config.enable_compiler = defined?(ENABLE_COMPILER) } }
8
-
9
- describe "normal routing" do
10
- before(:each){ @pendragon.reset! }
11
-
12
- should "basic route" do
13
- @pendragon.add(:get, "/"){ "index" }
14
- @pendragon.add(:get, "/users"){ "users" }
15
- get("/")
16
- assert_equal "index", body
17
- get("/users")
18
- assert_equal "users", body
19
- end
20
-
21
- should "ignore trailing delimiters for basic route" do
22
- @pendragon.add(:get, "/"){ "index" }
23
- @pendragon.add(:get, "/users"){ "users" }
24
-
25
- get("")
26
- assert_equal "index", body
27
- get("/users/")
28
- assert_equal "users", body
29
- end
30
-
31
- should "use pattern" do
32
- @pendragon.add(:get, "/:id"){|params| "show #{params[:id]}" }
33
- @pendragon.add(:get, "/:id.:ext"){|params| "show #{params[:id]}.#{params[:ext]}" }
34
-
35
- get("/1")
36
- assert_equal "show 1", body
37
- get(URI.escape("/あいうえお"))
38
- assert_equal "show あいうえお", body
39
- get("/foo")
40
- assert_equal "show foo", body
41
- get("/1.json")
42
- assert_equal "show 1.json", body
43
- get("/foo.xml")
44
- assert_equal "show foo.xml", body
45
- end
46
-
47
- should "use capture" do
48
- id_route = @pendragon.add(:get, "/:id"){|params| "show #{params[:id]}" }
49
- id_route.capture[:id] = /\d+/
50
-
51
- id_with_ext_route = @pendragon.add(:get, "/:id.:ext"){|params| "show #{params[:id]}.#{params[:ext]}" }
52
- id_with_ext_route.capture[:id] = /(foo|bar)/
53
- id_with_ext_route.capture[:ext] = %w[html json]
54
-
55
- get("/1")
56
- assert_equal "show 1", body
57
- get("/foo")
58
- assert_equal "Not Found", body
59
- get("/foo.json")
60
- assert_equal "show foo.json", body
61
- get("/baz.json")
62
- assert_equal "Not Found", body
63
- get("/foo.html")
64
- assert_equal "show foo.html", body
65
- get("/foo.xml")
66
- assert_equal "Not Found", body
67
- end
68
-
69
- should "support verb methods" do
70
- @pendragon.get("/"){ "get" }
71
- @pendragon.post("/"){ "post" }
72
- @pendragon.delete("/"){ "delete" }
73
- @pendragon.put("/"){ "put" }
74
- @pendragon.head("/"){ }
75
- get("/")
76
- assert_equal "get", body
77
- post("/")
78
- assert_equal "post", body
79
- delete("/")
80
- assert_equal "delete", body
81
- put("/")
82
- assert_equal "put", body
83
- head("/")
84
- assert_equal "", body
85
- end
86
-
87
- should "support for correct options" do
88
- named_route = @pendragon.get("/name/:name", name: :named_route){}
89
- incorrect_route = @pendragon.get("/router", router: :incorrect!){}
90
- status_route = @pendragon.get("/router", status: 200){}
91
- assert_equal :named_route, named_route.name
92
- assert_equal "/name/foo", @pendragon.path(:named_route, name: :foo)
93
- assert_equal true, incorrect_route.instance_variable_get(:@router).instance_of?(Pendragon::Router)
94
- end
95
-
96
- should "allow to throw :pass for routing like journey" do
97
- foo = nil
98
- @pendragon.get("/"){ foo = "yay"; throw :pass }
99
- @pendragon.get("/"){ foo }
100
- get "/"
101
- assert_equal "yay", body
102
- end
103
-
104
- should "recognize the route if non-cut pattern is matched" do
105
- @pendragon.get("/hey/"){ "say" }
106
- @pendragon.get("/hey"){ "yay" }
107
- get "/hey/"
108
- assert_equal "say", body
109
- end
110
- end
111
-
112
- describe "route options" do
113
- should "support for :capture option" do
114
- capture = {foo: /\d+/, bar: "bar"}
115
- route = @pendragon.get("/:foo/:bar", capture: capture){}
116
- assert_equal route.capture, capture
117
- assert_equal nil, route.match("/foo/bar")
118
- assert_equal nil, route.match("/123/baz")
119
- assert_equal true, route.match("/123/bar").instance_of?(MatchData)
120
- end
121
-
122
- should "support for :name option" do
123
- route = @pendragon.get("/name/:name", name: :named_route){}
124
- assert_equal :named_route, route.name
125
- assert_equal "/name/foo", @pendragon.path(:named_route, name: :foo)
126
- end
127
-
128
- should "not support for :router option" do
129
- route = @pendragon.get("/router", router: :incorrect!){}
130
- assert_equal true, route.instance_variable_get(:@router).instance_of?(Pendragon::Router)
131
- end
132
-
133
- should "support for :order option" do
134
- @pendragon.get("/", order: 2){ "three" }
135
- @pendragon.get("/", order: 0){ "one" }
136
- @pendragon.get("/", order: 1){ "two" }
137
- request = Rack::MockRequest.env_for("/")
138
- assert_equal ["one", "two", "three"], @pendragon.recognize(request).map{|route, _| route.call }
139
- end
140
-
141
- should "support for :status option" do
142
- @pendragon.get("/", status: 201){ "hey" }
143
- get "/"
144
- assert_equal 201, status
145
- end
146
-
147
- should "support for :header option" do
148
- header = {"Content-Type" => "text/plain;"}
149
- @pendragon.get("/", header: header){ "hey" }
150
- get "/"
151
- assert_equal header.merge("Content-Length" => "3"), headers
152
- end
153
- end
154
-
155
- describe "regexp routing" do
156
- before(:each){ @pendragon.reset! }
157
-
158
- should "basic route of regexp" do
159
- @pendragon.add(:get, /\/(\d+)/){|params| params[:captures].join(",") }
160
- @pendragon.add(:get, /\/(foo|bar)(baz)?/){|params| params[:captures].compact.join(",") }
161
-
162
- get("/123")
163
- assert_equal "123", body
164
- get("/foo")
165
- assert_equal "foo", body
166
- get("/foobaz")
167
- assert_equal "foo,baz", body
168
- end
169
- end
170
-
171
- describe "generate path" do
172
- before(:each){ @pendragon.reset! }
173
-
174
- should "basic route" do
175
- index = @pendragon.add(:get, "/", :name => :index){}
176
- foo_bar = @pendragon.add(:post, "/foo/bar", :name => :foo_bar){}
177
- users = @pendragon.add(:get, "/users/:user_id", :name => :users){}
178
-
179
- assert_equal "/", @pendragon.path(:index)
180
- assert_equal "/foo/bar", @pendragon.path(:foo_bar)
181
- assert_equal "/users/1", @pendragon.path(:users, :user_id => 1)
182
- assert_equal "/users/1?query=string", @pendragon.path(:users, :user_id => 1, :query => "string")
183
- end
184
-
185
- should "regexp" do
186
- index = @pendragon.add(:get, /.+?/, :name => :index){}
187
- foo_bar = @pendragon.add(:post, /\d+/, :name => :foo_bar){}
188
-
189
- assert_equal /.+?/, @pendragon.path(:index)
190
- assert_equal /\d+/, @pendragon.path(:foo_bar)
191
- end
192
- end
193
-
194
- describe "#new allows block" do
195
- should "#new support for block." do
196
- foo = @pendragon.add(:get, "/", :name => :foo){"foo"}
197
- bar = @pendragon.add(:post, "/", :name => :bar){"bar"}
198
- get("/")
199
- assert_equal "foo", body
200
- post("/")
201
- assert_equal "bar", body
202
- assert_equal "/", @app.path(:foo)
203
- assert_equal "/", @app.path(:bar)
204
- end
205
- end
206
-
207
- describe "splat" do
208
- should "support splat pattern" do
209
- @pendragon.get("/hey/*"){|s| "#{s[:splat][0]} splat!" }
210
- get "/hey/hello"
211
- assert_equal "hello splat!", body
212
- end
213
-
214
- should "support splat pattern including slash" do
215
- @pendragon.get("/hey/*"){|s| "#{s[:splat][0]} splat!" }
216
- get "/hey/hello/world"
217
- assert_equal "hello/world splat!", body
218
- end
219
- end
220
-
221
- describe "header" do
222
- should "set Allow header when occur 405" do
223
- @pendragon.get("/"){}
224
- @pendragon.put("/"){}
225
- post "/"
226
- assert_equal "GET, PUT", response.header['Allow']
227
- end
228
- end
229
- end