roda 3.4.0 → 3.5.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/MIT-LICENSE +1 -1
- data/README.rdoc +1 -1
- data/doc/release_notes/3.5.0.txt +31 -0
- data/lib/roda/plugins/content_for.rb +4 -4
- data/lib/roda/plugins/public.rb +5 -3
- data/lib/roda/plugins/request_aref.rb +77 -0
- data/lib/roda/version.rb +1 -1
- data/lib/roda.rb +3 -3
- data/spec/plugin/content_for_spec.rb +7 -0
- data/spec/plugin/public_spec.rb +6 -0
- data/spec/plugin/request_aref_spec.rb +51 -0
- data/spec/views/about/_test.css.gz +0 -0
- data/spec/views/about/_test.erb +1 -0
- data/spec/views/about/_test.erb.gz +0 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f0422791db9ddee07b535f5429fd17ae5f312c7e5c7519dfbe0288e1d285919
|
4
|
+
data.tar.gz: 905f19053a3997fc7c3c4e4b942b73cd2400cb59df641cb4a86b23191cab873c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 10aff2c1df661f7cb2699cb3f49bf521587813017ca5cc5c1117c629f04805075e185170305cc012cbbdc2c4ecae59902f73efab1ff39806d3f9548acc918d8b
|
7
|
+
data.tar.gz: d6b70c570f4e198b743ecb4f216f600ad09b8010d6e1df1c202873b843846d1fac3c817dfd848fc7509efc4ba8f41d5907c4273187871ab8293810dc307018e5
|
data/CHANGELOG
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
= 3.5.0 (2018-02-14)
|
2
|
+
|
3
|
+
* Add request_aref plugin for configuring behavior of request [] and []= methods (jeremyevans)
|
4
|
+
|
5
|
+
* Make public plugin not add Content-Type header when serving 304 response for gzipped file (jeremyevans)
|
6
|
+
|
7
|
+
* Make content_for call with block convert block result to string before passing to tilt (jeremyevans) (#135)
|
8
|
+
|
1
9
|
= 3.4.0 (2018-01-12)
|
2
10
|
|
3
11
|
* Add middleware_stack plugin for removing middleware and inserting middleware before the end of the stack (jeremyevans)
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -274,7 +274,7 @@ The +/+ here is considered the empty segment.
|
|
274
274
|
|
275
275
|
=== String
|
276
276
|
|
277
|
-
If a string does not contain a
|
277
|
+
If a string does not contain a slash, it matches a single segment
|
278
278
|
containing the text of the string, preceded by a slash.
|
279
279
|
|
280
280
|
"" # matches "/"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
= New Features
|
2
|
+
|
3
|
+
* A request_aref plugin has been added for configuring the behavior
|
4
|
+
of the [] and []= request methods. These methods are deprecated
|
5
|
+
in the current version of Rack, but Rack will only print a
|
6
|
+
deprecation warning in verbose mode. With this plugin, you can
|
7
|
+
choose to never warn, always warn, or raise an exception:
|
8
|
+
|
9
|
+
# Don't emit a warning, allowing for the historical Rack
|
10
|
+
# behavior
|
11
|
+
plugin :request_aref, :allow
|
12
|
+
|
13
|
+
# Always emit a warning when the method is called
|
14
|
+
plugin :request_aref, :warn
|
15
|
+
|
16
|
+
# Raise an exception if the method is called
|
17
|
+
plugin :request_aref, :raise
|
18
|
+
|
19
|
+
= Other Improvements
|
20
|
+
|
21
|
+
* When using the content_for plugin and calling content_for with a
|
22
|
+
block, convert the result of the block to a string before passing
|
23
|
+
the result to Tilt. This can fix issues when the template class
|
24
|
+
that Tilt uses does not handle non-String input.
|
25
|
+
|
26
|
+
* When using the public plugin with the :gzip option, do not add the
|
27
|
+
Content-Type or Content-Encoding headers if a 304 response is
|
28
|
+
returned.
|
29
|
+
|
30
|
+
* Add the spec/views/about directory to the gem, allowing the specs
|
31
|
+
to run correctly using just the files in the gem.
|
@@ -52,17 +52,17 @@ class Roda
|
|
52
52
|
# under the given key. If called without a block, retrieve
|
53
53
|
# stored content with the given key, or return nil if there
|
54
54
|
# is no content stored with that key.
|
55
|
-
def content_for(key, value=nil
|
55
|
+
def content_for(key, value=nil)
|
56
56
|
append = opts[:append_content_for]
|
57
57
|
|
58
|
-
if
|
59
|
-
if
|
58
|
+
if block_given? || value
|
59
|
+
if block_given?
|
60
60
|
outvar = render_opts[:template_opts][:outvar]
|
61
61
|
buf_was = instance_variable_get(outvar)
|
62
62
|
|
63
63
|
# Use temporary output buffer for ERB-based rendering systems
|
64
64
|
instance_variable_set(outvar, String.new)
|
65
|
-
value = Tilt[render_opts[:engine]].new
|
65
|
+
value = Tilt[render_opts[:engine]].new{yield.to_s}.render
|
66
66
|
instance_variable_set(outvar, buf_was)
|
67
67
|
end
|
68
68
|
|
data/lib/roda/plugins/public.rb
CHANGED
@@ -72,10 +72,12 @@ class Roda
|
|
72
72
|
res = public_serve(server, gzip_path)
|
73
73
|
headers = res[1]
|
74
74
|
|
75
|
-
|
76
|
-
|
75
|
+
unless res[0] == 304
|
76
|
+
if mime_type = ::Rack::Mime.mime_type(::File.extname(path), 'text/plain')
|
77
|
+
headers['Content-Type'] = mime_type
|
78
|
+
end
|
79
|
+
headers['Content-Encoding'] = 'gzip'
|
77
80
|
end
|
78
|
-
headers['Content-Encoding'] = 'gzip'
|
79
81
|
|
80
82
|
halt res
|
81
83
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen-string-literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
class Roda
|
5
|
+
module RodaPlugins
|
6
|
+
# The request_aref plugin allows for custom handling of the r[] and r[]=
|
7
|
+
# methods (where r is the Request instance). In the current version of
|
8
|
+
# rack, these methods are deprecated, but the deprecation message is only
|
9
|
+
# printed in verbose mode. This plugin can allow for handling calls to
|
10
|
+
# these methods in one of three ways:
|
11
|
+
#
|
12
|
+
# :allow :: Allow the method calls without a deprecation, which is the
|
13
|
+
# historical behavior
|
14
|
+
# :warn :: Always issue a deprecation message by calling +warn+, not just
|
15
|
+
# in verbose mode.
|
16
|
+
# :raise :: Raise an error if either method is called
|
17
|
+
module RequestAref
|
18
|
+
# Make #[] and #[]= methods work as configured by aliasing the appropriate
|
19
|
+
# request_a(ref|set)_* methods to them.
|
20
|
+
def self.configure(app, setting)
|
21
|
+
case setting
|
22
|
+
when :allow, :raise, :warn
|
23
|
+
app::RodaRequest.class_eval do
|
24
|
+
alias_method(:[], :"request_aref_#{setting}")
|
25
|
+
alias_method(:[]=, :"request_aset_#{setting}")
|
26
|
+
public :[], :[]=
|
27
|
+
end
|
28
|
+
else
|
29
|
+
raise RodaError, "Unsupport request_aref plugin setting: #{setting.inspect}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Exception class raised when #[] or #[]= are called when the
|
34
|
+
# :raise setting is used.
|
35
|
+
class Error < RodaError
|
36
|
+
end
|
37
|
+
|
38
|
+
module RequestMethods
|
39
|
+
private
|
40
|
+
|
41
|
+
# Allow #[] calls
|
42
|
+
def request_aref_allow(k)
|
43
|
+
params[k.to_s]
|
44
|
+
end
|
45
|
+
|
46
|
+
# Always warn on #[] calls
|
47
|
+
def request_aref_warn(k)
|
48
|
+
warn("#{self.class}#[] is deprecated, use #params.[] instead")
|
49
|
+
params[k.to_s]
|
50
|
+
end
|
51
|
+
|
52
|
+
# Raise error on #[] calls
|
53
|
+
def request_aref_raise(k)
|
54
|
+
raise Error, "#{self.class}#[] has been removed, use #params.[] instead"
|
55
|
+
end
|
56
|
+
|
57
|
+
# Allow #[]= calls
|
58
|
+
def request_aset_allow(k, v)
|
59
|
+
params[k.to_s] = v
|
60
|
+
end
|
61
|
+
|
62
|
+
# Always warn on #[]= calls
|
63
|
+
def request_aset_warn(k, v)
|
64
|
+
warn("#{self.class}#[]= is deprecated, use #params.[]= instead")
|
65
|
+
params[k.to_s] = v
|
66
|
+
end
|
67
|
+
|
68
|
+
# Raise error on #[]= calls
|
69
|
+
def request_aset_raise(k, v)
|
70
|
+
raise Error, "#{self.class}#[]= has been removed, use #params.[]= instead"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
register_plugin(:request_aref, RequestAref)
|
76
|
+
end
|
77
|
+
end
|
data/lib/roda/version.rb
CHANGED
data/lib/roda.rb
CHANGED
@@ -722,9 +722,9 @@ class Roda
|
|
722
722
|
consume(self.class.cached_matcher(re){re})
|
723
723
|
end
|
724
724
|
|
725
|
-
# Match the given string to the request path.
|
726
|
-
#
|
727
|
-
#
|
725
|
+
# Match the given string to the request path. Matches only if the
|
726
|
+
# request path ends with the string or if the next character in the
|
727
|
+
# request path is a slash (indicating a new segment).
|
728
728
|
def _match_string(str)
|
729
729
|
rp = @remaining_path
|
730
730
|
if rp.start_with?("/#{str}")
|
@@ -21,6 +21,9 @@ describe "content_for plugin with erb" do
|
|
21
21
|
r.get 'b' do
|
22
22
|
view(:inline => '<% content_for(:foo, "foo") %>bar', :layout => { :inline => '<%= yield %> <%= content_for(:foo) %>' })
|
23
23
|
end
|
24
|
+
r.get 'e' do
|
25
|
+
view(:inline => 'a<% content_for :foo do %><% end %>b', :layout => { :inline => 'c<%= yield %>d<%= content_for(:foo) %>e' })
|
26
|
+
end
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
@@ -36,6 +39,10 @@ describe "content_for plugin with erb" do
|
|
36
39
|
it "should work if a raw string is set" do
|
37
40
|
body('/b').strip.must_equal "bar foo"
|
38
41
|
end
|
42
|
+
|
43
|
+
it "should work for an empty content_for" do
|
44
|
+
body('/e').strip.must_equal "cabde"
|
45
|
+
end
|
39
46
|
end
|
40
47
|
|
41
48
|
describe "content_for plugin with multiple calls to the same key" do
|
data/spec/plugin/public_spec.rb
CHANGED
@@ -75,5 +75,11 @@ describe "public plugin" do
|
|
75
75
|
h = req('/about/_test.css', 'HTTP_ACCEPT_ENCODING'=>'deflate, gzip')[1]
|
76
76
|
h['Content-Encoding'].must_equal 'gzip'
|
77
77
|
h['Content-Type'].must_equal 'text/css'
|
78
|
+
|
79
|
+
s, h, b = req('/about/_test.css', 'HTTP_IF_MODIFIED_SINCE'=>h["Last-Modified"], 'HTTP_ACCEPT_ENCODING'=>'deflate, gzip')
|
80
|
+
s.must_equal 304
|
81
|
+
h['Content-Encoding'].must_be_nil
|
82
|
+
h['Content-Type'].must_be_nil
|
83
|
+
b.must_equal []
|
78
84
|
end
|
79
85
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
|
3
|
+
describe "request_aref plugin" do
|
4
|
+
def request_aref_app(value)
|
5
|
+
warning = @warning = String.new('')
|
6
|
+
app(:bare) do
|
7
|
+
plugin :request_aref, value
|
8
|
+
self::RodaRequest.send(:define_method, :warn){|s| warning.replace(s)}
|
9
|
+
route do |r|
|
10
|
+
r.get('set'){r['b'] = 'c'; r.params['b']}
|
11
|
+
r['a']
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def aref_body
|
17
|
+
body("QUERY_STRING" => 'a=d', 'rack.input'=>StringIO.new)
|
18
|
+
end
|
19
|
+
|
20
|
+
def aset_body
|
21
|
+
body('/set', "QUERY_STRING" => 'a=d', 'rack.input'=>StringIO.new)
|
22
|
+
end
|
23
|
+
|
24
|
+
it "allows if given the :allow option" do
|
25
|
+
request_aref_app(:allow)
|
26
|
+
aref_body.must_equal 'd'
|
27
|
+
@warning.must_equal ''
|
28
|
+
aset_body.must_equal 'c'
|
29
|
+
@warning.must_equal ''
|
30
|
+
end
|
31
|
+
|
32
|
+
it "warns if given the :warn option" do
|
33
|
+
request_aref_app(:warn)
|
34
|
+
aref_body.must_equal 'd'
|
35
|
+
@warning.must_include('#[] is deprecated, use #params.[] instead')
|
36
|
+
aset_body.must_equal 'c'
|
37
|
+
@warning.must_include('#[]= is deprecated, use #params.[]= instead')
|
38
|
+
end
|
39
|
+
|
40
|
+
it "raises if given the :raise option" do
|
41
|
+
request_aref_app(:raise)
|
42
|
+
proc{aref_body}.must_raise Roda::RodaPlugins::RequestAref::Error
|
43
|
+
@warning.must_equal ''
|
44
|
+
proc{aset_body}.must_raise Roda::RodaPlugins::RequestAref::Error
|
45
|
+
@warning.must_equal ''
|
46
|
+
end
|
47
|
+
|
48
|
+
it "raises when loading plugin if given other option" do
|
49
|
+
proc{request_aref_app(:r)}.must_raise Roda::RodaError
|
50
|
+
end
|
51
|
+
end
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Subdir: <%= title %></h1>
|
Binary file
|
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.5.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: 2018-
|
11
|
+
date: 2018-02-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -200,6 +200,7 @@ extra_rdoc_files:
|
|
200
200
|
- doc/release_notes/3.2.0.txt
|
201
201
|
- doc/release_notes/3.3.0.txt
|
202
202
|
- doc/release_notes/3.4.0.txt
|
203
|
+
- doc/release_notes/3.5.0.txt
|
203
204
|
files:
|
204
205
|
- CHANGELOG
|
205
206
|
- MIT-LICENSE
|
@@ -246,6 +247,7 @@ files:
|
|
246
247
|
- doc/release_notes/3.2.0.txt
|
247
248
|
- doc/release_notes/3.3.0.txt
|
248
249
|
- doc/release_notes/3.4.0.txt
|
250
|
+
- doc/release_notes/3.5.0.txt
|
249
251
|
- lib/roda.rb
|
250
252
|
- lib/roda/plugins/_symbol_regexp_matchers.rb
|
251
253
|
- lib/roda/plugins/all_verbs.rb
|
@@ -309,6 +311,7 @@ files:
|
|
309
311
|
- lib/roda/plugins/render.rb
|
310
312
|
- lib/roda/plugins/render_each.rb
|
311
313
|
- lib/roda/plugins/render_locals.rb
|
314
|
+
- lib/roda/plugins/request_aref.rb
|
312
315
|
- lib/roda/plugins/request_headers.rb
|
313
316
|
- lib/roda/plugins/response_request.rb
|
314
317
|
- lib/roda/plugins/run_append_slash.rb
|
@@ -403,6 +406,7 @@ files:
|
|
403
406
|
- spec/plugin/render_each_spec.rb
|
404
407
|
- spec/plugin/render_locals_spec.rb
|
405
408
|
- spec/plugin/render_spec.rb
|
409
|
+
- spec/plugin/request_aref_spec.rb
|
406
410
|
- spec/plugin/request_headers_spec.rb
|
407
411
|
- spec/plugin/response_request_spec.rb
|
408
412
|
- spec/plugin/run_append_slash_spec.rb
|
@@ -435,6 +439,9 @@ files:
|
|
435
439
|
- spec/views/a.erb
|
436
440
|
- spec/views/about.erb
|
437
441
|
- spec/views/about.str
|
442
|
+
- spec/views/about/_test.css.gz
|
443
|
+
- spec/views/about/_test.erb
|
444
|
+
- spec/views/about/_test.erb.gz
|
438
445
|
- spec/views/b.erb
|
439
446
|
- spec/views/c.erb
|
440
447
|
- spec/views/content-yield.erb
|