strelka 0.0.1.pre177 → 0.0.1.pre184
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +111 -16
- data/Manifest.txt +8 -8
- data/Rakefile +3 -3
- data/bin/leash +51 -28
- data/examples/{auth-demo.rb → apps/auth-demo} +3 -3
- data/examples/{auth-demo2.rb → apps/auth-demo2} +0 -0
- data/examples/{sessions-demo.rb → apps/sessions-demo} +0 -0
- data/examples/config.yml +5 -1
- data/examples/{examples.css → static/examples.css} +0 -0
- data/examples/{examples.html → static/examples.html} +0 -0
- data/examples/{auth-form.tmpl → templates/auth-form.tmpl} +0 -0
- data/examples/{auth-success.tmpl → templates/auth-success.tmpl} +0 -0
- data/examples/{layout.tmpl → templates/layout.tmpl} +0 -0
- data/lib/strelka/app/auth.rb +18 -8
- data/lib/strelka/app/errors.rb +3 -2
- data/lib/strelka/app/filters.rb +2 -0
- data/lib/strelka/app/negotiation.rb +2 -0
- data/lib/strelka/app/parameters.rb +18 -140
- data/lib/strelka/app/plugins.rb +84 -26
- data/lib/strelka/app/restresources.rb +26 -18
- data/lib/strelka/app/routing.rb +8 -2
- data/lib/strelka/app/sessions.rb +7 -0
- data/lib/strelka/app/templating.rb +1 -1
- data/lib/strelka/app.rb +25 -1
- data/lib/strelka/constants.rb +3 -1
- data/lib/strelka/paramvalidator.rb +251 -74
- data/lib/strelka/session/default.rb +1 -1
- data/spec/strelka/app/auth_spec.rb +37 -0
- data/spec/strelka/app/errors_spec.rb +0 -2
- data/spec/strelka/app/filters_spec.rb +1 -1
- data/spec/strelka/app/parameters_spec.rb +4 -92
- data/spec/strelka/app/plugins_spec.rb +64 -2
- data/spec/strelka/app/restresources_spec.rb +3 -0
- data/spec/strelka/app/routing_spec.rb +5 -5
- data/spec/strelka/paramvalidator_spec.rb +294 -385
- data.tar.gz.sig +0 -0
- metadata +126 -46
- metadata.gz.sig +0 -0
@@ -33,11 +33,22 @@ describe Strelka::App::Plugins do
|
|
33
33
|
reset_logging()
|
34
34
|
end
|
35
35
|
|
36
|
+
after( :each ) do
|
37
|
+
Strelka::App.loaded_plugins.delete_if {|mod| mod =~ /anonymous/ }
|
38
|
+
end
|
39
|
+
|
36
40
|
RSpec::Matchers.define( :order ) do |item|
|
37
41
|
match do |enumerable|
|
42
|
+
raise "%p doesn't include %p" % [ enumerable, item ] unless
|
43
|
+
enumerable.include?( item )
|
38
44
|
if defined?( @before )
|
45
|
+
raise "%p doesn't include %p" % [ enumerable, @before ] unless
|
46
|
+
enumerable.include?( @before )
|
39
47
|
enumerable.index( @before ) < enumerable.index( item )
|
40
48
|
elsif defined?( @after )
|
49
|
+
raise "%p doesn't include %p" % [ enumerable, @after ] unless
|
50
|
+
enumerable.include?( @after )
|
51
|
+
Strelka.log.debug "Enumerable is: %p" % [ enumerable ]
|
41
52
|
enumerable.index( @after ) > enumerable.index( item )
|
42
53
|
else
|
43
54
|
raise "No .before or .after to compare against!"
|
@@ -85,6 +96,7 @@ describe Strelka::App::Plugins do
|
|
85
96
|
end
|
86
97
|
end
|
87
98
|
|
99
|
+
|
88
100
|
it "sorts before it in the plugin registry" do
|
89
101
|
Strelka::App.loaded_plugins.tsort.
|
90
102
|
should order( @other_mod.plugin_name ).before( @before_mod.plugin_name )
|
@@ -124,7 +136,7 @@ describe Strelka::App::Plugins do
|
|
124
136
|
end
|
125
137
|
|
126
138
|
app = Class.new( Strelka::App )
|
127
|
-
app.
|
139
|
+
app.register_plugin( plugin )
|
128
140
|
|
129
141
|
app.a_class_method.should == "yep."
|
130
142
|
end
|
@@ -139,7 +151,7 @@ describe Strelka::App::Plugins do
|
|
139
151
|
end
|
140
152
|
|
141
153
|
app = Class.new( Strelka::App )
|
142
|
-
app.
|
154
|
+
app.register_plugin( plugin )
|
143
155
|
|
144
156
|
app.testing_value.should == :default
|
145
157
|
app.testing_value = :not_the_default
|
@@ -158,6 +170,7 @@ describe Strelka::App::Plugins do
|
|
158
170
|
klass = Class.new( @including_class ) do
|
159
171
|
plugin :routing
|
160
172
|
end
|
173
|
+
klass.install_plugins
|
161
174
|
|
162
175
|
klass.ancestors.should include( Strelka::App::Routing )
|
163
176
|
end
|
@@ -166,10 +179,59 @@ describe Strelka::App::Plugins do
|
|
166
179
|
klass = Class.new( @including_class ) do
|
167
180
|
plugins :templating, :routing
|
168
181
|
end
|
182
|
+
klass.install_plugins
|
169
183
|
|
170
184
|
klass.ancestors.should include( Strelka::App::Routing, Strelka::App::Templating )
|
171
185
|
end
|
172
186
|
|
187
|
+
it "installs the plugins in the right order even if they're loaded at separate times" do
|
188
|
+
superclass = Class.new( @including_class ) do
|
189
|
+
plugin :routing
|
190
|
+
end
|
191
|
+
subclass = Class.new( superclass ) do
|
192
|
+
plugin :templating
|
193
|
+
end
|
194
|
+
subclass.install_plugins
|
195
|
+
|
196
|
+
subclass.ancestors.should order( Strelka::App::Templating ).after( Strelka::App::Routing )
|
197
|
+
end
|
198
|
+
|
199
|
+
it "adds information about where plugins were installed from when they're installed" do
|
200
|
+
klass = Class.new( @including_class ) do
|
201
|
+
plugin :routing
|
202
|
+
end
|
203
|
+
klass.plugins_installed_from.should be_nil()
|
204
|
+
klass.install_plugins
|
205
|
+
klass.plugins_installed_from.should =~ /#{__FILE__}:#{__LINE__ - 1}/
|
206
|
+
end
|
207
|
+
|
208
|
+
end
|
209
|
+
|
210
|
+
|
211
|
+
context "Plugins loaded in a superclass" do
|
212
|
+
|
213
|
+
before( :each ) do
|
214
|
+
@base_class = Class.new { include Strelka::App::Plugins }
|
215
|
+
@superclass = Class.new( @base_class ) do
|
216
|
+
plugin :routing
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
|
221
|
+
it "are inherited by subclasses" do
|
222
|
+
subclass = Class.new( @superclass ) do
|
223
|
+
get 'foom' do |req|
|
224
|
+
res = req.response
|
225
|
+
res.puts( "Yep, it worked." )
|
226
|
+
return res
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
subclass.routes.should == [
|
231
|
+
[ :GET, ['foom'], {action: subclass.instance_method(:GET_foom), options: {}} ]
|
232
|
+
]
|
233
|
+
end
|
234
|
+
|
173
235
|
end
|
174
236
|
|
175
237
|
end
|
@@ -160,7 +160,9 @@ describe Strelka::App::RestResources do
|
|
160
160
|
end
|
161
161
|
|
162
162
|
context "OPTIONS routes" do
|
163
|
+
|
163
164
|
it "responds to a top-level OPTIONS request with a resource description (JSON Schema?)"
|
165
|
+
|
164
166
|
it "responds to an OPTIONS request for a particular resource with details about it" do
|
165
167
|
req = @request_factory.options( '/api/v1/servers' )
|
166
168
|
res = @app.new.handle( req )
|
@@ -168,6 +170,7 @@ describe Strelka::App::RestResources do
|
|
168
170
|
res.status.should == HTTP::OK
|
169
171
|
res.headers.allowed.split( /\s*,\s*/ ).should include(*%w[GET HEAD POST PUT DELETE])
|
170
172
|
end
|
173
|
+
|
171
174
|
end # OPTIONS routes
|
172
175
|
|
173
176
|
|
@@ -48,7 +48,7 @@ describe Strelka::App::Routing do
|
|
48
48
|
super
|
49
49
|
end
|
50
50
|
end
|
51
|
-
Strelka.log.debug "
|
51
|
+
Strelka.log.debug " App class is: %p, routes array: 0x%016x" %
|
52
52
|
[ @app, @app.routes.object_id * 2 ]
|
53
53
|
end
|
54
54
|
|
@@ -236,7 +236,7 @@ describe Strelka::App::Routing do
|
|
236
236
|
end
|
237
237
|
|
238
238
|
@app.routes.should ==
|
239
|
-
[[ :POST, ['userinfo', /(?<username>
|
239
|
+
[[ :POST, ['userinfo', /(?<username>[a-z]\w+)/i],
|
240
240
|
{action: @app.instance_method(:POST_userinfo__username), options: {}} ]]
|
241
241
|
end
|
242
242
|
|
@@ -248,7 +248,7 @@ describe Strelka::App::Routing do
|
|
248
248
|
end
|
249
249
|
|
250
250
|
@app.routes.should ==
|
251
|
-
[[ :POST, ['userinfo', /(?<username>
|
251
|
+
[[ :POST, ['userinfo', /(?<username>[a-z]\w+)/i],
|
252
252
|
{action: @app.instance_method(:POST_userinfo__username), options: {}} ]]
|
253
253
|
end
|
254
254
|
|
@@ -260,7 +260,7 @@ describe Strelka::App::Routing do
|
|
260
260
|
end
|
261
261
|
|
262
262
|
@app.routes.should ==
|
263
|
-
[[ :POST, ['userinfo', /(?<username>
|
263
|
+
[[ :POST, ['userinfo', /(?<username>[a-z]\w+)/i],
|
264
264
|
{action: @app.instance_method(:POST_userinfo__username), options: {}} ]]
|
265
265
|
end
|
266
266
|
|
@@ -272,7 +272,7 @@ describe Strelka::App::Routing do
|
|
272
272
|
end
|
273
273
|
|
274
274
|
@app.routes.should ==
|
275
|
-
[[ :POST, ['userinfo', /(?<username>
|
275
|
+
[[ :POST, ['userinfo', /(?<username>[a-z]\w+)/i],
|
276
276
|
{action: @app.instance_method(:POST_userinfo__username), options: {}} ]]
|
277
277
|
end
|
278
278
|
|