roda 3.57.0 → 3.58.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 578868ccd08ba1fa91302273c92176def99072db735ec119d13cbf49e78a7249
4
- data.tar.gz: b95b2a33a18a3b135f494ba7f0ffa1639a5fd876b0b199f414826cab7fa75a9d
3
+ metadata.gz: 01acdb87d6bf21ec4137dd2b6c7e3210c5923c43f188a510135c30a66945160a
4
+ data.tar.gz: e84ddddfbfe23a4be3951c2611f38916cb6dfb60b15c1a6bfd18155869ad4985
5
5
  SHA512:
6
- metadata.gz: 2b7b769a1653315b1fd9bca1a993ff0e699f2a09fb4db135304d8c7473f2c834c61b91e188005ac029fd85feaca6cc6a106efdd83f0e53771cddd8f3a73204aa
7
- data.tar.gz: 7bdc602a54f8f5b34a7edc0355b3e6a426b29dd4671c30ef9d7712c757e116c9e6679cd08884f28c7636a80560878284ff4de479f0c479d905948ebfce9b12b3
6
+ metadata.gz: 1681a1b8b8eb950be113d1a533c545ed0a71c24dc6d027a41d2cddb1ae99e4a2c2d23fc0e4c84d1f2960fd141021684d37d75e8509b247d732203100eae6ab2f
7
+ data.tar.gz: a21456321d0ab6f3c32d4ba97dabd31635751caee7889a2b556dd17cc74fb019d974cc06500081a859402cbf8002a26144d4885dbd8c47589852395d1e398ed2
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ = 3.58.0 (2022-07-13)
2
+
3
+ * Add filter_common_logger plugin for skipping the logging of certain requests when using the common_logger plugin (jeremyevans)
4
+
5
+ * Make exception_page plugin use Exception#detailed_message on Ruby 3.2+ (jeremyevans)
6
+
7
+ * Make heartbeat plugin compatible with recent changes in the rack master branch (jeremyevans)
8
+
1
9
  = 3.57.0 (2022-06-14)
2
10
 
3
11
  * Make static_routing plugin depend on the hash_paths instead of the hash_routes plugin (jeremyevans)
@@ -0,0 +1,16 @@
1
+ = New Features
2
+
3
+ * A filter_common_logger plugin has been added, allowing you to skip
4
+ logging of certain requests in the common_logger plugin. This
5
+ allows you to only log requests for certain paths, or only log
6
+ requests for certain types of responses.
7
+
8
+ = Other Improvements
9
+
10
+ * The heartbeat plugin is now compatible with recent changes in the
11
+ rack master branch (what will be rack 3).
12
+
13
+ * The exception_page plugin will now use Exception#detailed_message
14
+ on Ruby 3.2+, preserving the did_you_mean and error_highlight
15
+ information. Additionally, the display of exception messages
16
+ has been improved.
@@ -127,7 +127,7 @@ div.context ol.context-line li span { float: right; }
127
127
  div.commands { margin-left: 40px; }
128
128
  div.commands a { color:black; text-decoration:none; }
129
129
  #summary { background: #ffc; }
130
- #summary h2 { font-weight: normal; color: #666; }
130
+ #summary h2 { font-weight: normal; color: #666; font-family: monospace; white-space: pre-wrap;}
131
131
  #summary ul#quicklinks { list-style-type: none; margin-bottom: 2em; }
132
132
  #summary ul#quicklinks li { float: left; padding: 0 1em; }
133
133
  #summary ul#quicklinks>li+li { border-left: 1px #666 solid; }
@@ -196,12 +196,13 @@ END
196
196
  # Designed to be used with the +json+ exception, which will
197
197
  # automatically convert the hash to JSON format.
198
198
  def exception_page(exception, opts=OPTS)
199
+ message = exception_page_exception_message(exception)
199
200
  if opts[:json]
200
201
  @_response['Content-Type'] = "application/json"
201
202
  {
202
203
  "exception"=>{
203
204
  "class"=>exception.class.to_s,
204
- "message"=>exception.message.to_s,
205
+ "message"=>message,
205
206
  "backtrace"=>exception.backtrace.map(&:to_s)
206
207
  }
207
208
  }
@@ -319,7 +320,7 @@ END
319
320
 
320
321
  <div id="summary">
321
322
  <h1>#{h exception.class} at #{h r.path}</h1>
322
- <h2>#{h exception.message}</h2>
323
+ <h2>#{h message}</h2>
323
324
  <table><tr>
324
325
  <th>Ruby</th>
325
326
  <td>
@@ -394,7 +395,22 @@ END1
394
395
  END
395
396
  else
396
397
  @_response['Content-Type'] = "text/plain"
397
- "#{exception.class}: #{exception.message}\n#{exception.backtrace.map{|l| "\t#{l}"}.join("\n")}"
398
+ "#{exception.class}: #{message}\n#{exception.backtrace.map{|l| "\t#{l}"}.join("\n")}"
399
+ end
400
+ end
401
+
402
+ private
403
+
404
+ # :nocov:
405
+ if RUBY_VERSION >= '3.2'
406
+ def exception_page_exception_message(exception)
407
+ exception.detailed_message(highlight: false).to_s
408
+ end
409
+ # :nocov:
410
+ else
411
+ # Return message to use for exception.
412
+ def exception_page_exception_message(exception)
413
+ exception.message.to_s
398
414
  end
399
415
  end
400
416
  end
@@ -0,0 +1,46 @@
1
+ # frozen-string-literal: true
2
+
3
+ #
4
+ class Roda
5
+ module RodaPlugins
6
+ # The skip_common_logger plugin allows for skipping common_logger logging
7
+ # of some requests. You pass a block when loading the plugin, and the
8
+ # block will be called before logging each request. The block should return
9
+ # whether the request should be logged.
10
+ #
11
+ # Example:
12
+ #
13
+ # # Only log server errors
14
+ # plugin :filter_common_logger do |result|
15
+ # result[0] >= 500
16
+ # end
17
+ #
18
+ # # Don't log requests to certain paths
19
+ # plugin :filter_common_logger do |_|
20
+ # # Block is called in the same context as the route block
21
+ # !request.path.start_with?('/admin/')
22
+ # end
23
+ module FilterCommonLogger
24
+ def self.load_dependencies(app)
25
+ app.plugin :common_logger
26
+ end
27
+
28
+ def self.configure(app, &block)
29
+ app.send(:define_method, :_common_log_request?, &block)
30
+ app.send(:private, :_common_log_request?)
31
+ app.send(:alias_method, :_common_log_request?, :_common_log_request?)
32
+ end
33
+
34
+ module InstanceMethods
35
+ private
36
+
37
+ # Log request/response information in common log format to logger.
38
+ def _roda_after_90__common_logger(result)
39
+ super if result && _common_log_request?(result)
40
+ end
41
+ end
42
+ end
43
+
44
+ register_plugin(:filter_common_logger, FilterCommonLogger)
45
+ end
46
+ end
@@ -14,13 +14,6 @@ class Roda
14
14
  #
15
15
  # plugin :heartbeat, path: '/status'
16
16
  module Heartbeat
17
- # :nocov:
18
- HEADER_CLASS = (defined?(Rack::Headers) && Rack::Headers.is_a?(Class)) ? Rack::Headers : Hash
19
- # :nocov:
20
- private_constant :HEADER_CLASS
21
-
22
- HEARTBEAT_RESPONSE = [200, {'Content-Type'=>'text/plain'}.freeze, ['OK'.freeze].freeze].freeze
23
-
24
17
  # Set the heartbeat path to the given path.
25
18
  def self.configure(app, opts=OPTS)
26
19
  app.opts[:heartbeat_path] = (opts[:path] || app.opts[:heartbeat_path] || "/heartbeat").dup.freeze
@@ -32,9 +25,11 @@ class Roda
32
25
  # If the request is for a heartbeat path, return the heartbeat response.
33
26
  def _roda_before_20__heartbeat
34
27
  if env['PATH_INFO'] == opts[:heartbeat_path]
35
- response = HEARTBEAT_RESPONSE.dup
36
- response[1] = HEADER_CLASS[response[1]]
37
- throw :halt, response
28
+ response = @_response
29
+ response.status = 200
30
+ response['Content-Type'] = 'text/plain'
31
+ response.write 'OK'
32
+ throw :halt, response.finish
38
33
  end
39
34
  end
40
35
  end
data/lib/roda/version.rb CHANGED
@@ -4,7 +4,7 @@ class Roda
4
4
  RodaMajorVersion = 3
5
5
 
6
6
  # The minor version of Roda, updated for new feature releases of Roda.
7
- RodaMinorVersion = 57
7
+ RodaMinorVersion = 58
8
8
 
9
9
  # The patch version of Roda, updated only for bug fixes from the last
10
10
  # feature release.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: roda
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.57.0
4
+ version: 3.58.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Evans
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-06-14 00:00:00.000000000 Z
11
+ date: 2022-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -229,6 +229,7 @@ extra_rdoc_files:
229
229
  - doc/release_notes/3.55.0.txt
230
230
  - doc/release_notes/3.56.0.txt
231
231
  - doc/release_notes/3.57.0.txt
232
+ - doc/release_notes/3.58.0.txt
232
233
  - doc/release_notes/3.6.0.txt
233
234
  - doc/release_notes/3.7.0.txt
234
235
  - doc/release_notes/3.8.0.txt
@@ -293,6 +294,7 @@ files:
293
294
  - doc/release_notes/3.55.0.txt
294
295
  - doc/release_notes/3.56.0.txt
295
296
  - doc/release_notes/3.57.0.txt
297
+ - doc/release_notes/3.58.0.txt
296
298
  - doc/release_notes/3.6.0.txt
297
299
  - doc/release_notes/3.7.0.txt
298
300
  - doc/release_notes/3.8.0.txt
@@ -336,6 +338,7 @@ files:
336
338
  - lib/roda/plugins/error_handler.rb
337
339
  - lib/roda/plugins/error_mail.rb
338
340
  - lib/roda/plugins/exception_page.rb
341
+ - lib/roda/plugins/filter_common_logger.rb
339
342
  - lib/roda/plugins/flash.rb
340
343
  - lib/roda/plugins/h.rb
341
344
  - lib/roda/plugins/halt.rb