waves 0.8.2 → 0.9.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.
Files changed (166) hide show
  1. data/bin/waves +4 -3
  2. data/doc/VERSION +1 -1
  3. data/lib/waves.rb +52 -40
  4. data/lib/{caches → waves/caches}/file.rb +3 -1
  5. data/lib/waves/caches/memcached.rb +56 -0
  6. data/lib/{caches → waves/caches}/simple.rb +6 -7
  7. data/lib/{caches → waves/caches}/synchronized.rb +15 -1
  8. data/lib/{commands → waves/commands}/console.rb +4 -4
  9. data/lib/{commands → waves/commands}/generate.rb +6 -5
  10. data/lib/{commands → waves/commands}/help.rb +0 -0
  11. data/lib/{commands → waves/commands}/server.rb +1 -1
  12. data/lib/{dispatchers → waves/dispatchers}/base.rb +17 -31
  13. data/lib/waves/dispatchers/default.rb +19 -0
  14. data/lib/{ext → waves/ext}/float.rb +0 -0
  15. data/lib/{ext → waves/ext}/hash.rb +0 -0
  16. data/lib/{ext → waves/ext}/integer.rb +16 -1
  17. data/lib/{ext → waves/ext}/kernel.rb +3 -7
  18. data/lib/{ext → waves/ext}/module.rb +3 -3
  19. data/lib/{ext → waves/ext}/object.rb +2 -0
  20. data/lib/waves/ext/string.rb +73 -0
  21. data/lib/{ext → waves/ext}/symbol.rb +0 -1
  22. data/lib/{ext → waves/ext}/tempfile.rb +0 -0
  23. data/lib/waves/ext/time.rb +5 -0
  24. data/lib/{foundations → waves/foundations}/classic.rb +9 -21
  25. data/lib/{foundations → waves/foundations}/compact.rb +15 -20
  26. data/lib/waves/foundations/rest.rb +311 -0
  27. data/lib/waves/helpers/basic.rb +13 -0
  28. data/lib/{helpers → waves/helpers}/doc_type.rb +3 -0
  29. data/lib/waves/helpers/form.rb +94 -0
  30. data/lib/waves/helpers/formatting.rb +14 -0
  31. data/lib/waves/layers/mvc.rb +65 -0
  32. data/lib/{layers → waves/layers}/mvc/controllers.rb +0 -0
  33. data/lib/{layers → waves/layers}/mvc/extensions.rb +23 -11
  34. data/lib/{layers → waves/layers}/orm/migration.rb +0 -0
  35. data/lib/{layers → waves/layers}/orm/providers/active_record.rb +2 -5
  36. data/lib/{layers → waves/layers}/orm/providers/active_record/migrations/empty.rb.erb +0 -0
  37. data/lib/{layers → waves/layers}/orm/providers/active_record/tasks/generate.rb +1 -1
  38. data/lib/{layers → waves/layers}/orm/providers/active_record/tasks/schema.rb +1 -1
  39. data/lib/{layers → waves/layers}/orm/providers/data_mapper.rb +0 -0
  40. data/lib/{layers → waves/layers}/orm/providers/filebase.rb +0 -0
  41. data/lib/{layers → waves/layers}/orm/providers/sequel.rb +28 -29
  42. data/lib/{layers → waves/layers}/orm/providers/sequel/migrations/empty.rb.erb +0 -0
  43. data/lib/{layers → waves/layers}/orm/providers/sequel/tasks/generate.rb +1 -1
  44. data/lib/{layers → waves/layers}/orm/providers/sequel/tasks/schema.rb +2 -0
  45. data/lib/waves/layers/rack/rack_cache.rb +32 -0
  46. data/lib/waves/layers/renderers/erubis.rb +52 -0
  47. data/lib/waves/layers/renderers/haml.rb +67 -0
  48. data/lib/waves/layers/renderers/markaby.rb +41 -0
  49. data/lib/waves/layers/text/inflect/english.rb +42 -0
  50. data/lib/waves/matchers/accept.rb +47 -0
  51. data/lib/waves/matchers/ext.rb +27 -0
  52. data/lib/waves/matchers/path.rb +72 -0
  53. data/lib/waves/matchers/query.rb +43 -0
  54. data/lib/waves/matchers/request.rb +86 -0
  55. data/lib/waves/matchers/requested.rb +31 -0
  56. data/lib/{matchers → waves/matchers}/resource.rb +8 -1
  57. data/lib/waves/matchers/traits.rb +30 -0
  58. data/lib/waves/matchers/uri.rb +69 -0
  59. data/lib/waves/media/mime_types.rb +542 -0
  60. data/lib/waves/renderers/mixin.rb +9 -0
  61. data/lib/waves/request/accept.rb +92 -0
  62. data/lib/{runtime → waves/request}/request.rb +77 -61
  63. data/lib/waves/resources/file_mixin.rb +11 -0
  64. data/lib/{resources → waves/resources}/mixin.rb +42 -44
  65. data/lib/waves/resources/paths.rb +132 -0
  66. data/lib/waves/response/client_errors.rb +10 -0
  67. data/lib/waves/response/packaged.rb +19 -0
  68. data/lib/waves/response/redirects.rb +35 -0
  69. data/lib/{runtime → waves/response}/response.rb +29 -11
  70. data/lib/{runtime → waves/response}/response_mixin.rb +30 -17
  71. data/lib/waves/runtime/applications.rb +18 -0
  72. data/lib/{runtime → waves/runtime}/configuration.rb +31 -25
  73. data/lib/waves/runtime/console.rb +24 -0
  74. data/lib/{runtime → waves/runtime}/logger.rb +3 -3
  75. data/lib/{runtime → waves/runtime}/mocks.rb +2 -2
  76. data/lib/waves/runtime/rackup.rb +37 -0
  77. data/lib/waves/runtime/runtime.rb +48 -0
  78. data/lib/waves/runtime/server.rb +33 -0
  79. data/lib/{servers → waves/servers}/base.rb +0 -0
  80. data/lib/{servers → waves/servers}/mongrel.rb +0 -0
  81. data/lib/{servers → waves/servers}/webrick.rb +0 -0
  82. data/lib/{tasks → waves/tasks}/gem.rb +0 -0
  83. data/lib/{tasks → waves/tasks}/generate.rb +0 -0
  84. data/lib/waves/views/cassy.rb +173 -0
  85. data/lib/{views → waves/views}/errors.rb +8 -7
  86. data/lib/waves/views/mixin.rb +23 -0
  87. data/lib/waves/views/templated.rb +40 -0
  88. data/samples/basic/basic_startup.rb +70 -0
  89. data/samples/basic/config.ru +9 -0
  90. data/samples/blog/configurations/development.rb +17 -16
  91. data/samples/blog/configurations/production.rb +0 -11
  92. data/samples/blog/resources/entry.rb +3 -3
  93. data/samples/blog/resources/map.rb +10 -3
  94. data/samples/blog/startup.rb +4 -3
  95. data/templates/classic/Rakefile +28 -29
  96. data/templates/classic/configurations/default.rb.erb +8 -3
  97. data/templates/classic/configurations/development.rb.erb +1 -20
  98. data/templates/classic/configurations/production.rb.erb +2 -16
  99. data/templates/classic/public/images/favicon.ico +0 -0
  100. data/templates/classic/resources/server.rb.erb +9 -0
  101. data/templates/classic/startup.rb.erb +3 -3
  102. data/templates/classic/views/css.rb.erb +14 -0
  103. data/templates/classic/views/default.rb.erb +17 -0
  104. data/templates/classic/views/errors.rb.erb +10 -0
  105. data/templates/classic/views/pages.rb.erb +14 -0
  106. data/templates/compact/startup.rb.erb +8 -3
  107. data/test/ext/object.rb +55 -0
  108. data/test/ext/shortcuts.rb +73 -0
  109. data/test/helpers.rb +17 -0
  110. data/test/match/accept.rb +78 -0
  111. data/test/match/ext.rb +156 -0
  112. data/test/match/methods.rb +22 -0
  113. data/test/match/params.rb +33 -0
  114. data/test/match/path.rb +106 -0
  115. data/test/match/query.rb +60 -0
  116. data/test/match/request.rb +91 -0
  117. data/test/match/requested.rb +149 -0
  118. data/test/match/uri.rb +136 -0
  119. data/test/process/request.rb +75 -0
  120. data/test/process/resource.rb +53 -0
  121. data/test/resources/path.rb +166 -0
  122. data/test/runtime/configurations.rb +19 -0
  123. data/test/runtime/request.rb +63 -0
  124. data/test/runtime/response.rb +85 -0
  125. data/test/views/views.rb +40 -0
  126. metadata +243 -157
  127. data/lib/caches/memcached.rb +0 -40
  128. data/lib/dispatchers/default.rb +0 -25
  129. data/lib/ext/string.rb +0 -20
  130. data/lib/helpers/basic.rb +0 -11
  131. data/lib/helpers/extended.rb +0 -21
  132. data/lib/helpers/form.rb +0 -42
  133. data/lib/helpers/formatting.rb +0 -30
  134. data/lib/helpers/layouts.rb +0 -37
  135. data/lib/helpers/model.rb +0 -37
  136. data/lib/helpers/view.rb +0 -22
  137. data/lib/layers/inflect/english.rb +0 -67
  138. data/lib/layers/mvc.rb +0 -54
  139. data/lib/layers/renderers/erubis.rb +0 -60
  140. data/lib/layers/renderers/haml.rb +0 -47
  141. data/lib/layers/renderers/markaby.rb +0 -29
  142. data/lib/matchers/accept.rb +0 -21
  143. data/lib/matchers/base.rb +0 -30
  144. data/lib/matchers/content_type.rb +0 -17
  145. data/lib/matchers/path.rb +0 -67
  146. data/lib/matchers/query.rb +0 -21
  147. data/lib/matchers/request.rb +0 -27
  148. data/lib/matchers/traits.rb +0 -19
  149. data/lib/matchers/uri.rb +0 -20
  150. data/lib/renderers/mixin.rb +0 -36
  151. data/lib/resources/paths.rb +0 -34
  152. data/lib/runtime/console.rb +0 -23
  153. data/lib/runtime/mime_types.rb +0 -536
  154. data/lib/runtime/monitor.rb +0 -32
  155. data/lib/runtime/runtime.rb +0 -67
  156. data/lib/runtime/server.rb +0 -20
  157. data/lib/runtime/session.rb +0 -27
  158. data/lib/runtime/worker.rb +0 -86
  159. data/lib/views/mixin.rb +0 -62
  160. data/samples/blog/blog.db +0 -0
  161. data/samples/blog/log/waves.production +0 -3
  162. data/templates/classic/resources/map.rb.erb +0 -8
  163. data/templates/classic/templates/errors/not_found_404.mab +0 -7
  164. data/templates/classic/templates/errors/server_error_500.mab +0 -7
  165. data/templates/classic/templates/layouts/default.mab +0 -14
  166. data/templates/classic/tmp/sessions/.gitignore +0 -0
@@ -0,0 +1,53 @@
1
+ require 'test/helpers.rb'
2
+ require 'waves/foundations/compact'
3
+
4
+ describe "Application Context" do
5
+ before do
6
+ Test = Module.new { include Waves::Foundations::Compact }
7
+ Waves << Test
8
+ end
9
+
10
+ after do
11
+ Waves.applications.clear
12
+ Object.instance_eval { remove_const( :Test ) if const_defined?( :Test ) }
13
+ end
14
+
15
+ feature "Provide acccess to request, response, and session objects" do
16
+ Test::Resources::Map.new( Waves::Request.new( env('/', :method => 'GET' ) ) ).
17
+ instance_eval do
18
+ { :request => Waves::Request, :response => Waves::Response,
19
+ :session => Waves::Session, :query => Waves::Request::Query }.
20
+ each { |k,v| send( k ).class.should == v }
21
+ end
22
+ end
23
+
24
+ feature "Shortcuts to the path, url, domain, and session" do
25
+ Test::Resources::Map.new( Waves::Request.new(
26
+ env('http://localhost/foo/bar.js', :method => 'GET' ) ) ).
27
+ instance_eval do
28
+ { :url => request.url, :path => request.path,
29
+ :domain => request.domain, :session => request.session }.
30
+ each { |k,v| send( k ).should == v }
31
+ end
32
+ end
33
+
34
+ feature "Access to path and associated helpers" do
35
+ Test::Resources::Map.new( Waves::Request.new(
36
+ env('http://localhost/foo/bar.js', :method => 'GET' ) ) ).
37
+ instance_eval do
38
+ { :url => 'http://localhost/foo/bar.js', :path => '/foo/bar.js',
39
+ :basename => '/foo/bar', :extension => 'js' }.
40
+ each { |k,v| send( k ).should == v }
41
+ end
42
+ end
43
+
44
+ feature "Access to the application object and name" do
45
+ Test::Resources::Map.new( Waves::Request.new(
46
+ env('http://localhost/foo/bar.js', :method => 'GET' ) ) ).
47
+ instance_eval do
48
+ { :app => Test, :app_name => :test }.
49
+ each { |k,v| send( k ).should == v }
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,166 @@
1
+ require "#{File.dirname(__FILE__)}/../helpers.rb"
2
+ require "waves/foundations/compact"
3
+
4
+ describe "A path generation method" do
5
+
6
+ before do
7
+ Test = Module.new { include Waves::Foundations::Compact }
8
+ @resource_class = Test::Resources::Map
9
+ @paths = @resource_class.new( Waves::Request.new( env( '/', :method => 'GET' ) ) ).paths
10
+ end
11
+
12
+ after do
13
+ Waves.applications.clear
14
+ Object.instance_eval { remove_const(:Test) if const_defined?(:Test) }
15
+ end
16
+
17
+ it "turns an empty template into '/'" do
18
+ @resource_class.on(:get, :list => [] ) { nil }
19
+ @paths.list.should == "/"
20
+ @paths.list("foo").should == "/"
21
+ end
22
+
23
+ it "reproduces strings from the path template" do
24
+ @resource_class.on(:get, :list => [ 'taller', 'ghost', 'walt' ] ) { nil }
25
+ @paths.list.should == "/taller/ghost/walt"
26
+ end
27
+
28
+ it "treats symbols as locations for arg interpolation" do
29
+ @resource_class.on(:get, :show => [ 'hi', 'there', :nickname ]) { nil }
30
+ @paths.show( 'freckles' ).should == "/hi/there/freckles"
31
+ end
32
+
33
+
34
+ it "treats a hash with string or symbol value as location for arg interpolations" do
35
+ @resource_class.on(:get, :edit => [ 'form', { :filter => 'textile' } ] ) { nil }
36
+ @paths.edit( 'markdown' ).should == "/form/markdown"
37
+ @paths.edit( 'markdown' ).should == "/form/markdown"
38
+ end
39
+
40
+ it "interpolates for a hash-with-regex only when the arg matches the regex" do
41
+ @resource_class.on(:get, :edit => [ 'form', { :filter => /^(textile|markdown|plain)$/ } ] ) { nil }
42
+ @paths.edit( 'markdown' ).should == "/form/markdown"
43
+
44
+ lambda { @paths.edit( 'html' ) }.should.raise ArgumentError
45
+ end
46
+
47
+ it "appends all arguments to the path when it encounters a true" do
48
+ @resource_class.on(:get, :count_1 => [ 'first', true ]) { nil }
49
+ @paths.count_1("second", "third", "fourth").should == "/first/second/third/fourth"
50
+
51
+ @resource_class.on(:get, :count_2 => [ 'first', { :whatever => true } ]) { nil }
52
+ @paths.count_2("second", "third", "fourth").should == "/first/second/third/fourth"
53
+ end
54
+
55
+ it "uses hash element value as default in absence of argument" do
56
+ @resource_class.on(:get, :edit => [ 'form', { :filter => 'textile' } ] ) { nil }
57
+ @paths.edit.should == "/form/textile"
58
+ end
59
+
60
+ it "uses regexes for argument interpolation if the arg matches" do
61
+ @resource_class.on(:get, :list => [ "episode", /\d+/ ] ) { nil }
62
+ @paths.list( 815 ).should == "/episode/815"
63
+
64
+ lambda { path = @paths.list( "boar" ) }.should.raise ArgumentError
65
+ end
66
+
67
+ describe "given an (implicit) array of args" do
68
+
69
+ it "interpolates its arguments in order" do
70
+ @resource_class.on(:get, :list => [ :one, :two, :three ] ) { nil }
71
+ @paths.list( 'one', 'two', 'three').should == '/one/two/three'
72
+ end
73
+
74
+ it "raises an ArgumentError if given more args than interpolables" do
75
+ @resource_class.on(:get, :list => [ :one ] ) { nil }
76
+ lambda { @paths.list( "x", "y") }.should.raise ArgumentError
77
+ end
78
+
79
+ end
80
+
81
+ describe "given an argument hash" do
82
+
83
+ it "interpolates arg pairs that match symbols in the template" do
84
+ @resource_class.on(:get, :list => [ :one, :two, :three ] ) { nil }
85
+ @paths.list( :three => 'three', :one => 'one', :two => 'two').should == '/one/two/three'
86
+ end
87
+
88
+ it "interpolates arg pairs that match the keys of hashes in the template" do
89
+ @resource_class.on(:get, :show => [ {:foo => 'bar'} ] ) { nil }
90
+ @paths.show( :foo => 'bear' ).should == "/bear"
91
+ end
92
+
93
+ it "interpolates an arg pair for a hash-with-regex only when the arg matches the regex" do
94
+ @resource_class.on(:get, :show => [ {:foo => /^ba(r|z|t)$/ } ] ) { nil }
95
+ @paths.show( :foo => 'baz' ).should == "/baz"
96
+ end
97
+
98
+ it "uses hash element value as default in absence of an arg pair" do
99
+ @resource_class.on(:get, :list => [ :one, { :two => 'two' }, :three ] ) { nil }
100
+ @paths.list( :three => 'three', :one => 'one').should == "/one/two/three"
101
+ end
102
+
103
+ it "raises when not all necessary interpolations can be performed" do
104
+ @resource_class.on(:get, :list => [ :one, :two, :three ] ) { nil }
105
+ lambda { @paths.list( :three => 'three', :one => 'one') }.should.raise ArgumentError
106
+ end
107
+
108
+ it "raises an ArgumentError if the template contains a regex" do
109
+ @resource_class.on(:get, :list => [ /anything/ ] ) { nil }
110
+ lambda { @paths.list( :one => 'one' ) }.should.raise ArgumentError
111
+ end
112
+
113
+ it "appends value/s of arg pair matching a template hash-with-true" do
114
+ @resource_class.on(:get, :list => [ :kind, { :parts => true } ]) { nil }
115
+ lambda { @paths.list( :kind => 'ghost') }.should.raise ArgumentError
116
+ @paths.list( :kind => 'ghost', :parts => "walt" ).should == "/ghost/walt"
117
+ @paths.list( :kind => 'ghost', :parts => ["walt", "boone"]).should == "/ghost/walt/boone"
118
+ end
119
+
120
+ it "raises an ArgumentError if the template contains a true" do
121
+ @resource_class.on(:get, :list => [ :kind, true ]) { nil }
122
+ lambda { @paths.list( :kind => 'whuh?' ) }.should.raise ArgumentError
123
+
124
+ end
125
+
126
+ end
127
+
128
+ describe "A path template" do
129
+
130
+ it "is compilable when it contains Strings, Symbols, and Hashes with Strings or Symbols" do
131
+ @resource_class.on(:get, :one => [ 'taller', 'ghost', 'walt' ] ) { nil }
132
+ @paths.one
133
+
134
+ @resource_class.on(:get, :two => [ 'hi', 'there', :nickname ]) { nil }
135
+ @paths.two( 'freckles' )
136
+
137
+ @resource_class.on(:get, :three => [ 'form', { :filter => 'textile' } ] ) { nil }
138
+ @paths.three( 'markdown' )
139
+
140
+ @resource_class.on(:get, :four => [ 'other_form', { :filter => :textile } ] ) { nil }
141
+ @paths.four( 'markdown' )
142
+
143
+ @paths.compiled_paths.values.sort.should == ["/taller/ghost/walt", "/hi/there/%s", "/form/%s", "/other_form/%s"].sort
144
+ end
145
+
146
+ it "is not compilable if it contains Regexps, true, or Hashes with Regexp or true" do
147
+ @resource_class.on(:get, :one => [ "episode", /\d+/ ] ) { nil }
148
+ @paths.one( 815 )
149
+
150
+ @resource_class.on(:get, :two => [ true ])
151
+ @paths.two( "foo" )
152
+
153
+ @resource_class.on(:get, :three => [ {:foo => /^ba(r|z|t)$/ } ] ) { nil }
154
+ @paths.three( :foo => 'baz' )
155
+
156
+ @resource_class.on(:get, :four => [ 'first', { :whatever => true } ]) { nil }
157
+ @paths.four
158
+
159
+ @paths.compiled_paths.values.should == []
160
+ end
161
+
162
+ end
163
+
164
+
165
+
166
+ end
@@ -0,0 +1,19 @@
1
+ require "#{File.dirname(__FILE__)}/../helpers.rb"
2
+
3
+ describe "Configuration attributes" do
4
+
5
+ class Basic < Waves::Configurations::Base; end
6
+
7
+ it "can be declared by developers" do
8
+ Basic.attribute :smurf
9
+ Basic.smurf("smurfy")
10
+ Basic.smurf.should == "smurfy"
11
+ end
12
+
13
+
14
+ it "must be declared before use" do
15
+ Basic.should.not.respond_to :gnome
16
+ end
17
+
18
+ end
19
+
@@ -0,0 +1,63 @@
1
+ require "#{File.dirname(__FILE__)}/../helpers.rb"
2
+
3
+ describe "A Waves request instance" do
4
+
5
+ before do
6
+ @request = Waves::Request.new(env( '/', :method => 'GET' ))
7
+ end
8
+
9
+ it "has session, response, and blackboard objects" do
10
+ @request.session.class.should == Waves::Session
11
+ @request.response.class.should == Waves::Response
12
+ end
13
+
14
+ it "provides an accessor to the Rack request" do
15
+ @request.rack_request.class.should == Rack::Request
16
+ end
17
+
18
+ it "wraps some useful Rack data in more elegant methods" do
19
+ @request.path.should == "/"
20
+
21
+ @request.domain.should == "example.org"
22
+
23
+ # @request.content_type.should == "text/html"
24
+ end
25
+
26
+ # it "delegates unknown methods to the Rack request" do
27
+ # @request.chitty_bang_bang
28
+ # end
29
+
30
+ end
31
+
32
+ describe "The HTTP request method" do
33
+
34
+
35
+ it "is determined in a straightforward manner for straightforward requests" do
36
+ @get = Waves::Request.new(env("/", :method => 'GET'))
37
+ @post = Waves::Request.new(env("/", :method => 'POST'))
38
+ @put = Waves::Request.new(env("/", :method => 'PUT'))
39
+ @delete = Waves::Request.new(env("/", :method => 'DELETE'))
40
+
41
+ @get.method.should == :get
42
+ @post.method.should == :post
43
+ @put.method.should == :put
44
+ @delete.method.should == :delete
45
+ end
46
+
47
+ it "can be set with the '_method' query param on a POST" do
48
+ @url_put = Waves::Request.new(env("/?_method=put", :method => 'POST'))
49
+ @url_delete = Waves::Request.new(env("/?_method=delete", :method => 'POST'))
50
+
51
+ @url_put.method.should == :put; @url_put.put.should.be.true
52
+ @url_delete.method.should == :delete; @url_delete.delete.should.be.true
53
+ end
54
+
55
+ it "can be set with the '_method' body param on a POST" do
56
+ @body_put = Waves::Request.new(env("/", :method => 'POST', :input => '_method=put'))
57
+ @body_delete = Waves::Request.new(env("/", :method => 'POST', :input => '_method=delete'))
58
+
59
+ @body_put.method.should == :put; @body_put.put.should.be.true
60
+ @body_delete.method.should == :delete
61
+ end
62
+
63
+ end
@@ -0,0 +1,85 @@
1
+ require "#{File.dirname(__FILE__)}/../helpers.rb"
2
+
3
+ describe "An instance of Waves::Response" do
4
+
5
+ before do
6
+ @request = Waves::Request.new(env( '/', :method => 'GET' ))
7
+ @response = Waves::Response.new(@request)
8
+ end
9
+
10
+ it "has a Rack::Response" do
11
+ @response.rack_response.class.should == Rack::Response
12
+ end
13
+
14
+ it "has a Waves::Request" do
15
+ @response.request.class.should == Waves::Request
16
+ end
17
+
18
+ it "can access the session for the current request" do
19
+ @response.session.class.should == Waves::Session
20
+ end
21
+
22
+ it "provides setter methods for commonly used headers" do
23
+ @response.rack_response.should.receive(:[]=).with('Content-Type', 'text/javascript')
24
+ @response.content_type = 'text/javascript'
25
+
26
+ @response.rack_response.should.receive(:[]=).with('Content-Length', '42')
27
+ @response.content_length = '42'
28
+
29
+ @response.rack_response.should.receive(:[]=).with('Location', '/here/')
30
+ @response.location = '/here/'
31
+
32
+ @response.rack_response.should.receive(:[]=).with('Expires', 'Thu, 09 Aug 2007 05:22:55 GMT')
33
+ @response.expires = 'Thu, 09 Aug 2007 05:22:55 GMT'
34
+ end
35
+
36
+ it "delegates unknown methods to the Rack response" do
37
+ @response.rack_response.should.receive(:mclintock!)
38
+ @response.mclintock!
39
+ end
40
+
41
+ end
42
+ require 'waves/foundations/compact'
43
+ describe "Response Content-Type header " do
44
+ before do
45
+ Test = Module.new { include Waves::Foundations::Compact }
46
+ Waves << Test
47
+ end
48
+
49
+ after do
50
+ Waves.applications.clear
51
+ Object.instance_eval { remove_const(:Test) if const_defined?(:Test) }
52
+ end
53
+
54
+ it "Should set the default content type to text/html" do
55
+ Test::Resources::Map.on(:get, ["foo"]) { }
56
+
57
+ resp = get "/foo"
58
+ resp.status.should == 200
59
+ resp.content_type.should == 'text/html'
60
+
61
+ end
62
+
63
+ it "Should return content type of ext when its set." do
64
+ Test::Resources::Map.on(:get, ["foo"], :ext => [:js], :accept => "text/html") { }
65
+
66
+ resp = get "/foo.js", "HTTP_ACCEPT" => "text/html"
67
+ resp.status.should == 200
68
+ resp.content_type.should == 'text/javascript'
69
+ end
70
+
71
+ end
72
+
73
+ describe "Waves::Response#finish" do
74
+
75
+ before do
76
+ @request = Waves::Request.new(env( '/', :method => 'GET' ))
77
+ @response = Waves::Response.new(@request)
78
+ end
79
+
80
+ it "saves the request session and calls Rack::Response#finish" do
81
+ @response.rack_response.should.receive(:finish)
82
+ @response.finish
83
+ end
84
+
85
+ end
@@ -0,0 +1,40 @@
1
+ require "#{here = File.dirname(__FILE__)}/../helpers.rb"
2
+ require 'waves/foundations/classic'
3
+ require 'waves/layers/renderers/erubis'
4
+ require 'waves/layers/renderers/markaby'
5
+ require 'waves/views/templated'
6
+ require 'fileutils'
7
+
8
+
9
+ describe "A class which has included Waves::Views::Templated" do
10
+
11
+
12
+ before do
13
+ Test = Module.new {
14
+ include Waves::Foundations::Classic
15
+ }
16
+ Test::Views::Default.class_eval {
17
+ include Waves::Views::Templated
18
+ }
19
+ Dir.chdir(here) do
20
+ FileUtils.rm_rf "templates" if File.exist? "templates"
21
+ FileUtils.mkdir_p "templates/test"
22
+ File.write "templates/test/smurf.mab", "span 'Smurf'"
23
+ end
24
+ @view = Test::Views::Test.new( Waves::Request.new(env( '/', :method => 'GET' ) ))
25
+ end
26
+
27
+ after do
28
+ Waves.applications.clear
29
+ Object.instance_eval { remove_const(:Test) if const_defined?(:Test) }
30
+ end
31
+
32
+ it "works" do
33
+ Dir.chdir(here) do
34
+ @view.render("smurf").should == "<span>Smurf</span>\n"
35
+ @view.smurf.should == "<span>Smurf</span>\n"
36
+ end
37
+ end
38
+
39
+ end
40
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: waves
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Yoder
@@ -9,38 +9,48 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-07 00:00:00 -08:00
12
+ date: 2009-11-21 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: rakegen
16
+ name: extensions
17
17
  type: :runtime
18
18
  version_requirement:
19
19
  version_requirements: !ruby/object:Gem::Requirement
20
20
  requirements:
21
- - - ~>
21
+ - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: "0.6"
23
+ version: 0.6.0
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
- name: choice
26
+ name: functor
27
27
  type: :runtime
28
28
  version_requirement:
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "="
32
32
  - !ruby/object:Gem::Version
33
- version: "0.1"
33
+ version: 0.6.0
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
- name: autocode
36
+ name: mongrel
37
37
  type: :runtime
38
38
  version_requirement:
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ">="
41
+ - - "="
42
42
  - !ruby/object:Gem::Version
43
- version: 1.0.0
43
+ version: 1.1.5
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: markaby
47
+ type: :runtime
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "="
52
+ - !ruby/object:Gem::Version
53
+ version: "0.5"
44
54
  version:
45
55
  - !ruby/object:Gem::Dependency
46
56
  name: rack-cache
@@ -52,6 +62,26 @@ dependencies:
52
62
  - !ruby/object:Gem::Version
53
63
  version: "0.2"
54
64
  version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: choice
67
+ type: :runtime
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "="
72
+ - !ruby/object:Gem::Version
73
+ version: 0.1.3
74
+ version:
75
+ - !ruby/object:Gem::Dependency
76
+ name: english
77
+ type: :runtime
78
+ version_requirement:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "="
82
+ - !ruby/object:Gem::Version
83
+ version: 0.3.1
84
+ version:
55
85
  - !ruby/object:Gem::Dependency
56
86
  name: rack
57
87
  type: :runtime
@@ -60,7 +90,17 @@ dependencies:
60
90
  requirements:
61
91
  - - ~>
62
92
  - !ruby/object:Gem::Version
63
- version: "0.4"
93
+ version: "1.0"
94
+ version:
95
+ - !ruby/object:Gem::Dependency
96
+ name: hoshi
97
+ type: :runtime
98
+ version_requirement:
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "="
102
+ - !ruby/object:Gem::Version
103
+ version: 0.2.1
64
104
  version:
65
105
  - !ruby/object:Gem::Dependency
66
106
  name: filebase
@@ -68,29 +108,69 @@ dependencies:
68
108
  version_requirement:
69
109
  version_requirements: !ruby/object:Gem::Requirement
70
110
  requirements:
71
- - - ">="
111
+ - - "="
72
112
  - !ruby/object:Gem::Version
73
- version: 0.3.5
113
+ version: 0.3.10
74
114
  version:
75
115
  - !ruby/object:Gem::Dependency
76
- name: english
116
+ name: metaid
77
117
  type: :runtime
78
118
  version_requirement:
79
119
  version_requirements: !ruby/object:Gem::Requirement
80
120
  requirements:
81
- - - ~>
121
+ - - "="
82
122
  - !ruby/object:Gem::Version
83
- version: "0.3"
123
+ version: "1.0"
84
124
  version:
85
125
  - !ruby/object:Gem::Dependency
86
- name: extensions
126
+ name: erubis
87
127
  type: :runtime
88
128
  version_requirement:
89
129
  version_requirements: !ruby/object:Gem::Requirement
90
130
  requirements:
91
- - - ~>
131
+ - - "="
132
+ - !ruby/object:Gem::Version
133
+ version: 2.6.4
134
+ version:
135
+ - !ruby/object:Gem::Dependency
136
+ name: dyoder-hive
137
+ type: :runtime
138
+ version_requirement:
139
+ version_requirements: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "="
142
+ - !ruby/object:Gem::Version
143
+ version: 0.1.8
144
+ version:
145
+ - !ruby/object:Gem::Dependency
146
+ name: autocode
147
+ type: :runtime
148
+ version_requirement:
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "="
152
+ - !ruby/object:Gem::Version
153
+ version: 1.0.1
154
+ version:
155
+ - !ruby/object:Gem::Dependency
156
+ name: daemons
157
+ type: :runtime
158
+ version_requirement:
159
+ version_requirements: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - "="
162
+ - !ruby/object:Gem::Version
163
+ version: 1.0.10
164
+ version:
165
+ - !ruby/object:Gem::Dependency
166
+ name: sequel
167
+ type: :runtime
168
+ version_requirement:
169
+ version_requirements: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "="
92
172
  - !ruby/object:Gem::Version
93
- version: "0.6"
173
+ version: 3.2.0
94
174
  version:
95
175
  - !ruby/object:Gem::Dependency
96
176
  name: RedCloth
@@ -98,29 +178,49 @@ dependencies:
98
178
  version_requirement:
99
179
  version_requirements: !ruby/object:Gem::Requirement
100
180
  requirements:
101
- - - ~>
181
+ - - "="
102
182
  - !ruby/object:Gem::Version
103
- version: "4.0"
183
+ version: 4.1.9
104
184
  version:
105
185
  - !ruby/object:Gem::Dependency
106
- name: live_console
186
+ name: rakegen
107
187
  type: :runtime
108
188
  version_requirement:
109
189
  version_requirements: !ruby/object:Gem::Requirement
110
190
  requirements:
111
- - - ~>
191
+ - - "="
112
192
  - !ruby/object:Gem::Version
113
- version: "0.2"
193
+ version: 0.6.6
114
194
  version:
115
195
  - !ruby/object:Gem::Dependency
116
- name: functor
196
+ name: cassandra
117
197
  type: :runtime
118
198
  version_requirement:
119
199
  version_requirements: !ruby/object:Gem::Requirement
120
200
  requirements:
121
- - - ">="
201
+ - - "="
122
202
  - !ruby/object:Gem::Version
123
- version: 0.5.0
203
+ version: 0.2.3
204
+ version:
205
+ - !ruby/object:Gem::Dependency
206
+ name: bacon
207
+ type: :development
208
+ version_requirement:
209
+ version_requirements: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ~>
212
+ - !ruby/object:Gem::Version
213
+ version: "1.0"
214
+ version:
215
+ - !ruby/object:Gem::Dependency
216
+ name: facon
217
+ type: :development
218
+ version_requirement:
219
+ version_requirements: !ruby/object:Gem::Requirement
220
+ requirements:
221
+ - - ~>
222
+ - !ruby/object:Gem::Version
223
+ version: "0.4"
124
224
  version:
125
225
  description:
126
226
  email: dan@zeraweb.com
@@ -131,37 +231,17 @@ extensions: []
131
231
  extra_rdoc_files: []
132
232
 
133
233
  files:
134
- - templates/classic
135
- - templates/classic/configurations
136
234
  - templates/classic/configurations/default.rb.erb
137
235
  - templates/classic/configurations/development.rb.erb
138
236
  - templates/classic/configurations/production.rb.erb
139
- - templates/classic/controllers
140
- - templates/classic/helpers
141
- - templates/classic/lib
142
- - templates/classic/lib/tasks
143
- - templates/classic/models
144
- - templates/classic/public
145
- - templates/classic/public/css
146
- - templates/classic/public/flash
147
- - templates/classic/public/images
148
- - templates/classic/public/javascript
237
+ - templates/classic/public/images/favicon.ico
149
238
  - templates/classic/Rakefile
150
- - templates/classic/resources
151
- - templates/classic/resources/map.rb.erb
152
- - templates/classic/schema
153
- - templates/classic/schema/migrations
239
+ - templates/classic/resources/server.rb.erb
154
240
  - templates/classic/startup.rb.erb
155
- - templates/classic/templates
156
- - templates/classic/templates/errors
157
- - templates/classic/templates/errors/not_found_404.mab
158
- - templates/classic/templates/errors/server_error_500.mab
159
- - templates/classic/templates/layouts
160
- - templates/classic/templates/layouts/default.mab
161
- - templates/classic/tmp
162
- - templates/classic/tmp/sessions
163
- - templates/classic/views
164
- - templates/compact
241
+ - templates/classic/views/css.rb.erb
242
+ - templates/classic/views/default.rb.erb
243
+ - templates/classic/views/errors.rb.erb
244
+ - templates/classic/views/pages.rb.erb
165
245
  - templates/compact/startup.rb.erb
166
246
  - templates/classic/controllers/.gitignore
167
247
  - templates/classic/helpers/.gitignore
@@ -173,140 +253,146 @@ files:
173
253
  - templates/classic/public/javascript/.gitignore
174
254
  - templates/classic/resources/.gitignore
175
255
  - templates/classic/schema/migrations/.gitignore
176
- - templates/classic/tmp/sessions/.gitignore
177
256
  - templates/classic/views/.gitignore
178
- - lib/caches/file.rb
179
- - lib/caches/memcached.rb
180
- - lib/caches/simple.rb
181
- - lib/caches/synchronized.rb
182
- - lib/commands/console.rb
183
- - lib/commands/generate.rb
184
- - lib/commands/help.rb
185
- - lib/commands/server.rb
186
- - lib/dispatchers/base.rb
187
- - lib/dispatchers/default.rb
188
- - lib/ext/float.rb
189
- - lib/ext/hash.rb
190
- - lib/ext/integer.rb
191
- - lib/ext/kernel.rb
192
- - lib/ext/module.rb
193
- - lib/ext/object.rb
194
- - lib/ext/string.rb
195
- - lib/ext/symbol.rb
196
- - lib/ext/tempfile.rb
197
- - lib/foundations/classic.rb
198
- - lib/foundations/compact.rb
199
- - lib/helpers/basic.rb
200
- - lib/helpers/doc_type.rb
201
- - lib/helpers/extended.rb
202
- - lib/helpers/form.rb
203
- - lib/helpers/formatting.rb
204
- - lib/helpers/layouts.rb
205
- - lib/helpers/model.rb
206
- - lib/helpers/view.rb
207
- - lib/layers/inflect/english.rb
208
- - lib/layers/mvc/controllers.rb
209
- - lib/layers/mvc/extensions.rb
210
- - lib/layers/mvc.rb
211
- - lib/layers/orm/migration.rb
212
- - lib/layers/orm/providers/active_record/tasks/generate.rb
213
- - lib/layers/orm/providers/active_record/tasks/schema.rb
214
- - lib/layers/orm/providers/active_record.rb
215
- - lib/layers/orm/providers/data_mapper.rb
216
- - lib/layers/orm/providers/filebase.rb
217
- - lib/layers/orm/providers/sequel/tasks/generate.rb
218
- - lib/layers/orm/providers/sequel/tasks/schema.rb
219
- - lib/layers/orm/providers/sequel.rb
220
- - lib/layers/renderers/erubis.rb
221
- - lib/layers/renderers/haml.rb
222
- - lib/layers/renderers/markaby.rb
223
- - lib/matchers/accept.rb
224
- - lib/matchers/base.rb
225
- - lib/matchers/content_type.rb
226
- - lib/matchers/path.rb
227
- - lib/matchers/query.rb
228
- - lib/matchers/request.rb
229
- - lib/matchers/resource.rb
230
- - lib/matchers/traits.rb
231
- - lib/matchers/uri.rb
232
- - lib/renderers/mixin.rb
233
- - lib/resources/mixin.rb
234
- - lib/resources/paths.rb
235
- - lib/runtime/configuration.rb
236
- - lib/runtime/console.rb
237
- - lib/runtime/logger.rb
238
- - lib/runtime/mime_types.rb
239
- - lib/runtime/mocks.rb
240
- - lib/runtime/monitor.rb
241
- - lib/runtime/request.rb
242
- - lib/runtime/response.rb
243
- - lib/runtime/response_mixin.rb
244
- - lib/runtime/runtime.rb
245
- - lib/runtime/server.rb
246
- - lib/runtime/session.rb
247
- - lib/runtime/worker.rb
248
- - lib/servers/base.rb
249
- - lib/servers/mongrel.rb
250
- - lib/servers/webrick.rb
251
- - lib/tasks/gem.rb
252
- - lib/tasks/generate.rb
253
- - lib/views/errors.rb
254
- - lib/views/mixin.rb
257
+ - lib/waves/caches/file.rb
258
+ - lib/waves/caches/memcached.rb
259
+ - lib/waves/caches/simple.rb
260
+ - lib/waves/caches/synchronized.rb
261
+ - lib/waves/commands/console.rb
262
+ - lib/waves/commands/generate.rb
263
+ - lib/waves/commands/help.rb
264
+ - lib/waves/commands/server.rb
265
+ - lib/waves/dispatchers/base.rb
266
+ - lib/waves/dispatchers/default.rb
267
+ - lib/waves/ext/float.rb
268
+ - lib/waves/ext/hash.rb
269
+ - lib/waves/ext/integer.rb
270
+ - lib/waves/ext/kernel.rb
271
+ - lib/waves/ext/module.rb
272
+ - lib/waves/ext/object.rb
273
+ - lib/waves/ext/string.rb
274
+ - lib/waves/ext/symbol.rb
275
+ - lib/waves/ext/tempfile.rb
276
+ - lib/waves/ext/time.rb
277
+ - lib/waves/foundations/classic.rb
278
+ - lib/waves/foundations/compact.rb
279
+ - lib/waves/foundations/rest.rb
280
+ - lib/waves/helpers/basic.rb
281
+ - lib/waves/helpers/doc_type.rb
282
+ - lib/waves/helpers/form.rb
283
+ - lib/waves/helpers/formatting.rb
284
+ - lib/waves/layers/mvc/controllers.rb
285
+ - lib/waves/layers/mvc/extensions.rb
286
+ - lib/waves/layers/mvc.rb
287
+ - lib/waves/layers/orm/migration.rb
288
+ - lib/waves/layers/orm/providers/active_record/tasks/generate.rb
289
+ - lib/waves/layers/orm/providers/active_record/tasks/schema.rb
290
+ - lib/waves/layers/orm/providers/active_record.rb
291
+ - lib/waves/layers/orm/providers/data_mapper.rb
292
+ - lib/waves/layers/orm/providers/filebase.rb
293
+ - lib/waves/layers/orm/providers/sequel/tasks/generate.rb
294
+ - lib/waves/layers/orm/providers/sequel/tasks/schema.rb
295
+ - lib/waves/layers/orm/providers/sequel.rb
296
+ - lib/waves/layers/rack/rack_cache.rb
297
+ - lib/waves/layers/renderers/erubis.rb
298
+ - lib/waves/layers/renderers/haml.rb
299
+ - lib/waves/layers/renderers/markaby.rb
300
+ - lib/waves/layers/text/inflect/english.rb
301
+ - lib/waves/matchers/accept.rb
302
+ - lib/waves/matchers/ext.rb
303
+ - lib/waves/matchers/path.rb
304
+ - lib/waves/matchers/query.rb
305
+ - lib/waves/matchers/request.rb
306
+ - lib/waves/matchers/requested.rb
307
+ - lib/waves/matchers/resource.rb
308
+ - lib/waves/matchers/traits.rb
309
+ - lib/waves/matchers/uri.rb
310
+ - lib/waves/media/mime_types.rb
311
+ - lib/waves/renderers/mixin.rb
312
+ - lib/waves/request/accept.rb
313
+ - lib/waves/request/request.rb
314
+ - lib/waves/resources/file_mixin.rb
315
+ - lib/waves/resources/mixin.rb
316
+ - lib/waves/resources/paths.rb
317
+ - lib/waves/response/client_errors.rb
318
+ - lib/waves/response/packaged.rb
319
+ - lib/waves/response/redirects.rb
320
+ - lib/waves/response/response.rb
321
+ - lib/waves/response/response_mixin.rb
322
+ - lib/waves/runtime/applications.rb
323
+ - lib/waves/runtime/configuration.rb
324
+ - lib/waves/runtime/console.rb
325
+ - lib/waves/runtime/logger.rb
326
+ - lib/waves/runtime/mocks.rb
327
+ - lib/waves/runtime/rackup.rb
328
+ - lib/waves/runtime/runtime.rb
329
+ - lib/waves/runtime/server.rb
330
+ - lib/waves/servers/base.rb
331
+ - lib/waves/servers/mongrel.rb
332
+ - lib/waves/servers/webrick.rb
333
+ - lib/waves/tasks/gem.rb
334
+ - lib/waves/tasks/generate.rb
335
+ - lib/waves/views/cassy.rb
336
+ - lib/waves/views/errors.rb
337
+ - lib/waves/views/mixin.rb
338
+ - lib/waves/views/templated.rb
255
339
  - lib/waves.rb
256
- - lib/layers/orm/providers/active_record/migrations/empty.rb.erb
257
- - lib/layers/orm/providers/sequel/migrations/empty.rb.erb
340
+ - lib/waves/layers/orm/providers/active_record/migrations/empty.rb.erb
341
+ - lib/waves/layers/orm/providers/sequel/migrations/empty.rb.erb
258
342
  - doc/HISTORY
259
343
  - doc/LICENSE
260
344
  - doc/README
261
345
  - doc/VERSION
262
- - samples/blog
263
- - samples/blog/blog.db
264
- - samples/blog/configurations
346
+ - samples/basic/basic_startup.rb
347
+ - samples/basic/config.ru
265
348
  - samples/blog/configurations/default.rb
266
349
  - samples/blog/configurations/development.rb
267
350
  - samples/blog/configurations/production.rb
268
- - samples/blog/log
269
- - samples/blog/log/waves.production
270
- - samples/blog/models
271
351
  - samples/blog/models/comment.rb
272
352
  - samples/blog/models/entry.rb
273
- - samples/blog/public
274
- - samples/blog/public/css
275
353
  - samples/blog/public/css/site.css
276
- - samples/blog/public/javascript
277
354
  - samples/blog/public/javascript/jquery-1.2.6.min.js
278
355
  - samples/blog/public/javascript/site.js
279
356
  - samples/blog/Rakefile
280
- - samples/blog/resources
281
357
  - samples/blog/resources/entry.rb
282
358
  - samples/blog/resources/map.rb
283
- - samples/blog/schema
284
- - samples/blog/schema/migrations
285
359
  - samples/blog/schema/migrations/001_initial_schema.rb
286
360
  - samples/blog/schema/migrations/002_add_comments.rb
287
- - samples/blog/schema/migrations/templates
288
361
  - samples/blog/schema/migrations/templates/empty.rb.erb
289
362
  - samples/blog/startup.rb
290
- - samples/blog/templates
291
- - samples/blog/templates/comment
292
363
  - samples/blog/templates/comment/add.mab
293
364
  - samples/blog/templates/comment/list.mab
294
- - samples/blog/templates/entry
295
365
  - samples/blog/templates/entry/edit.mab
296
366
  - samples/blog/templates/entry/list.mab
297
367
  - samples/blog/templates/entry/show.mab
298
368
  - samples/blog/templates/entry/summary.mab
299
- - samples/blog/templates/errors
300
369
  - samples/blog/templates/errors/not_found_404.mab
301
370
  - samples/blog/templates/errors/server_error_500.mab
302
- - samples/blog/templates/layouts
303
371
  - samples/blog/templates/layouts/default.mab
304
- - samples/blog/templates/waves
305
372
  - samples/blog/templates/waves/status.mab
306
- - samples/blog/tmp
307
- - samples/blog/tmp/sessions
373
+ - test/ext/object.rb
374
+ - test/ext/shortcuts.rb
375
+ - test/helpers.rb
376
+ - test/match/accept.rb
377
+ - test/match/ext.rb
378
+ - test/match/methods.rb
379
+ - test/match/params.rb
380
+ - test/match/path.rb
381
+ - test/match/query.rb
382
+ - test/match/request.rb
383
+ - test/match/requested.rb
384
+ - test/match/uri.rb
385
+ - test/process/request.rb
386
+ - test/process/resource.rb
387
+ - test/resources/path.rb
388
+ - test/runtime/configurations.rb
389
+ - test/runtime/request.rb
390
+ - test/runtime/response.rb
391
+ - test/views/views.rb
308
392
  has_rdoc: true
309
393
  homepage: http://rubywaves.com
394
+ licenses: []
395
+
310
396
  post_install_message:
311
397
  rdoc_options: []
312
398
 
@@ -327,9 +413,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
327
413
  requirements: []
328
414
 
329
415
  rubyforge_project: waves
330
- rubygems_version: 1.2.0
416
+ rubygems_version: 1.3.5
331
417
  signing_key:
332
- specification_version: 2
418
+ specification_version: 3
333
419
  summary: Open-source framework for building Ruby-based Web applications.
334
420
  test_files: []
335
421