roda 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +70 -0
  3. data/README.rdoc +261 -302
  4. data/Rakefile +1 -1
  5. data/doc/release_notes/1.2.0.txt +406 -0
  6. data/lib/roda.rb +206 -124
  7. data/lib/roda/plugins/all_verbs.rb +11 -10
  8. data/lib/roda/plugins/assets.rb +5 -5
  9. data/lib/roda/plugins/backtracking_array.rb +12 -5
  10. data/lib/roda/plugins/caching.rb +10 -8
  11. data/lib/roda/plugins/class_level_routing.rb +94 -0
  12. data/lib/roda/plugins/content_for.rb +6 -0
  13. data/lib/roda/plugins/default_headers.rb +4 -11
  14. data/lib/roda/plugins/delay_build.rb +42 -0
  15. data/lib/roda/plugins/delegate.rb +64 -0
  16. data/lib/roda/plugins/drop_body.rb +33 -0
  17. data/lib/roda/plugins/empty_root.rb +48 -0
  18. data/lib/roda/plugins/environments.rb +68 -0
  19. data/lib/roda/plugins/error_email.rb +1 -2
  20. data/lib/roda/plugins/error_handler.rb +1 -1
  21. data/lib/roda/plugins/halt.rb +7 -5
  22. data/lib/roda/plugins/head.rb +4 -2
  23. data/lib/roda/plugins/header_matchers.rb +17 -9
  24. data/lib/roda/plugins/hooks.rb +16 -32
  25. data/lib/roda/plugins/json.rb +4 -10
  26. data/lib/roda/plugins/mailer.rb +233 -0
  27. data/lib/roda/plugins/match_affix.rb +48 -0
  28. data/lib/roda/plugins/multi_route.rb +9 -11
  29. data/lib/roda/plugins/multi_run.rb +81 -0
  30. data/lib/roda/plugins/named_templates.rb +93 -0
  31. data/lib/roda/plugins/not_allowed.rb +43 -48
  32. data/lib/roda/plugins/path.rb +63 -2
  33. data/lib/roda/plugins/render.rb +79 -48
  34. data/lib/roda/plugins/render_each.rb +6 -0
  35. data/lib/roda/plugins/sinatra_helpers.rb +523 -0
  36. data/lib/roda/plugins/slash_path_empty.rb +25 -0
  37. data/lib/roda/plugins/static_path_info.rb +64 -0
  38. data/lib/roda/plugins/streaming.rb +1 -1
  39. data/lib/roda/plugins/view_subdirs.rb +12 -8
  40. data/lib/roda/version.rb +1 -1
  41. data/spec/integration_spec.rb +33 -0
  42. data/spec/plugin/backtracking_array_spec.rb +24 -18
  43. data/spec/plugin/class_level_routing_spec.rb +138 -0
  44. data/spec/plugin/delay_build_spec.rb +23 -0
  45. data/spec/plugin/delegate_spec.rb +20 -0
  46. data/spec/plugin/drop_body_spec.rb +20 -0
  47. data/spec/plugin/empty_root_spec.rb +14 -0
  48. data/spec/plugin/environments_spec.rb +31 -0
  49. data/spec/plugin/h_spec.rb +1 -3
  50. data/spec/plugin/header_matchers_spec.rb +14 -0
  51. data/spec/plugin/hooks_spec.rb +3 -5
  52. data/spec/plugin/mailer_spec.rb +191 -0
  53. data/spec/plugin/match_affix_spec.rb +22 -0
  54. data/spec/plugin/multi_run_spec.rb +31 -0
  55. data/spec/plugin/named_templates_spec.rb +65 -0
  56. data/spec/plugin/path_spec.rb +66 -2
  57. data/spec/plugin/render_spec.rb +46 -1
  58. data/spec/plugin/sinatra_helpers_spec.rb +534 -0
  59. data/spec/plugin/slash_path_empty_spec.rb +22 -0
  60. data/spec/plugin/static_path_info_spec.rb +50 -0
  61. data/spec/request_spec.rb +23 -0
  62. data/spec/response_spec.rb +12 -1
  63. metadata +48 -6
@@ -0,0 +1,22 @@
1
+ require File.expand_path("spec_helper", File.dirname(File.dirname(__FILE__)))
2
+
3
+ describe "slash_path_empty" do
4
+ it "considers a / path as empty" do
5
+ app(:slash_path_empty) do |r|
6
+ r.is{"1"}
7
+ r.is("a"){"2"}
8
+ r.get("b"){"3"}
9
+ end
10
+
11
+ body("").should == '1'
12
+ body.should == '1'
13
+ body("a").should == ''
14
+ body("/a").should == '2'
15
+ body("/a/").should == '2'
16
+ body("/a/b").should == ''
17
+ body("b").should == ''
18
+ body("/b").should == '3'
19
+ body("/b/").should == '3'
20
+ body("/b/c").should == ''
21
+ end
22
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path("spec_helper", File.dirname(File.dirname(__FILE__)))
2
+
3
+ describe "static_path_info plugin" do
4
+ it "does not modify SCRIPT_NAME/PATH_INFO during routing" do
5
+ app(:bare) do
6
+ plugin :static_path_info
7
+ plugin :pass
8
+
9
+ route do |r|
10
+ r.on "foo" do
11
+ r.is "bar" do
12
+ "bar|#{env['SCRIPT_NAME']}|#{env['PATH_INFO']}"
13
+ end
14
+ r.is "baz" do
15
+ r.pass
16
+ end
17
+ "foo|#{env['SCRIPT_NAME']}|#{env['PATH_INFO']}"
18
+ end
19
+ "#{env['SCRIPT_NAME']}|#{env['PATH_INFO']}"
20
+ end
21
+ end
22
+
23
+ body.should == '|/'
24
+ body('SCRIPT_NAME'=>'/a').should == '/a|/'
25
+ body('/foo').should == 'foo||/foo'
26
+ body('/foo', 'SCRIPT_NAME'=>'/a').should == 'foo|/a|/foo'
27
+ body('/foo/bar').should == 'bar||/foo/bar'
28
+ body('/foo/bar', 'SCRIPT_NAME'=>'/a').should == 'bar|/a|/foo/bar'
29
+ body('/foo/baz').should == 'foo||/foo/baz'
30
+ body('/foo/baz', 'SCRIPT_NAME'=>'/a').should == 'foo|/a|/foo/baz'
31
+ end
32
+
33
+ it "modifies SCRIPT_NAME/PATH_INFO when calling run" do
34
+ a = app{|r| "#{r.script_name}|#{r.path_info}"}
35
+ app(:static_path_info){|r| r.on("a"){r.run a}}
36
+ body("/a/b").should == "/a|/b"
37
+ end
38
+ end
39
+
40
+ describe "static_path_info request.path, .remaining_path, and .matched_path" do
41
+ it "should return the script name and path_info as a string" do
42
+ app(:static_path_info) do |r|
43
+ r.on "foo" do
44
+ "#{r.path}:#{r.matched_path}:#{r.remaining_path}"
45
+ end
46
+ end
47
+
48
+ body("/foo/bar").should == "/foo/bar:/foo:/bar"
49
+ end
50
+ end
@@ -12,6 +12,18 @@ describe "request.full_path_info" do
12
12
  end
13
13
  end
14
14
 
15
+ describe "request.path, .remaining_path, and .matched_path" do
16
+ it "should return the script name and path_info as a string" do
17
+ app do |r|
18
+ r.on "foo" do
19
+ "#{r.path}:#{r.matched_path}:#{r.remaining_path}"
20
+ end
21
+ end
22
+
23
+ body("/foo/bar").should == "/foo/bar:/foo:/bar"
24
+ end
25
+ end
26
+
15
27
  describe "request.halt" do
16
28
  it "should return rack response as argument given it as argument" do
17
29
  app do |r|
@@ -72,3 +84,14 @@ describe "TERM.inspect" do
72
84
  body.should == "TERM"
73
85
  end
74
86
  end
87
+
88
+ describe "roda_class" do
89
+ it "should return the related roda subclass" do
90
+ app do |r|
91
+ self.class.opts[:a] = 'a'
92
+ r.class.roda_class.opts[:a] + r.roda_class.opts[:a]
93
+ end
94
+
95
+ body.should == "aa"
96
+ end
97
+ end
@@ -173,6 +173,17 @@ describe "response #inspect" do
173
173
  end
174
174
  end
175
175
 
176
- body.should == '#<Foo::RodaResponse 200 {"Content-Type"=>"text/html"} []>'
176
+ body.should == '#<Foo::RodaResponse 200 {} []>'
177
+ end
178
+ end
179
+
180
+ describe "roda_class" do
181
+ it "should return the related roda subclass" do
182
+ app do |r|
183
+ self.class.opts[:a] = 'a'
184
+ response.class.roda_class.opts[:a] + response.roda_class.opts[:a]
185
+ end
186
+
187
+ body.should == "aa"
177
188
  end
178
189
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-11 00:00:00.000000000 Z
11
+ date: 2014-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -108,7 +108,21 @@ dependencies:
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
- description: Routing tree web framework, inspired by Sinatra and Cuba
111
+ - !ruby/object:Gem::Dependency
112
+ name: mail
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description:
112
126
  email:
113
127
  - code@jeremyevans.net
114
128
  executables: []
@@ -120,6 +134,7 @@ extra_rdoc_files:
120
134
  - doc/conventions.rdoc
121
135
  - doc/release_notes/1.0.0.txt
122
136
  - doc/release_notes/1.1.0.txt
137
+ - doc/release_notes/1.2.0.txt
123
138
  files:
124
139
  - CHANGELOG
125
140
  - MIT-LICENSE
@@ -128,6 +143,7 @@ files:
128
143
  - doc/conventions.rdoc
129
144
  - doc/release_notes/1.0.0.txt
130
145
  - doc/release_notes/1.1.0.txt
146
+ - doc/release_notes/1.2.0.txt
131
147
  - lib/roda.rb
132
148
  - lib/roda/plugins/_erubis_escaping.rb
133
149
  - lib/roda/plugins/all_verbs.rb
@@ -135,9 +151,15 @@ files:
135
151
  - lib/roda/plugins/backtracking_array.rb
136
152
  - lib/roda/plugins/caching.rb
137
153
  - lib/roda/plugins/chunked.rb
154
+ - lib/roda/plugins/class_level_routing.rb
138
155
  - lib/roda/plugins/content_for.rb
139
156
  - lib/roda/plugins/csrf.rb
140
157
  - lib/roda/plugins/default_headers.rb
158
+ - lib/roda/plugins/delay_build.rb
159
+ - lib/roda/plugins/delegate.rb
160
+ - lib/roda/plugins/drop_body.rb
161
+ - lib/roda/plugins/empty_root.rb
162
+ - lib/roda/plugins/environments.rb
141
163
  - lib/roda/plugins/error_email.rb
142
164
  - lib/roda/plugins/error_handler.rb
143
165
  - lib/roda/plugins/flash.rb
@@ -148,8 +170,12 @@ files:
148
170
  - lib/roda/plugins/hooks.rb
149
171
  - lib/roda/plugins/indifferent_params.rb
150
172
  - lib/roda/plugins/json.rb
173
+ - lib/roda/plugins/mailer.rb
174
+ - lib/roda/plugins/match_affix.rb
151
175
  - lib/roda/plugins/middleware.rb
152
176
  - lib/roda/plugins/multi_route.rb
177
+ - lib/roda/plugins/multi_run.rb
178
+ - lib/roda/plugins/named_templates.rb
153
179
  - lib/roda/plugins/not_allowed.rb
154
180
  - lib/roda/plugins/not_found.rb
155
181
  - lib/roda/plugins/pass.rb
@@ -157,6 +183,9 @@ files:
157
183
  - lib/roda/plugins/per_thread_caching.rb
158
184
  - lib/roda/plugins/render.rb
159
185
  - lib/roda/plugins/render_each.rb
186
+ - lib/roda/plugins/sinatra_helpers.rb
187
+ - lib/roda/plugins/slash_path_empty.rb
188
+ - lib/roda/plugins/static_path_info.rb
160
189
  - lib/roda/plugins/streaming.rb
161
190
  - lib/roda/plugins/symbol_matchers.rb
162
191
  - lib/roda/plugins/symbol_views.rb
@@ -178,9 +207,15 @@ files:
178
207
  - spec/plugin/backtracking_array_spec.rb
179
208
  - spec/plugin/caching_spec.rb
180
209
  - spec/plugin/chunked_spec.rb
210
+ - spec/plugin/class_level_routing_spec.rb
181
211
  - spec/plugin/content_for_spec.rb
182
212
  - spec/plugin/csrf_spec.rb
183
213
  - spec/plugin/default_headers_spec.rb
214
+ - spec/plugin/delay_build_spec.rb
215
+ - spec/plugin/delegate_spec.rb
216
+ - spec/plugin/drop_body_spec.rb
217
+ - spec/plugin/empty_root_spec.rb
218
+ - spec/plugin/environments_spec.rb
184
219
  - spec/plugin/error_email_spec.rb
185
220
  - spec/plugin/error_handler_spec.rb
186
221
  - spec/plugin/flash_spec.rb
@@ -191,8 +226,12 @@ files:
191
226
  - spec/plugin/hooks_spec.rb
192
227
  - spec/plugin/indifferent_params_spec.rb
193
228
  - spec/plugin/json_spec.rb
229
+ - spec/plugin/mailer_spec.rb
230
+ - spec/plugin/match_affix_spec.rb
194
231
  - spec/plugin/middleware_spec.rb
195
232
  - spec/plugin/multi_route_spec.rb
233
+ - spec/plugin/multi_run_spec.rb
234
+ - spec/plugin/named_templates_spec.rb
196
235
  - spec/plugin/not_allowed_spec.rb
197
236
  - spec/plugin/not_found_spec.rb
198
237
  - spec/plugin/pass_spec.rb
@@ -200,6 +239,9 @@ files:
200
239
  - spec/plugin/per_thread_caching_spec.rb
201
240
  - spec/plugin/render_each_spec.rb
202
241
  - spec/plugin/render_spec.rb
242
+ - spec/plugin/sinatra_helpers_spec.rb
243
+ - spec/plugin/slash_path_empty_spec.rb
244
+ - spec/plugin/static_path_info_spec.rb
203
245
  - spec/plugin/streaming_spec.rb
204
246
  - spec/plugin/symbol_matchers_spec.rb
205
247
  - spec/plugin/symbol_views_spec.rb
@@ -220,7 +262,7 @@ files:
220
262
  - spec/views/layout-yield.erb
221
263
  - spec/views/layout.erb
222
264
  - spec/views/layout.str
223
- homepage: https://github.com/jeremyevans/roda
265
+ homepage: http://roda.jeremyevans.net
224
266
  licenses:
225
267
  - MIT
226
268
  metadata: {}
@@ -240,8 +282,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
240
282
  version: '0'
241
283
  requirements: []
242
284
  rubyforge_project:
243
- rubygems_version: 2.2.2
285
+ rubygems_version: 2.4.4
244
286
  signing_key:
245
287
  specification_version: 4
246
- summary: Routing tree web framework
288
+ summary: Routing tree web framework toolkit
247
289
  test_files: []