strelka 0.0.1.pre177 → 0.0.1.pre184

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 (38) hide show
  1. data/ChangeLog +111 -16
  2. data/Manifest.txt +8 -8
  3. data/Rakefile +3 -3
  4. data/bin/leash +51 -28
  5. data/examples/{auth-demo.rb → apps/auth-demo} +3 -3
  6. data/examples/{auth-demo2.rb → apps/auth-demo2} +0 -0
  7. data/examples/{sessions-demo.rb → apps/sessions-demo} +0 -0
  8. data/examples/config.yml +5 -1
  9. data/examples/{examples.css → static/examples.css} +0 -0
  10. data/examples/{examples.html → static/examples.html} +0 -0
  11. data/examples/{auth-form.tmpl → templates/auth-form.tmpl} +0 -0
  12. data/examples/{auth-success.tmpl → templates/auth-success.tmpl} +0 -0
  13. data/examples/{layout.tmpl → templates/layout.tmpl} +0 -0
  14. data/lib/strelka/app/auth.rb +18 -8
  15. data/lib/strelka/app/errors.rb +3 -2
  16. data/lib/strelka/app/filters.rb +2 -0
  17. data/lib/strelka/app/negotiation.rb +2 -0
  18. data/lib/strelka/app/parameters.rb +18 -140
  19. data/lib/strelka/app/plugins.rb +84 -26
  20. data/lib/strelka/app/restresources.rb +26 -18
  21. data/lib/strelka/app/routing.rb +8 -2
  22. data/lib/strelka/app/sessions.rb +7 -0
  23. data/lib/strelka/app/templating.rb +1 -1
  24. data/lib/strelka/app.rb +25 -1
  25. data/lib/strelka/constants.rb +3 -1
  26. data/lib/strelka/paramvalidator.rb +251 -74
  27. data/lib/strelka/session/default.rb +1 -1
  28. data/spec/strelka/app/auth_spec.rb +37 -0
  29. data/spec/strelka/app/errors_spec.rb +0 -2
  30. data/spec/strelka/app/filters_spec.rb +1 -1
  31. data/spec/strelka/app/parameters_spec.rb +4 -92
  32. data/spec/strelka/app/plugins_spec.rb +64 -2
  33. data/spec/strelka/app/restresources_spec.rb +3 -0
  34. data/spec/strelka/app/routing_spec.rb +5 -5
  35. data/spec/strelka/paramvalidator_spec.rb +294 -385
  36. data.tar.gz.sig +0 -0
  37. metadata +126 -46
  38. metadata.gz.sig +0 -0
data/ChangeLog CHANGED
@@ -1,22 +1,100 @@
1
- 2012-04-06 Mahlon E. Smith <mahlon@martini.nu>
1
+ 2012-04-11 Michael Granger <ged@FaerieMUD.org>
2
2
 
3
- * lib/strelka/app/sessions.rb, lib/strelka/cookie.rb,
4
- lib/strelka/cookieset.rb, lib/strelka/session.rb,
5
- lib/strelka/session/db.rb, lib/strelka/session/default.rb,
6
- spec/strelka/cookie_spec.rb, spec/strelka/session/db_spec.rb,
7
- spec/strelka/session/default_spec.rb:
8
- Expose cookie options to the default and db session stores.
9
- [49e538cdee68] [tip]
3
+ * Rakefile, lib/strelka/app.rb, lib/strelka/app/auth.rb,
4
+ lib/strelka/app/errors.rb, lib/strelka/app/filters.rb,
5
+ lib/strelka/app/negotiation.rb, lib/strelka/app/parameters.rb,
6
+ lib/strelka/app/plugins.rb, lib/strelka/app/restresources.rb,
7
+ lib/strelka/app/routing.rb, lib/strelka/app/sessions.rb,
8
+ spec/strelka/app/auth_spec.rb, spec/strelka/app/errors_spec.rb,
9
+ spec/strelka/app/filters_spec.rb, spec/strelka/app/plugins_spec.rb,
10
+ spec/strelka/app/restresources_spec.rb,
11
+ spec/strelka/app/routing_spec.rb:
12
+ Fixing specs broken by the deferred plugins change. Ugh, I suck.
13
+ [d762ebcce3a6] [tip]
10
14
 
11
- * Manifest.txt, lib/strelka/app/sessions.rb, lib/strelka/session.rb,
12
- lib/strelka/session/db.rb, lib/strelka/session/default.rb,
13
- spec/strelka/session/db_spec.rb,
14
- spec/strelka/session/default_spec.rb:
15
- Add a persistent DB session store, using sequel.
16
- [99f3c3f5d6ca]
15
+ * Merging with ssh://hg@deveiate.org/Strelka@8f1c27819e70
16
+ [5fcd76455aad]
17
+
18
+ * Manifest.txt:
19
+ Updating the manifest
20
+ [35165b3d01cc]
21
+
22
+ 2012-04-11 Mahlon E. Smith <mahlon@martini.nu>
23
+
24
+ * lib/strelka/session/default.rb:
25
+ Use the built-in securerandom method for obtaining a hex value.
26
+ [8f1c27819e70]
27
+
28
+ 2012-04-10 Michael Granger <ged@FaerieMUD.org>
29
+
30
+ * lib/strelka/app/auth.rb, lib/strelka/app/parameters.rb,
31
+ lib/strelka/app/restresources.rb, lib/strelka/app/routing.rb,
32
+ lib/strelka/paramvalidator.rb, spec/strelka/app/auth_spec.rb,
33
+ spec/strelka/app/parameters_spec.rb,
34
+ spec/strelka/app/routing_spec.rb,
35
+ spec/strelka/paramvalidator_spec.rb:
36
+ Rework the paramvalidator and parameters plugin to allow per-request
37
+ overrides
38
+ [e7393474988b]
39
+
40
+ * bin/leash, examples/apps/auth-demo, examples/apps/auth-demo2,
41
+ examples/apps/sessions-demo, examples/auth-demo.rb, examples/auth-
42
+ demo2.rb, examples/auth-form.tmpl, examples/auth-success.tmpl,
43
+ examples/config.yml, examples/examples.css, examples/examples.html,
44
+ examples/layout.tmpl, examples/sessions-demo.rb,
45
+ examples/static/examples.css, examples/static/examples.html,
46
+ examples/templates/auth-form.tmpl, examples/templates/auth-
47
+ success.tmpl, examples/templates/layout.tmpl, lib/strelka/app.rb,
48
+ lib/strelka/app/auth.rb, lib/strelka/app/plugins.rb,
49
+ lib/strelka/constants.rb, spec/strelka/app/plugins_spec.rb:
50
+ Modify the plugins mixin to defer adding the mixin part of plugins
51
+ as long as possible.
52
+
53
+ This allows someone to call plugin/plugins multiple times without
54
+ having to worry about what order they're called in, and makes using
55
+ a common Strelka::App subclass for a suite of applications easier.
56
+ [546809f3204f]
57
+
58
+ 2012-04-09 Mahlon E. Smith <mahlon@martini.nu>
59
+
60
+ * lib/strelka/app/templating.rb:
61
+ Ensure the templating plugin runs before the errors plugin, so
62
+ symbols are properly converted to Strelka::HTTPResponse objects
63
+ before errors see them.
64
+ [9423c8ba3ee0]
17
65
 
18
66
  2012-04-06 Michael Granger <ged@FaerieMUD.org>
19
67
 
68
+ * lib/strelka/session/db.rb:
69
+ Change the DB session class to default to Mongrel2's in-memory DB.
70
+
71
+ Use Mongrel2's in-memory config db for unconfigured db sessions
72
+ instead of depending on the sqlite3 gem.
73
+ [2a1129fed218]
74
+
75
+ * Manifest.txt:
76
+ Update the manifest
77
+ [54d6bde6cb0c]
78
+
79
+ * Merged with 49e538cdee68
80
+ [05d72a2ed8cc]
81
+
82
+ * lib/strelka.rb:
83
+ Set some RDoc metadata from the main module
84
+ [28465ed81190]
85
+
86
+ * lib/strelka/logging.rb:
87
+ Remove ERB dependency from the HTML logger
88
+ [6e6a14f86dc6]
89
+
90
+ * spec/lib/helpers.rb:
91
+ Update the setup_config_db helper for Mongrel2-0.20.x
92
+ [9f5393deb2da]
93
+
94
+ * .hgignore:
95
+ Add the ChangeLog to the ignorefile
96
+ [cc8c30d38652]
97
+
20
98
  * lib/strelka/app/templating.rb:
21
99
  Add API docs to the :templating plugin module
22
100
  [3c160d996320]
@@ -33,11 +111,28 @@
33
111
  Update dependencies
34
112
  [787e523777d1]
35
113
 
114
+ 2012-04-06 Mahlon E. Smith <mahlon@martini.nu>
115
+
116
+ * lib/strelka/app/sessions.rb, lib/strelka/cookie.rb,
117
+ lib/strelka/cookieset.rb, lib/strelka/session.rb,
118
+ lib/strelka/session/db.rb, lib/strelka/session/default.rb,
119
+ spec/strelka/cookie_spec.rb, spec/strelka/session/db_spec.rb,
120
+ spec/strelka/session/default_spec.rb:
121
+ Expose cookie options to the default and db session stores.
122
+ [49e538cdee68]
123
+
124
+ * Manifest.txt, lib/strelka/app/sessions.rb, lib/strelka/session.rb,
125
+ lib/strelka/session/db.rb, lib/strelka/session/default.rb,
126
+ spec/strelka/session/db_spec.rb,
127
+ spec/strelka/session/default_spec.rb:
128
+ Add a persistent DB session store, using sequel.
129
+ [99f3c3f5d6ca]
130
+
36
131
  2012-04-04 Michael Granger <ged@FaerieMUD.org>
37
132
 
38
133
  * manual/src/tutorial.page:
39
134
  Add a bit more content to the manual.
40
- [79a26c9e4dd5] [github/master]
135
+ [79a26c9e4dd5]
41
136
 
42
137
  2012-04-02 Michael Granger <ged@FaerieMUD.org>
43
138
 
@@ -88,7 +183,7 @@
88
183
  * examples/auth-demo.rb, lib/strelka/app/auth.rb,
89
184
  lib/strelka/authprovider.rb, spec/strelka/app/auth_spec.rb:
90
185
  Merging with accidentally-committed auth patch on Github
91
- [3025b5711352]
186
+ [3025b5711352] [github/master]
92
187
 
93
188
  2012-03-20 Michael Granger <ged@FaerieMUD.org>
94
189
 
data/Manifest.txt CHANGED
@@ -16,16 +16,16 @@ contrib/hoetemplate/data/project/templates/top.tmpl.erb
16
16
  contrib/hoetemplate/lib/file_name.rb.erb
17
17
  contrib/hoetemplate/spec/file_name_spec.rb.erb
18
18
  data/strelka/apps/hello-world
19
- examples/auth-demo.rb
20
- examples/auth-demo2.rb
21
- examples/auth-form.tmpl
22
- examples/auth-success.tmpl
19
+ examples/apps/auth-demo
20
+ examples/apps/auth-demo2
21
+ examples/apps/sessions-demo
23
22
  examples/config.yml
24
- examples/examples.css
25
- examples/examples.html
26
23
  examples/gen-config.rb
27
- examples/layout.tmpl
28
- examples/sessions-demo.rb
24
+ examples/static/examples.css
25
+ examples/static/examples.html
26
+ examples/templates/auth-form.tmpl
27
+ examples/templates/auth-success.tmpl
28
+ examples/templates/layout.tmpl
29
29
  lib/strelka.rb
30
30
  lib/strelka/app.rb
31
31
  lib/strelka/app/auth.rb
data/Rakefile CHANGED
@@ -25,11 +25,11 @@ hoespec = Hoe.spec 'strelka' do
25
25
  self.dependency 'highline', '~> 1.6'
26
26
  self.dependency 'sysexits', '~> 1.0'
27
27
  self.dependency 'formvalidator', '~> 0.1'
28
- self.dependency 'inversion ', '~> 0.8'
28
+ self.dependency 'inversion', '~> 0.8'
29
29
  self.dependency 'mongrel2', '~> 0.20'
30
- self.dependency 'uuidtools ', '~> 2.1'
30
+ self.dependency 'uuidtools', '~> 2.1'
31
31
  self.dependency 'configurability', '~> 1.0'
32
- self.dependency 'pluginfactory ', '~> 1.0'
32
+ self.dependency 'pluginfactory', '~> 1.0'
33
33
 
34
34
  self.dependency 'hoe-deveiate', '~> 0.1', :developer
35
35
  self.dependency 'hoe-manualgen', '~> 0.3', :developer
data/bin/leash CHANGED
@@ -103,7 +103,7 @@ class Strelka::LeashCommand
103
103
  text ''
104
104
 
105
105
  text 'Global Options'
106
- opt :config, "Specify the config file to load."
106
+ opt :config, "Specify the config file to load.", :type => :string
107
107
  text ''
108
108
 
109
109
  text 'Other Options:'
@@ -163,7 +163,7 @@ class Strelka::LeashCommand
163
163
  ### Create a new instance of the command and set it up with the given
164
164
  ### +options+.
165
165
  def initialize( options )
166
- Strelka.logger.formatter = Strelka::Logging::ColorFormatter.new( Strelka.logger )
166
+ Strelka.logger.formatter = Strelka::Logging::ColorFormatter.new( Strelka.logger ) if $stderr.tty?
167
167
  @options = options
168
168
 
169
169
  if @options.debug
@@ -196,8 +196,8 @@ class Strelka::LeashCommand
196
196
 
197
197
  begin
198
198
  cmd_method = self.method( "#{command}_command" )
199
- rescue NoMethodError => err
200
- error "No such command"
199
+ rescue NameError => err
200
+ error "No such command %p" % [ command ]
201
201
  exit :usage
202
202
  end
203
203
 
@@ -264,8 +264,19 @@ class Strelka::LeashCommand
264
264
 
265
265
  ### The 'start' command
266
266
  def start_command( *args )
267
+ path, appname, gemname = self.find_specified_app( *args )
268
+
269
+ header "Starting the %s app from the %s gem" % [ appname, gemname ]
270
+ fork do
271
+ self.log.debug " in the child."
272
+ Strelka.load_config( self.options.config ) if self.options.config
273
+ Kernel.load( path )
274
+ end
275
+
276
+ message "started. Waiting for shutdown."
277
+ Process.wait
267
278
  end
268
- help :start, "Start the web adminstration app"
279
+ help :start, "Start a Strelka app"
269
280
 
270
281
 
271
282
  ### The 'version' command
@@ -276,36 +287,48 @@ class Strelka::LeashCommand
276
287
 
277
288
 
278
289
  #
279
- # Command functions
290
+ # Helper methods
280
291
  #
281
292
 
282
- ### Install a bootstrap config database for the admin server.
283
- def setup_bootstrap_config
284
- Mongrel2::Config.init_database
285
-
286
- if Mongrel2::Config::Server.by_uuid( ADMINSERVER_ID ).first
287
- message "Admin server is already configured"
288
- if !self.prompt.agree( "Replace the existing config? ", true )
289
- message "Okay, keeping the existing config."
290
- return
293
+ ### Find the app specified in the specified +args+ and return the Pathname to it and the
294
+ ### name of the gem it belongs to. Raises a RuntimeError if the +args+ didn't contain a
295
+ ### valid application specification.
296
+ def find_specified_app( *args )
297
+ appname = args.pop
298
+ gemname = args.pop
299
+ discovered_apps = Strelka::App.discover_paths
300
+
301
+ path = nil
302
+ if gemname
303
+ discovered_apps[ gemname ].each do |apppath|
304
+ self.log.debug " %s (%s)" % [ apppath, apppath.basename('.rb') ]
305
+ if apppath.basename('.rb').to_s == appname
306
+ path = apppath
307
+ break
308
+ end
309
+ end
310
+ else
311
+ self.log.debug "No gem name; searching them all:"
312
+ discovered_apps.each do |disc_gemname, paths|
313
+ self.log.debug " %s: %d paths" % [ disc_gemname, paths.length ]
314
+ path = paths.find do |apppath|
315
+ self.log.debug " %s (%s)" % [ apppath, apppath.basename('.rb') ]
316
+ self.log.debug " %p vs. %p" % [ apppath.basename('.rb').to_s, appname ]
317
+ apppath.basename('.rb').to_s == appname
318
+ end or next
319
+ gemname = disc_gemname
320
+ break
291
321
  end
292
322
  end
293
323
 
294
- configfile = DATADIR + 'bootstrap-config.rb'
295
- runspace = Module.new do
296
- extend Mongrel2::Config::DSL, FileUtils::Verbose
324
+ unless path
325
+ msg = "Couldn't find an app named '#{appname}'"
326
+ msg << " in the #{gemname} gem" if gemname
327
+ raise( msg )
297
328
  end
329
+ self.log.debug " found: %s" % [ path ]
298
330
 
299
- header "Installing admin server config from #{configfile}"
300
- source = configfile.read
301
- runspace.module_eval( source, configfile.to_s, 1 )
302
- end
303
-
304
-
305
- ### Set up the mongrel2 chroot directory for Strelka's adminserver by copying static
306
- ### files, and creating the necessary directories. This depends on the configuration
307
- ### being installed.
308
- def setup_runtime_directory
331
+ return path, appname, gemname
309
332
  end
310
333
 
311
334
 
@@ -9,9 +9,11 @@ class AuthDemo < Strelka::App
9
9
  # The Mongrel2 appid of this app
10
10
  ID = 'auth-demo'
11
11
 
12
- plugins :routing, :auth
12
+ plugin :auth
13
13
  auth_provider :basic
14
14
 
15
+ plugin :routing
16
+
15
17
  ### Handle any (authenticated) HTTP request
16
18
  get do |req|
17
19
  res = req.response
@@ -27,6 +29,4 @@ class AuthDemo < Strelka::App
27
29
 
28
30
  end # class AuthDemo
29
31
 
30
-
31
- Strelka.load_config( 'examples/config.yml' )
32
32
  AuthDemo.run
File without changes
File without changes
data/examples/config.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  mongrel2:
2
- configdb: examples/mongrel2.sqlite
2
+ configdb: amalgalite://examples/mongrel2.sqlite
3
3
 
4
4
  auth:
5
5
  realm: Examples
@@ -13,3 +13,7 @@ sessions:
13
13
  options:
14
14
  cookie-name: "session-demo"
15
15
 
16
+ templates:
17
+ template_paths:
18
+ - examples/templates
19
+
File without changes
File without changes
File without changes
@@ -31,7 +31,7 @@ require 'strelka/authprovider'
31
31
  #
32
32
  # == Applying Authentication
33
33
  #
34
- # The default authentication policy is to require authentification from every
34
+ # The default authentication policy is to require authentication from every
35
35
  # request, but sometimes you may wish to narrow the restrictions a bit.
36
36
  #
37
37
  # === Relaxing \Auth for A Few Methods
@@ -51,7 +51,8 @@ require 'strelka/authprovider'
51
51
  # A String or a Regexp argument will be used to match against the request's
52
52
  # {#app_path}[rdoc-ref:Strelka::HTTPRequest#app_path] (the path of the request
53
53
  # URI with the Mongrel2 route omitted), and any requests which match are sent
54
- # along as-is.
54
+ # along as-is. A String will match the path exactly, with any leading or trailing
55
+ # '/' characters removed, and a Regexp will be tested against the \#app_path as-is.
55
56
  #
56
57
  # If you require some more-complex criteria for determining if the request should
57
58
  # skip the auth plugin, you can provide a block to +no_auth_for+ instead.
@@ -325,10 +326,12 @@ module Strelka::App::Auth
325
326
  "defining both positive and negative auth criteria is unsupported."
326
327
  end
327
328
 
328
- criteria << '' if criteria.empty?
329
+ criteria << nil if criteria.empty?
329
330
  block ||= Proc.new { true }
330
331
 
331
332
  criteria.each do |pattern|
333
+ pattern.gsub!( %r{^/+|/+$}, '' ) if pattern.respond_to?( :gsub! )
334
+ Strelka.log.debug " adding require_auth for %p" % [ pattern ]
332
335
  self.positive_auth_criteria[ pattern ] = block
333
336
  end
334
337
  end
@@ -342,10 +345,12 @@ module Strelka::App::Auth
342
345
  "defining both positive and negative auth criteria is unsupported."
343
346
  end
344
347
 
345
- criteria << '' if criteria.empty?
348
+ criteria << nil if criteria.empty?
346
349
  block ||= Proc.new { true }
347
350
 
348
351
  criteria.each do |pattern|
352
+ pattern.gsub!( %r{^/+|/+$}, '' ) if pattern.respond_to?( :gsub! )
353
+ Strelka.log.debug " adding no_auth for %p" % [ pattern ]
349
354
  self.negative_auth_criteria[ pattern ] = block
350
355
  end
351
356
  end
@@ -382,7 +387,7 @@ module Strelka::App::Auth
382
387
  ### Check authentication and authorization for requests that need it before
383
388
  ### sending them on.
384
389
  def handle_request( request, &block )
385
- self.log.debug "AuthProvider: %p" % [ self.auth_provider ]
390
+ self.log.debug "[:auth] Wrapping request in auth with a %p" % [ self.auth_provider ]
386
391
 
387
392
  self.authenticate_and_authorize( request ) if self.request_should_auth?( request )
388
393
 
@@ -396,7 +401,7 @@ module Strelka::App::Auth
396
401
 
397
402
  ### Returns +true+ if the given +request+ requires authentication.
398
403
  def request_should_auth?( request )
399
- self.log.debug "Checking to see if Auth(entication/orization) should be applied for %s" %
404
+ self.log.debug "Checking to see if Auth(entication/orization) should be applied for app_path: %p" %
400
405
  [ request.app_path ]
401
406
 
402
407
  # If there are positive criteria, return true if the request matches any of them,
@@ -430,6 +435,10 @@ module Strelka::App::Auth
430
435
  ### at least one of them.
431
436
  def request_matches_criteria( request, pattern )
432
437
  case pattern
438
+ when nil
439
+ self.log.debug " no pattern; calling the block"
440
+ return yield( request )
441
+
433
442
  when Regexp
434
443
  self.log.debug " matching app_path with regexp: %p" % [ pattern ]
435
444
  matchdata = pattern.match( request.app_path ) or return false
@@ -437,8 +446,8 @@ module Strelka::App::Auth
437
446
  return yield( request, matchdata )
438
447
 
439
448
  when String
440
- self.log.debug " matching app_path prefix: %p" % [ pattern ]
441
- request.app_path.start_with?( pattern ) or return false
449
+ self.log.debug " matching app_path: %p" % [ pattern ]
450
+ request.app_path.gsub( %r{^/+|/+$}, '' ) == pattern or return false
442
451
  self.log.debug " calling the block"
443
452
  return yield( request )
444
453
 
@@ -475,6 +484,7 @@ module Strelka::App::Auth
475
484
  provider.authorize( credentials, request, &callback )
476
485
  end
477
486
 
487
+
478
488
  end # module Strelka::App::Auth
479
489
 
480
490
 
@@ -113,6 +113,7 @@ module Strelka::App::Errors
113
113
 
114
114
  ### Check for a status response that is hooked, and run the hook if one is found.
115
115
  def handle_request( request )
116
+ self.log.debug "[:errors] Wrapping request in custom error-handling."
116
117
  response = nil
117
118
 
118
119
  # Catch a finish_with; the status_response will only be non-nil
@@ -126,7 +127,7 @@ module Strelka::App::Errors
126
127
  if status_response
127
128
  response = request.response
128
129
  status = status_response[:status]
129
- self.log.info "Handling a status response: %d" % [ status ]
130
+ self.log.info "[:errors] Handling a status response: %d" % [ status ]
130
131
 
131
132
  # If we can't find a custom handler for this status, re-throw
132
133
  # to the default handler instead
@@ -145,7 +146,7 @@ module Strelka::App::Errors
145
146
 
146
147
  ### Find a status handler for the given +status_code+ and return it as an UnboundMethod.
147
148
  def status_handler_for( status_code )
148
- self.log.debug "Looking for a status handler for %d responses" % [ status_code ]
149
+ self.log.debug "[:errors] Looking for a status handler for %d responses" % [ status_code ]
149
150
  handlers = self.class.status_handlers
150
151
  ranges = handlers.keys
151
152
 
@@ -51,6 +51,8 @@ module Strelka::App::Filters
51
51
  ### Apply filters to the given +request+ before yielding back to the App, then apply
52
52
  ### filters to the response that comes back.
53
53
  def handle_request( request )
54
+ self.log.debug "[:filters] Wrapping request with request/response filters."
55
+
54
56
  self.apply_request_filters( request )
55
57
  response = super
56
58
  self.apply_response_filters( response )
@@ -83,6 +83,8 @@ module Strelka::App::Negotiation
83
83
 
84
84
  ### Start content-negotiation when the response has returned.
85
85
  def handle_request( request )
86
+ self.log.debug "[:negotiation] Wrapping response with HTTP content negotiation."
87
+
86
88
  response = super
87
89
  response.negotiate
88
90