roda 3.33.0 → 3.34.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +8 -0
- data/doc/release_notes/3.34.0.txt +17 -0
- data/lib/roda/plugins/all_verbs.rb +2 -0
- data/lib/roda/plugins/backtracking_array.rb +1 -3
- data/lib/roda/plugins/class_level_routing.rb +0 -1
- data/lib/roda/plugins/disallow_file_uploads.rb +2 -0
- data/lib/roda/plugins/exception_page.rb +15 -5
- data/lib/roda/plugins/match_affix.rb +1 -1
- data/lib/roda/plugins/not_allowed.rb +2 -0
- data/lib/roda/plugins/public.rb +1 -3
- data/lib/roda/plugins/render.rb +4 -0
- data/lib/roda/plugins/render_locals.rb +2 -0
- data/lib/roda/plugins/sinatra_helpers.rb +4 -4
- data/lib/roda/plugins/typecast_params.rb +4 -6
- data/lib/roda/plugins/view_options.rb +2 -0
- data/lib/roda/request.rb +2 -4
- data/lib/roda/version.rb +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ea0324d5667f9dcde48ff8fd1025b15e0e06861eea776019c0be9be8c46b097
|
4
|
+
data.tar.gz: 1712241233e21e7863101192227797976a79f6a3f0895da907a9e2b19242e1ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b8d1b37ed94ee40c0b1f12cc20ab9f734b276805044b059c9ea10375cc64d7d2cc8b0b36049bd21e29d3e45eeefcc8aeaffe0b4bbaf2d36043c16838270e2eb
|
7
|
+
data.tar.gz: 1670e3cde892c8cd42e2856d4e938e6da359d0818ee09f7c28e8ec5f4bc4bd627f3aaa8c48aeac8f6d03ab80994078a5cbce69d99595214f288eb9ab1f860c23
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
= 3.34.0 (2020-07-14)
|
2
|
+
|
3
|
+
* Remove unnecessary conditionals (jeremyevans)
|
4
|
+
|
5
|
+
* Allow loading the match_affix plugin with a single argument (jeremyevans)
|
6
|
+
|
7
|
+
* Do not include pre/post context sections if empty in the exception_page plugin (jeremyevans)
|
8
|
+
|
1
9
|
= 3.33.0 (2020-06-16)
|
2
10
|
|
3
11
|
* Add :brotli option to public plugin to supplement it to serve brotli-compressed files like :gzip does for gzipped files (hmdne) (#194)
|
@@ -0,0 +1,17 @@
|
|
1
|
+
= Improvements
|
2
|
+
|
3
|
+
* Multiple unneeded conditionals have been removed.
|
4
|
+
|
5
|
+
* pre_content and post_context sections in backtraces are no longer
|
6
|
+
included in the exception_page plugin output if they would be
|
7
|
+
empty.
|
8
|
+
|
9
|
+
* The match_affix plugin can be loaded again with a single argument.
|
10
|
+
It was originally designed to accept a single argument, but a bug
|
11
|
+
introduced in 2.29.0 made it require two arguments.
|
12
|
+
|
13
|
+
* Core Roda and all plugins that ship with Roda now have 100% branch
|
14
|
+
coverage.
|
15
|
+
|
16
|
+
* The sinatra_helpers plugin no longer emits statement not reached
|
17
|
+
warnings in verbose mode.
|
@@ -34,7 +34,9 @@ class Roda
|
|
34
34
|
module AllVerbs
|
35
35
|
module RequestMethods
|
36
36
|
%w'delete head options link patch put trace unlink'.each do |verb|
|
37
|
+
# :nocov:
|
37
38
|
if ::Rack::Request.method_defined?("#{verb}?")
|
39
|
+
# :nocov:
|
38
40
|
class_eval(<<-END, __FILE__, __LINE__+1)
|
39
41
|
def #{verb}(*args, &block)
|
40
42
|
_verb(args, &block) if #{verb}?
|
@@ -33,9 +33,7 @@ class Roda
|
|
33
33
|
# elements. If the remaining elements could not be
|
34
34
|
# matched, reset the state and continue to the next
|
35
35
|
# entry in the array.
|
36
|
-
def _match_array(arg, rest
|
37
|
-
return super unless rest
|
38
|
-
|
36
|
+
def _match_array(arg, rest)
|
39
37
|
path = @remaining_path
|
40
38
|
captures = @captures
|
41
39
|
caps = captures.dup
|
@@ -252,11 +252,21 @@ END
|
|
252
252
|
begin
|
253
253
|
lineno -= 1
|
254
254
|
lines = ::File.readlines(filename)
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
255
|
+
if line = lines[lineno]
|
256
|
+
pre_lineno = [lineno-context, 0].max
|
257
|
+
if (pre_context = lines[pre_lineno...lineno]) && !pre_context.empty?
|
258
|
+
frame[:pre_context_lineno] = pre_lineno
|
259
|
+
frame[:pre_context] = pre_context
|
260
|
+
end
|
261
|
+
|
262
|
+
post_lineno = [lineno+context, lines.size].min
|
263
|
+
if (post_context = lines[lineno+1..post_lineno]) && !post_context.empty?
|
264
|
+
frame[:post_context_lineno] = post_lineno
|
265
|
+
frame[:post_context] = post_context
|
266
|
+
end
|
267
|
+
|
268
|
+
frame[:context_line] = line.chomp
|
269
|
+
end
|
260
270
|
rescue
|
261
271
|
end
|
262
272
|
|
@@ -28,7 +28,7 @@ class Roda
|
|
28
28
|
#
|
29
29
|
# This plugin automatically loads the placeholder_string_matchers plugin.
|
30
30
|
module MatchAffix
|
31
|
-
def self.load_dependencies(app, _prefix, _suffix)
|
31
|
+
def self.load_dependencies(app, _prefix, _suffix=nil)
|
32
32
|
app.plugin :placeholder_string_matchers
|
33
33
|
end
|
34
34
|
|
@@ -104,7 +104,9 @@ class Roda
|
|
104
104
|
# arguments, record the verb used. If given an argument, add an is
|
105
105
|
# check with the arguments.
|
106
106
|
%w'get post delete head options link patch put trace unlink'.each do |verb|
|
107
|
+
# :nocov:
|
107
108
|
if ::Rack::Request.method_defined?("#{verb}?")
|
109
|
+
# :nocov:
|
108
110
|
class_eval(<<-END, __FILE__, __LINE__+1)
|
109
111
|
def #{verb}(*args, &block)
|
110
112
|
if (empty = args.empty?) && @_is_verbs
|
data/lib/roda/plugins/public.rb
CHANGED
@@ -110,9 +110,7 @@ class Roda
|
|
110
110
|
headers = res[1]
|
111
111
|
|
112
112
|
unless res[0] == 304
|
113
|
-
|
114
|
-
headers['Content-Type'] = mime_type
|
115
|
-
end
|
113
|
+
headers['Content-Type'] = ::Rack::Mime.mime_type(::File.extname(path), 'text/plain')
|
116
114
|
headers['Content-Encoding'] = encoding
|
117
115
|
end
|
118
116
|
|
data/lib/roda/plugins/render.rb
CHANGED
@@ -287,7 +287,9 @@ class Roda
|
|
287
287
|
false
|
288
288
|
end
|
289
289
|
|
290
|
+
# :nocov:
|
290
291
|
if COMPILED_METHOD_SUPPORT
|
292
|
+
# :nocov:
|
291
293
|
# Compile a method in the given module with the given name that will
|
292
294
|
# call the compiled template method, updating the compiled template method
|
293
295
|
def define_compiled_method(roda_class, method_name, locals_keys=EMPTY_ARRAY)
|
@@ -337,7 +339,9 @@ class Roda
|
|
337
339
|
def inherited(subclass)
|
338
340
|
super
|
339
341
|
opts = subclass.opts[:render] = subclass.opts[:render].dup
|
342
|
+
# :nocov:
|
340
343
|
if COMPILED_METHOD_SUPPORT
|
344
|
+
# :nocov:
|
341
345
|
opts[:template_method_cache] = (opts[:cache_class] || RodaCache).new
|
342
346
|
end
|
343
347
|
opts[:cache] = opts[:cache].dup
|
@@ -43,7 +43,9 @@ class Roda
|
|
43
43
|
module InstanceMethods
|
44
44
|
private
|
45
45
|
|
46
|
+
# :nocov:
|
46
47
|
if Render::COMPILED_METHOD_SUPPORT
|
48
|
+
# :nocov:
|
47
49
|
# Disable use of cached templates, since it assumes a render/view call with no
|
48
50
|
# options will have no locals.
|
49
51
|
def _cached_template_method(template)
|
@@ -374,7 +374,7 @@ class Roda
|
|
374
374
|
|
375
375
|
module ResponseMethods
|
376
376
|
# Set or retrieve the response status code.
|
377
|
-
def status(value = (return @status
|
377
|
+
def status(value = nil || (return @status))
|
378
378
|
@status = value
|
379
379
|
end
|
380
380
|
|
@@ -401,7 +401,7 @@ class Roda
|
|
401
401
|
|
402
402
|
# Set multiple response headers with Hash, or return the headers if no
|
403
403
|
# argument is given.
|
404
|
-
def headers(hash = (return @headers
|
404
|
+
def headers(hash = nil || (return @headers))
|
405
405
|
@headers.merge!(hash)
|
406
406
|
end
|
407
407
|
|
@@ -412,7 +412,7 @@ class Roda
|
|
412
412
|
|
413
413
|
# Set the Content-Type of the response body given a media type or file
|
414
414
|
# extension. See plugin documentation for options.
|
415
|
-
def content_type(type = (return @headers["Content-Type"]
|
415
|
+
def content_type(type = nil || (return @headers["Content-Type"]), opts = OPTS)
|
416
416
|
unless (mime_type = mime_type(type) || opts[:default])
|
417
417
|
raise RodaError, "Unknown media type: #{type}"
|
418
418
|
end
|
@@ -478,7 +478,7 @@ class Roda
|
|
478
478
|
# If a type and value are given, set the value in Rack's MIME registry.
|
479
479
|
# If only a type is given, lookup the type in Rack's MIME registry and
|
480
480
|
# return it.
|
481
|
-
def mime_type(type=(return
|
481
|
+
def mime_type(type=nil || (return), value = nil)
|
482
482
|
return type.to_s if type.to_s.include?('/')
|
483
483
|
type = ".#{type}" unless type.to_s[0] == ?.
|
484
484
|
if value
|
@@ -742,9 +742,7 @@ class Roda
|
|
742
742
|
return
|
743
743
|
end
|
744
744
|
|
745
|
-
|
746
|
-
v.subkey(keys, do_raise)
|
747
|
-
end
|
745
|
+
self[key].subkey(keys, do_raise)
|
748
746
|
rescue => e
|
749
747
|
handle_error(key, reason, e)
|
750
748
|
end
|
@@ -808,10 +806,10 @@ class Roda
|
|
808
806
|
@nested_params = nil
|
809
807
|
|
810
808
|
if capturing_started
|
811
|
-
# Unset capturing if capturing was
|
809
|
+
# Unset capturing if capturing was already started.
|
812
810
|
@capture = nil
|
813
811
|
else
|
814
|
-
# If capturing was already started, update cached nested params
|
812
|
+
# If capturing was not already started, update cached nested params
|
815
813
|
# before resetting symbolize setting.
|
816
814
|
@nested_params = nested_params
|
817
815
|
end
|
@@ -878,7 +876,7 @@ class Roda
|
|
878
876
|
def handle_error(key, reason, e, do_raise=false)
|
879
877
|
case e
|
880
878
|
when String
|
881
|
-
handle_error(key, reason, Error.new(e), do_raise
|
879
|
+
handle_error(key, reason, Error.new(e), do_raise)
|
882
880
|
when Error, ArgumentError
|
883
881
|
if @capture && (le = @capture.last) && le == e
|
884
882
|
raise e if do_raise
|
@@ -126,7 +126,9 @@ class Roda
|
|
126
126
|
|
127
127
|
private
|
128
128
|
|
129
|
+
# :nocov:
|
129
130
|
if Render::COMPILED_METHOD_SUPPORT
|
131
|
+
# :nocov:
|
130
132
|
# Return nil if using custom view or layout options.
|
131
133
|
# If using a view subdir, prefix the template key with the subdir.
|
132
134
|
def _cached_template_method_key(template)
|
data/lib/roda/request.rb
CHANGED
@@ -466,10 +466,8 @@ class Roda
|
|
466
466
|
rp = @remaining_path
|
467
467
|
if rp.getbyte(0) == 47
|
468
468
|
if last = rp.index('/', 1)
|
469
|
-
|
470
|
-
|
471
|
-
@remaining_path = rp[last, rp.length]
|
472
|
-
end
|
469
|
+
@captures << rp[1, last-1]
|
470
|
+
@remaining_path = rp[last, rp.length]
|
473
471
|
elsif rp.length > 1
|
474
472
|
@captures << rp[1,rp.length]
|
475
473
|
@remaining_path = ""
|
data/lib/roda/version.rb
CHANGED
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.
|
4
|
+
version: 3.34.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: 2020-
|
11
|
+
date: 2020-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -209,6 +209,7 @@ extra_rdoc_files:
|
|
209
209
|
- doc/release_notes/3.31.0.txt
|
210
210
|
- doc/release_notes/3.32.0.txt
|
211
211
|
- doc/release_notes/3.33.0.txt
|
212
|
+
- doc/release_notes/3.34.0.txt
|
212
213
|
files:
|
213
214
|
- CHANGELOG
|
214
215
|
- MIT-LICENSE
|
@@ -243,6 +244,7 @@ files:
|
|
243
244
|
- doc/release_notes/3.31.0.txt
|
244
245
|
- doc/release_notes/3.32.0.txt
|
245
246
|
- doc/release_notes/3.33.0.txt
|
247
|
+
- doc/release_notes/3.34.0.txt
|
246
248
|
- doc/release_notes/3.4.0.txt
|
247
249
|
- doc/release_notes/3.5.0.txt
|
248
250
|
- doc/release_notes/3.6.0.txt
|