waves-stable 0.7.7 → 2009.3.10

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.
Files changed (236) hide show
  1. data/bin/waves +20 -74
  2. data/doc/HISTORY +1 -44
  3. data/doc/README +1 -0
  4. data/doc/VERSION +1 -0
  5. data/lib/caches/file.rb +48 -0
  6. data/lib/caches/memcached.rb +40 -0
  7. data/lib/caches/simple.rb +25 -0
  8. data/lib/caches/synchronized.rb +25 -0
  9. data/lib/commands/console.rb +35 -0
  10. data/lib/commands/generate.rb +52 -0
  11. data/lib/commands/help.rb +5 -0
  12. data/lib/commands/{waves-server.rb → server.rb} +16 -3
  13. data/lib/dispatchers/base.rb +22 -21
  14. data/lib/dispatchers/default.rb +10 -66
  15. data/lib/ext/float.rb +13 -0
  16. data/lib/{utilities → ext}/hash.rb +2 -2
  17. data/lib/{utilities → ext}/integer.rb +5 -2
  18. data/lib/ext/kernel.rb +20 -0
  19. data/lib/ext/module.rb +20 -0
  20. data/lib/{utilities → ext}/object.rb +3 -5
  21. data/lib/ext/string.rb +20 -0
  22. data/lib/ext/symbol.rb +11 -0
  23. data/lib/ext/tempfile.rb +5 -0
  24. data/lib/foundations/classic.rb +66 -0
  25. data/lib/foundations/compact.rb +50 -0
  26. data/lib/helpers/basic.rb +11 -0
  27. data/lib/helpers/doc_type.rb +34 -0
  28. data/lib/helpers/extended.rb +21 -0
  29. data/lib/helpers/form.rb +3 -1
  30. data/lib/helpers/formatting.rb +3 -3
  31. data/lib/helpers/layouts.rb +37 -0
  32. data/lib/helpers/model.rb +8 -4
  33. data/lib/helpers/view.rb +2 -4
  34. data/lib/layers/inflect/english.rb +48 -5
  35. data/lib/layers/mvc.rb +18 -18
  36. data/lib/layers/mvc/controllers.rb +41 -0
  37. data/lib/layers/mvc/extensions.rb +52 -0
  38. data/lib/layers/orm/migration.rb +1 -1
  39. data/lib/layers/orm/{active_record.rb → providers/active_record.rb} +9 -14
  40. data/lib/layers/orm/{active_record → providers/active_record}/migrations/empty.rb.erb +0 -0
  41. data/lib/layers/orm/{active_record → providers/active_record}/tasks/generate.rb +1 -1
  42. data/lib/layers/orm/{active_record → providers/active_record}/tasks/schema.rb +1 -1
  43. data/lib/layers/orm/{data_mapper.rb → providers/data_mapper.rb} +3 -4
  44. data/lib/layers/orm/providers/filebase.rb +25 -0
  45. data/lib/layers/orm/{sequel.rb → providers/sequel.rb} +11 -7
  46. data/lib/layers/orm/{sequel → providers/sequel}/migrations/empty.rb.erb +0 -0
  47. data/lib/layers/orm/{sequel → providers/sequel}/tasks/generate.rb +5 -3
  48. data/lib/layers/orm/{sequel → providers/sequel}/tasks/schema.rb +2 -2
  49. data/lib/{renderers → layers/renderers}/erubis.rb +13 -16
  50. data/lib/{renderers → layers/renderers}/haml.rb +27 -25
  51. data/lib/layers/renderers/markaby.rb +29 -0
  52. data/lib/matchers/accept.rb +21 -0
  53. data/lib/matchers/base.rb +30 -0
  54. data/lib/matchers/content_type.rb +17 -0
  55. data/lib/matchers/path.rb +67 -0
  56. data/lib/matchers/query.rb +21 -0
  57. data/lib/matchers/request.rb +27 -0
  58. data/lib/matchers/resource.rb +19 -0
  59. data/lib/matchers/traits.rb +19 -0
  60. data/lib/matchers/uri.rb +20 -0
  61. data/lib/renderers/mixin.rb +15 -29
  62. data/lib/resources/mixin.rb +134 -0
  63. data/lib/resources/paths.rb +34 -0
  64. data/lib/runtime/configuration.rb +51 -136
  65. data/lib/runtime/console.rb +4 -1
  66. data/lib/runtime/logger.rb +24 -48
  67. data/lib/runtime/mime_types.rb +516 -2
  68. data/lib/runtime/mocks.rb +14 -0
  69. data/lib/runtime/monitor.rb +32 -0
  70. data/lib/runtime/request.rb +107 -39
  71. data/lib/runtime/response.rb +5 -2
  72. data/lib/runtime/response_mixin.rb +41 -22
  73. data/lib/runtime/runtime.rb +67 -0
  74. data/lib/runtime/server.rb +14 -101
  75. data/lib/runtime/session.rb +4 -43
  76. data/lib/runtime/worker.rb +86 -0
  77. data/lib/servers/base.rb +42 -0
  78. data/lib/servers/mongrel.rb +13 -0
  79. data/lib/servers/webrick.rb +13 -0
  80. data/lib/tasks/gem.rb +1 -0
  81. data/lib/tasks/generate.rb +67 -62
  82. data/lib/views/errors.rb +49 -0
  83. data/lib/views/mixin.rb +34 -82
  84. data/lib/waves.rb +36 -57
  85. data/samples/blog/Rakefile +16 -5
  86. data/samples/blog/configurations/default.rb +11 -0
  87. data/samples/blog/configurations/development.rb +9 -11
  88. data/samples/blog/configurations/production.rb +11 -15
  89. data/samples/blog/models/comment.rb +9 -0
  90. data/samples/blog/models/entry.rb +17 -0
  91. data/samples/blog/public/css/site.css +13 -2
  92. data/samples/blog/public/javascript/jquery-1.2.6.min.js +32 -0
  93. data/samples/blog/resources/entry.rb +39 -0
  94. data/samples/blog/resources/map.rb +9 -0
  95. data/samples/blog/schema/migrations/001_initial_schema.rb +3 -3
  96. data/samples/blog/schema/migrations/002_add_comments.rb +2 -2
  97. data/samples/blog/startup.rb +8 -6
  98. data/samples/blog/templates/comment/add.mab +6 -4
  99. data/samples/blog/templates/comment/list.mab +4 -4
  100. data/samples/blog/templates/entry/{editor.mab → edit.mab} +7 -6
  101. data/samples/blog/templates/entry/list.mab +10 -5
  102. data/samples/blog/templates/entry/show.mab +16 -7
  103. data/samples/blog/templates/entry/summary.mab +8 -4
  104. data/samples/blog/templates/errors/not_found_404.mab +6 -1
  105. data/samples/blog/templates/layouts/default.mab +5 -3
  106. data/samples/blog/templates/waves/status.mab +85 -0
  107. data/{app → templates/classic}/Rakefile +21 -3
  108. data/templates/classic/configurations/default.rb.erb +9 -0
  109. data/{app → templates/classic}/configurations/development.rb.erb +3 -8
  110. data/{app → templates/classic}/configurations/production.rb.erb +3 -5
  111. data/{app → templates/classic}/controllers/.gitignore +0 -0
  112. data/{app/doc → templates/classic/helpers}/.gitignore +0 -0
  113. data/{app/helpers → templates/classic/lib/tasks}/.gitignore +0 -0
  114. data/{app/lib/tasks → templates/classic/models}/.gitignore +0 -0
  115. data/{app/log → templates/classic/public/css}/.gitignore +0 -0
  116. data/{app/models → templates/classic/public/flash}/.gitignore +0 -0
  117. data/{app/public/css → templates/classic/public/images}/.gitignore +0 -0
  118. data/{app/public/flash → templates/classic/public/javascript}/.gitignore +0 -0
  119. data/{app/public/images → templates/classic/resources}/.gitignore +0 -0
  120. data/templates/classic/resources/map.rb.erb +8 -0
  121. data/{app/public/javascript → templates/classic/schema/migrations}/.gitignore +0 -0
  122. data/templates/classic/startup.rb.erb +11 -0
  123. data/templates/classic/templates/errors/not_found_404.mab +7 -0
  124. data/templates/classic/templates/errors/server_error_500.mab +7 -0
  125. data/{app → templates/classic}/templates/layouts/default.mab +0 -0
  126. data/{app/schema/migrations → templates/classic/tmp/sessions}/.gitignore +0 -0
  127. data/{app/tmp/sessions → templates/classic/views}/.gitignore +0 -0
  128. data/templates/compact/startup.rb.erb +11 -0
  129. metadata +152 -258
  130. data/app/bin/waves-console +0 -4
  131. data/app/bin/waves-server +0 -4
  132. data/app/configurations/mapping.rb.erb +0 -14
  133. data/app/lib/application.rb.erb +0 -5
  134. data/app/startup.rb +0 -5
  135. data/app/templates/errors/not_found_404.mab +0 -2
  136. data/app/templates/errors/server_error_500.mab +0 -2
  137. data/app/views/.gitignore +0 -0
  138. data/bin/waves-console +0 -4
  139. data/bin/waves-server +0 -4
  140. data/lib/commands/waves-console.rb +0 -21
  141. data/lib/controllers/base.rb +0 -11
  142. data/lib/controllers/mixin.rb +0 -165
  143. data/lib/foundations/default.rb +0 -27
  144. data/lib/foundations/simple.rb +0 -30
  145. data/lib/helpers/asset_helper.rb +0 -67
  146. data/lib/helpers/common.rb +0 -66
  147. data/lib/helpers/default.rb +0 -13
  148. data/lib/helpers/number_helper.rb +0 -25
  149. data/lib/helpers/tag_helper.rb +0 -58
  150. data/lib/helpers/url_helper.rb +0 -77
  151. data/lib/layers/default_errors.rb +0 -26
  152. data/lib/layers/inflect/english/rules.rb +0 -88
  153. data/lib/layers/inflect/english/string.rb +0 -24
  154. data/lib/layers/orm/filebase.rb +0 -22
  155. data/lib/layers/simple.rb +0 -32
  156. data/lib/layers/simple_errors.rb +0 -23
  157. data/lib/mapping/mapping.rb +0 -289
  158. data/lib/mapping/pretty_urls.rb +0 -96
  159. data/lib/renderers/markaby.rb +0 -33
  160. data/lib/runtime/application.rb +0 -69
  161. data/lib/runtime/blackboard.rb +0 -57
  162. data/lib/runtime/debugger.rb +0 -9
  163. data/lib/runtime/response_proxy.rb +0 -30
  164. data/lib/tasks/cluster.rb +0 -26
  165. data/lib/utilities/inflect.rb +0 -110
  166. data/lib/utilities/module.rb +0 -21
  167. data/lib/utilities/proc.rb +0 -16
  168. data/lib/utilities/string.rb +0 -49
  169. data/lib/utilities/symbol.rb +0 -10
  170. data/lib/utilities/tempfile.rb +0 -9
  171. data/lib/views/base.rb +0 -9
  172. data/samples/blog/bin/waves-console +0 -3
  173. data/samples/blog/bin/waves-server +0 -3
  174. data/samples/blog/configurations/mapping.rb +0 -23
  175. data/samples/blog/doc/EMTPY +0 -0
  176. data/samples/blog/lib/application.rb +0 -5
  177. data/verify/app_generation/helpers.rb +0 -24
  178. data/verify/app_generation/startup.rb +0 -39
  179. data/verify/blackboard/blackboard_verify.rb +0 -92
  180. data/verify/blackboard/helpers.rb +0 -5
  181. data/verify/configurations/attributes.rb +0 -37
  182. data/verify/configurations/helpers.rb +0 -1
  183. data/verify/configurations/rack_integration.rb +0 -29
  184. data/verify/controllers/base.rb +0 -37
  185. data/verify/controllers/helpers.rb +0 -13
  186. data/verify/controllers/interface.rb +0 -51
  187. data/verify/core/helpers.rb +0 -3
  188. data/verify/core/utilities.rb +0 -177
  189. data/verify/foundations/default.rb +0 -86
  190. data/verify/foundations/default_application/Rakefile +0 -14
  191. data/verify/foundations/default_application/bin/waves-console +0 -3
  192. data/verify/foundations/default_application/bin/waves-server +0 -3
  193. data/verify/foundations/default_application/configurations/development.rb +0 -26
  194. data/verify/foundations/default_application/configurations/mapping.rb +0 -14
  195. data/verify/foundations/default_application/configurations/production.rb +0 -30
  196. data/verify/foundations/default_application/controllers/default.rb +0 -15
  197. data/verify/foundations/default_application/controllers/loaded.rb +0 -15
  198. data/verify/foundations/default_application/defaultapplication.db +0 -0
  199. data/verify/foundations/default_application/helpers/loaded.rb +0 -10
  200. data/verify/foundations/default_application/lib/application.rb +0 -5
  201. data/verify/foundations/default_application/models/default.rb +0 -13
  202. data/verify/foundations/default_application/models/loaded.rb +0 -13
  203. data/verify/foundations/default_application/schema/migrations/templates/empty.rb.erb +0 -9
  204. data/verify/foundations/default_application/startup.rb +0 -7
  205. data/verify/foundations/default_application/templates/errors/not_found_404.mab +0 -2
  206. data/verify/foundations/default_application/templates/errors/server_error_500.mab +0 -2
  207. data/verify/foundations/default_application/templates/layouts/default.mab +0 -14
  208. data/verify/foundations/default_application/views/default.rb +0 -7
  209. data/verify/foundations/default_application/views/loaded.rb +0 -15
  210. data/verify/foundations/helpers.rb +0 -1
  211. data/verify/foundations/simple.rb +0 -25
  212. data/verify/helpers.rb +0 -76
  213. data/verify/layers/data_mapper/association_verify.rb +0 -87
  214. data/verify/layers/default_errors.rb +0 -29
  215. data/verify/layers/helpers.rb +0 -1
  216. data/verify/layers/migration.rb +0 -33
  217. data/verify/layers/sequel/model.rb +0 -41
  218. data/verify/mapping/always.rb +0 -19
  219. data/verify/mapping/filters.rb +0 -65
  220. data/verify/mapping/handle.rb +0 -24
  221. data/verify/mapping/helpers.rb +0 -7
  222. data/verify/mapping/matches.rb +0 -27
  223. data/verify/mapping/named.rb +0 -29
  224. data/verify/mapping/options.rb +0 -17
  225. data/verify/mapping/path.rb +0 -40
  226. data/verify/mapping/response_proxy.rb +0 -50
  227. data/verify/mapping/threaded.rb +0 -25
  228. data/verify/requests/helpers.rb +0 -16
  229. data/verify/requests/request.rb +0 -73
  230. data/verify/requests/response.rb +0 -59
  231. data/verify/requests/session.rb +0 -54
  232. data/verify/views/helpers.rb +0 -1
  233. data/verify/views/rendering.rb +0 -34
  234. data/verify/views/templates/foo.erb +0 -0
  235. data/verify/views/templates/moo.erb +0 -0
  236. data/verify/views/templates/moo.mab +0 -0
@@ -1,24 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- specification "A developer can register exception handlers" do
5
-
6
- before do
7
- mapping.clear
8
- mapping.handle(Waves::Dispatchers::NotFoundError) do
9
- response.status = 404; response.body = "404 Not Found"
10
- end
11
- mapping.handle(Waves::Dispatchers::NotFoundError) do
12
- response.status = 404; response.body = "Something Different"
13
- end
14
- end
15
-
16
- specify 'The minimal 404 handler in SimpleErrors' do
17
-
18
- r = get('/')
19
- r.status.should == 404
20
- r.body.should == '404 Not Found'
21
- end
22
-
23
-
24
- end
@@ -1,7 +0,0 @@
1
- require File.join(File.dirname(__FILE__) , "..", "helpers")
2
-
3
- # define basic app for use in testing
4
- # before methods may add to it using helper methods
5
- module MappingApp ; include Waves::Foundations::Simple ; end
6
- Waves << MappingApp
7
- Waves::Console.load( :mode => :development )
@@ -1,27 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- specification "A developer can extract parameters from a request path or URL." do
5
-
6
- before do
7
- mapping.clear
8
-
9
- path %r{/param/(\w+)} do |value|
10
- "You asked for: #{value}."
11
- end
12
-
13
- url %r{http://localhost:(\d+)/port} do |port|
14
- port
15
- end
16
-
17
- end
18
-
19
- specify 'Extract a parameter via a regexp match of the path.' do
20
- get('/param/elephant').body.should == 'You asked for: elephant.'
21
- end
22
-
23
- specify 'Extract a parameter via a regexp match of the URL.' do
24
- get('http://localhost:3000/port').body.should == '3000'
25
- end
26
-
27
- end
@@ -1,29 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- specification "A developer can register named mappings" do
5
-
6
- # before do
7
- # mapping.clear
8
- # resource = /([\w\-]+)/
9
- # name = /([\w\-\_\.\+\@]+)/
10
- # path [resource, name],
11
- # :generator => generator(:show) { |resource,name| "/#{resource}/#{name}" } do
12
- # "Works"
13
- # end
14
- # end
15
- #
16
- # specify "accessible via Waves.mapping.named" do
17
- #
18
- # Waves.mapping.named.show("foo", "bar").should == "/foo/bar"
19
- #
20
- # end
21
- #
22
- # specify "accessible via Application.paths" do
23
- #
24
- # Test.paths.show("foo", "bar").should == "/foo/bar"
25
- #
26
- # end
27
-
28
-
29
- end
@@ -1,17 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- specification "A developer can map requests with options." do
5
-
6
- before do
7
- mapping.clear
8
- path('/', :remote_addr => "10.10.10.10" ) { 'This request is from 10.10.10.10' }
9
- path('/', :remote_addr => "127.0.0.1" ) { 'This request is from 127.0.0.1' }
10
- end
11
-
12
- specify 'Map the path of a GET request to a lambda.' do
13
- get('/').body.should == 'This request is from 127.0.0.1'
14
- end
15
-
16
- end
17
-
@@ -1,40 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- specification "A developer can map requests using the request path." do
5
-
6
- before do
7
- mapping.clear
8
- path('/', :method => :post ) { 'This is a simple post rule.' }
9
- path('/', :method => :put ) { 'This is a simple put rule.' }
10
- path('/', :method => :delete ) { 'This is a simple delete rule.' }
11
- path('/', :method => :get) { 'This is a simple get rule.' }
12
- path('/foo') { "The server says, 'bar!'" }
13
- end
14
-
15
- specify 'Map the path of a GET request to a lambda.' do
16
- get('/').body.should == 'This is a simple get rule.'
17
- end
18
-
19
- specify 'Map the path of a POST request to a lambda.' do
20
- post('/').body.should == 'This is a simple post rule.'
21
- end
22
-
23
- specify 'Map the path of a PUT request to a lambda.' do
24
- put('/').body.should == 'This is a simple put rule.'
25
- end
26
-
27
- specify 'Map the path of a DELETE request to a lambda.' do
28
- delete('/').body.should == 'This is a simple delete rule.'
29
- end
30
-
31
- specify 'When method is not explicitely set in a mapping it accepts all methods' do
32
- get( '/foo' ).body.should == "The server says, 'bar!'"
33
- post( '/foo' ).body.should == "The server says, 'bar!'"
34
- put( '/foo' ).body.should == "The server says, 'bar!'"
35
- delete( '/foo' ).body.should == "The server says, 'bar!'"
36
- end
37
-
38
-
39
- end
40
-
@@ -1,50 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- # Note: you have to define the resource classes using module_eval here, because otherwise
5
- # the auto_create code never gets triggered in the application.
6
-
7
- module MappingApp
8
- include Waves::Layers::MVC
9
- end
10
-
11
- MappingApp::Controllers.module_eval do
12
- class Animal
13
- include Waves::Controllers::Mixin
14
- def cow() 'Moo!' end
15
- end
16
- end
17
-
18
- MappingApp::Views.module_eval do
19
- class Animal
20
- include Waves::Views::Mixin
21
- def say( says ) "This animal says: '#{says}'" end
22
- end
23
- end
24
-
25
- specification "A developer may succinctly define a resource-based controller-view chain." do
26
-
27
- before do
28
- mapping.clear
29
- path('/cow' ) do
30
- resource( :animal ) { controller { cow } | view { | says | say( says ) } }
31
- end
32
-
33
- path('/onager') do
34
- resource( "cow" ) do
35
- controller { redirect model_name }.call
36
- end
37
- end
38
- end
39
-
40
- specify 'Pipe output of controller to view within a resource context.' do
41
- get('/cow').body.should == "This animal says: 'Moo!'"
42
- end
43
-
44
- specify "Redirect from within controller" do
45
- get('/onager').status.should == 302
46
- end
47
-
48
-
49
- end
50
-
@@ -1,25 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__), "helpers")
3
-
4
- specification "Requests can be made threaded for event driven servers" do
5
-
6
- before do
7
- mapping.clear
8
- threaded( '/upload', {:method => :post} ) { 'This is threaded.' }
9
- path( '/foo' ) { "The server says, 'bar!'" }
10
- end
11
-
12
- specify 'Post to upload should be threaded' do
13
- req = Waves::Request.new( ::Rack::MockRequest.env_for('/upload', {:method => 'POST'}) )
14
- ::Waves::Dispatchers::Default.new.deferred?(req).should == true
15
- post('/upload').body.should == 'This is threaded.'
16
- end
17
-
18
- specify 'Get to foo should not be threaded' do
19
- req = Waves::Request.new( ::Rack::MockRequest.env_for('/foo', {:method => 'GET'}) )
20
- ::Waves::Dispatchers::Default.new.deferred?(req).should == false
21
- get('/foo').body.should == "The server says, 'bar!'"
22
- end
23
-
24
- end
25
-
@@ -1,16 +0,0 @@
1
- require File.join(File.dirname(__FILE__) , "..", "helpers")
2
-
3
- module TestRequests
4
- module Configurations
5
- class Default
6
- # stub!(:session).and_return(:duration => 30.minutes, :path => '/tmp/sessions')
7
- ::BasePath = File.dirname(__FILE__) / :tmp
8
- stub!(:session).and_return(:duration => 30.minutes, :path => ::BasePath)
9
- end
10
- end
11
-
12
- end
13
-
14
- def env_for(uri="/", options={})
15
- Rack::MockRequest.env_for(uri,options)
16
- end
@@ -1,73 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__) , "helpers")
3
-
4
- describe "A Waves request instance" do
5
-
6
- before do
7
- Waves::Session.stub!(:base_path).and_return(BasePath)
8
- @request = Waves::Request.new(env_for)
9
- end
10
-
11
- it "has session, response, and blackboard objects" do
12
- @request.session.class.should == Waves::Session
13
- @request.response.class.should == Waves::Response
14
- @request.blackboard.class.should == Waves::Blackboard
15
- end
16
-
17
- it "provides an accessor to the Rack request" do
18
- @request.rack_request.class.should == Rack::Request
19
- end
20
-
21
- it "wraps some useful Rack data in more elegant methods" do
22
- @request.rack_request.should.receive(:path_info)
23
- @request.path
24
-
25
- @request.rack_request.should.receive(:host)
26
- @request.domain
27
-
28
- @request.rack_request.env.should.receive(:[]).with('CONTENT_TYPE')
29
- @request.content_type
30
- end
31
-
32
- it "delegates unknown methods to the Rack request" do
33
- @request.rack_request.should.receive(:chitty_bang_bang)
34
- @request.chitty_bang_bang
35
- end
36
-
37
- end
38
-
39
- describe "The HTTP request method" do
40
-
41
- before do
42
- Waves::Session.stub!(:base_path).and_return(BasePath)
43
- end
44
-
45
- it "is determined in a straightforward manner for straightforward requests" do
46
- @get = Waves::Request.new(env_for("/", :method => 'GET'))
47
- @post = Waves::Request.new(env_for("/", :method => 'POST'))
48
- @put = Waves::Request.new(env_for("/", :method => 'PUT'))
49
- @delete = Waves::Request.new(env_for("/", :method => 'DELETE'))
50
-
51
- @get.method.should == :get
52
- @post.method.should == :post
53
- @put.method.should == :put
54
- @delete.method.should == :delete
55
- end
56
-
57
- it "can be set with the '_method' query param on a POST" do
58
- @url_put = Waves::Request.new(env_for("/?_method=put", :method => 'POST'))
59
- @url_delete = Waves::Request.new(env_for("/?_method=delete", :method => 'POST'))
60
-
61
- @url_put.method.should == :put; @url_put.put?.should.be.true
62
- @url_delete.method.should == :delete; @url_delete.delete?.should.be.true
63
- end
64
-
65
- it "can be set with the '_method' body param on a POST" do
66
- @body_put = Waves::Request.new(env_for("/", :method => 'POST', :input => '_method=put'))
67
- @body_delete = Waves::Request.new(env_for("/", :method => 'POST', :input => '_method=delete'))
68
-
69
- @body_put.method.should == :put; @body_put.put?.should.be.true
70
- @body_delete.method.should == :delete
71
- end
72
-
73
- end
@@ -1,59 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__) , "helpers")
3
-
4
- describe "An instance of Waves::Response" do
5
-
6
- before do
7
- Waves::Session.stub!(:base_path).and_return(BasePath)
8
- @request = Waves::Request.new(env_for)
9
- @response = Waves::Response.new(@request)
10
- end
11
-
12
- it "has a Rack::Response" do
13
- @response.rack_response.class.should == Rack::Response
14
- end
15
-
16
- it "has a Waves::Request" do
17
- @response.request.class.should == Waves::Request
18
- end
19
-
20
- it "can access the session for the current request" do
21
- @response.session.class.should == Waves::Session
22
- end
23
-
24
- it "provides setter methods for commonly used headers" do
25
- @response.rack_response.should.receive(:[]=).with('Content-Type', 'text/javascript')
26
- @response.content_type = 'text/javascript'
27
-
28
- @response.rack_response.should.receive(:[]=).with('Content-Length', '42')
29
- @response.content_length = '42'
30
-
31
- @response.rack_response.should.receive(:[]=).with('Location', '/here/')
32
- @response.location = '/here/'
33
-
34
- @response.rack_response.should.receive(:[]=).with('Expires', 'Thu, 09 Aug 2007 05:22:55 GMT')
35
- @response.expires = 'Thu, 09 Aug 2007 05:22:55 GMT'
36
- end
37
-
38
- it "delegates unknown methods to the Rack response" do
39
- @response.rack_response.should.receive(:mclintock!)
40
- @response.mclintock!
41
- end
42
-
43
- end
44
-
45
- describe "Waves::Response#finish" do
46
-
47
- before do
48
- Waves::Session.stub!(:base_path).and_return(BasePath)
49
- @request = Waves::Request.new(env_for)
50
- @response = Waves::Response.new(@request)
51
- end
52
-
53
- it "saves the request session and calls Rack::Response#finish" do
54
- @response.session.should.receive(:save)
55
- @response.rack_response.should.receive(:finish)
56
- @response.finish
57
- end
58
-
59
- end
@@ -1,54 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__) , "helpers")
3
-
4
- SessionData = "--- \nmoo: cow\n"
5
-
6
-
7
-
8
- describe "An new instance of Waves::Session" do
9
-
10
-
11
- before do
12
- FileUtils.mkdir(BasePath) unless File.exist?(BasePath)
13
- Waves::Session.stub!(:generate_session_id).and_return("fake_session")
14
- Waves::Session.stub!(:base_path).and_return(BasePath)
15
- end
16
-
17
- after do
18
- FileUtils.rm Dir["#{BasePath}/fake_session"]
19
- FileUtils.rmdir BasePath
20
- end
21
-
22
- it "loads data from a session file if one exists" do
23
- File.write(BasePath / :fake_session, SessionData)
24
- @request = Waves::Request.new(env_for)
25
- session = @request.session
26
- session.to_hash.should == { 'moo' => 'cow'}
27
- end
28
-
29
- it "is empty when no session file exists" do
30
- Waves::Session.stub!(:generate_session_id).and_return("other_session")
31
- @request = Waves::Request.new(env_for)
32
- session = @request.session
33
- session.to_hash.should.be.empty
34
- end
35
-
36
- end
37
-
38
- describe "Session values" do
39
-
40
- before do
41
- Waves::Session.stub!(:base_path).and_return(BasePath)
42
- @request = Waves::Request.new(env_for)
43
- end
44
-
45
- it "can be read and written using [] and []=" do
46
- session = Waves::Session.new(@request)
47
- session['moo'].should.be.nil
48
- session['moo'] = 'bull'
49
- session['moo'].should == 'bull'
50
- end
51
-
52
- end
53
-
54
-
@@ -1 +0,0 @@
1
- require File.join(File.dirname(__FILE__) , "..", "helpers")
@@ -1,34 +0,0 @@
1
- # require 'test_helper' because RubyMate needs help
2
- require File.join(File.dirname(__FILE__) , "helpers")
3
-
4
- Dir.chdir(File.dirname(__FILE__)) do
5
- class TestView
6
- include Waves::Views::Mixin
7
- end
8
-
9
- describe "Waves::Views" do
10
-
11
- it "provides a list of Renderers" do
12
- Waves::Views.renderers.should.respond_to :[]
13
- end
14
-
15
- it "defines an error for missing templates" do
16
- defined?(Waves::Views::NoTemplateError).should.not.be.nil
17
- end
18
-
19
- end
20
-
21
- describe "A class which has included Waves::Views::Mixin" do
22
-
23
- before do
24
- @view = TestView.new(mock(:request))
25
- end
26
-
27
- it "uses the first renderer for which it can find a template file with the associated extension" do
28
- @view.renderer("foo").should == Waves::Renderers::Erubis
29
- @view.renderer("moo").should == Waves::Renderers::Erubis
30
- @view.renderer("bleat").should == nil
31
- end
32
-
33
- end
34
- end