dry-view 0.5.2 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +13 -0
- data/lib/dry/view/controller.rb +5 -1
- data/lib/dry/view/part.rb +6 -0
- data/lib/dry/view/renderer.rb +5 -5
- data/lib/dry/view/version.rb +1 -1
- data/spec/fixtures/templates/controller_renderer_options.html.erb +3 -0
- data/spec/unit/controller_spec.rb +46 -0
- data/spec/unit/part_spec.rb +14 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c234898af572e4ebd4b6717f0ba9519f2b4feda8a6d7b2133c00ee8cea2ac7a
|
4
|
+
data.tar.gz: 6f086379dad341a18fbf4f68b3b6edde81cdcdf30e38c859aa5ba86556c56ae7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0af32817c536bd8beeb57d63e856aeb49400579ab084a586c7d8fcdad32052d91244cf4a450a5b10243915fa652140d3389fccbd2421a04d2479767d515e5bb5
|
7
|
+
data.tar.gz: e6dbf82b4d90b57751a74047ffa8d9cda75986bb468a42553ab150f8c9f12458662329f0be859bc1701ce6d39e3ee1ee523abcc23d0ce928ccba106e3b9593f3
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 0.5.3 / 2018-10-22
|
2
|
+
|
3
|
+
### Added
|
4
|
+
|
5
|
+
- `renderer_options` setting for configuring tilt-based renderer (liseki in [#62][pr62])
|
6
|
+
|
7
|
+
### Changed
|
8
|
+
|
9
|
+
- Part objects wrap values more transparently, via added `#respond_to_missing?` (liseki in [#63][pr63])
|
10
|
+
|
11
|
+
[pr62]: https://github.com/dry-rb/dry-view/pull/62
|
12
|
+
[pr63]: https://github.com/dry-rb/dry-view/pull/63
|
13
|
+
|
1
14
|
# 0.5.2 / 2018-06-13
|
2
15
|
|
3
16
|
### Changed
|
data/lib/dry/view/controller.rb
CHANGED
@@ -14,6 +14,7 @@ module Dry
|
|
14
14
|
|
15
15
|
DEFAULT_LAYOUTS_DIR = 'layouts'.freeze
|
16
16
|
DEFAULT_CONTEXT = Object.new.freeze
|
17
|
+
DEFAULT_RENDERER_OPTIONS = {default_encoding: 'utf-8'.freeze}.freeze
|
17
18
|
EMPTY_LOCALS = {}.freeze
|
18
19
|
|
19
20
|
include Dry::Equalizer(:config)
|
@@ -24,6 +25,9 @@ module Dry
|
|
24
25
|
setting :layout, false
|
25
26
|
setting :template
|
26
27
|
setting :default_format, :html
|
28
|
+
setting :renderer_options, DEFAULT_RENDERER_OPTIONS do |options|
|
29
|
+
DEFAULT_RENDERER_OPTIONS.merge(options.to_h).freeze
|
30
|
+
end
|
27
31
|
setting :context, DEFAULT_CONTEXT
|
28
32
|
setting :decorator, Decorator.new
|
29
33
|
|
@@ -49,7 +53,7 @@ module Dry
|
|
49
53
|
# @api private
|
50
54
|
def self.renderer(format)
|
51
55
|
renderers.fetch(format) {
|
52
|
-
renderers[format] = Renderer.new(paths, format: format)
|
56
|
+
renderers[format] = Renderer.new(paths, format: format, **config.renderer_options)
|
53
57
|
}
|
54
58
|
end
|
55
59
|
|
data/lib/dry/view/part.rb
CHANGED
@@ -80,6 +80,12 @@ module Dry
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
+
def respond_to_missing?(name, include_private = false)
|
84
|
+
d = self.class.decorated_attributes
|
85
|
+
c = CONVENIENCE_METHODS
|
86
|
+
d.key?(name) || c.include?(name) || _value.respond_to?(name, include_private) || super
|
87
|
+
end
|
88
|
+
|
83
89
|
def _render_scope(name, **locals)
|
84
90
|
Scope.new(
|
85
91
|
locals: locals.merge(name => self),
|
data/lib/dry/view/renderer.rb
CHANGED
@@ -7,19 +7,20 @@ module Dry
|
|
7
7
|
PARTIAL_PREFIX = "_".freeze
|
8
8
|
PATH_DELIMITER = "/".freeze
|
9
9
|
|
10
|
-
include Dry::Equalizer(:paths, :format)
|
10
|
+
include Dry::Equalizer(:paths, :format, :options)
|
11
11
|
|
12
12
|
TemplateNotFoundError = Class.new(StandardError)
|
13
13
|
|
14
|
-
attr_reader :paths, :format, :
|
14
|
+
attr_reader :paths, :format, :options, :tilts
|
15
15
|
|
16
16
|
def self.tilts
|
17
17
|
@__engines__ ||= {}
|
18
18
|
end
|
19
19
|
|
20
|
-
def initialize(paths, format
|
20
|
+
def initialize(paths, format:, **options)
|
21
21
|
@paths = paths
|
22
22
|
@format = format
|
23
|
+
@options = options
|
23
24
|
@tilts = self.class.tilts
|
24
25
|
end
|
25
26
|
|
@@ -61,10 +62,9 @@ module Dry
|
|
61
62
|
partial_name = name_segments[0..-2].push("#{PARTIAL_PREFIX}#{name_segments[-1]}").join(PATH_DELIMITER)
|
62
63
|
end
|
63
64
|
|
64
|
-
# TODO: make default_encoding configurable
|
65
65
|
def tilt(path)
|
66
66
|
tilts.fetch(path) {
|
67
|
-
tilts[path] = Tilt.new(path, nil,
|
67
|
+
tilts[path] = Tilt.new(path, nil, **options)
|
68
68
|
}
|
69
69
|
end
|
70
70
|
end
|
data/lib/dry/view/version.rb
CHANGED
@@ -34,4 +34,50 @@ RSpec.describe Dry::View::Controller do
|
|
34
34
|
expect { controller.(options) }.to raise_error Dry::View::Controller::UndefinedTemplateError
|
35
35
|
end
|
36
36
|
end
|
37
|
+
|
38
|
+
describe 'renderer options' do
|
39
|
+
subject(:controller) {
|
40
|
+
Class.new(Dry::View::Controller) do
|
41
|
+
configure do |config|
|
42
|
+
config.paths = SPEC_ROOT.join('fixtures/templates')
|
43
|
+
config.template = 'controller_renderer_options'
|
44
|
+
config.renderer_options = {
|
45
|
+
outvar: '@__buf__'
|
46
|
+
}
|
47
|
+
end
|
48
|
+
end.new
|
49
|
+
}
|
50
|
+
|
51
|
+
subject(:context) {
|
52
|
+
Class.new do
|
53
|
+
def self.form(action:, &blk)
|
54
|
+
new(action, &blk)
|
55
|
+
end
|
56
|
+
|
57
|
+
def initialize(action, &blk)
|
58
|
+
@buf = eval('@__buf__', blk.binding)
|
59
|
+
|
60
|
+
@buf << "<form action=\"#{action}\" method=\"post\">"
|
61
|
+
blk.(self)
|
62
|
+
@buf << '</form>'
|
63
|
+
end
|
64
|
+
|
65
|
+
def text(name)
|
66
|
+
"<input type=\"text\" name=\"#{name}\" />"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
}
|
70
|
+
|
71
|
+
it 'uses default encoding' do
|
72
|
+
klass = Class.new(Dry::View::Controller)
|
73
|
+
expect(klass.config.renderer_options).to be_a Hash
|
74
|
+
expect(klass.config.renderer_options[:default_encoding]).to eql 'utf-8'
|
75
|
+
end
|
76
|
+
|
77
|
+
it 'are passed to renderer' do
|
78
|
+
expect(controller.(context: context)).to eql(
|
79
|
+
'<form action="/people" method="post"><input type="text" name="name" /></form>'
|
80
|
+
)
|
81
|
+
end
|
82
|
+
end
|
37
83
|
end
|
data/spec/unit/part_spec.rb
CHANGED
@@ -68,6 +68,20 @@ RSpec.describe Dry::View::Part do
|
|
68
68
|
expect { part.farewell }.to raise_error(NoMethodError)
|
69
69
|
end
|
70
70
|
end
|
71
|
+
|
72
|
+
describe '#respond_to_missing?' do
|
73
|
+
let(:value) { double(greeting: 'hello from value') }
|
74
|
+
|
75
|
+
it 'handles convenience methods' do
|
76
|
+
expect(part).to respond_to(:context)
|
77
|
+
expect(part).to respond_to(:render)
|
78
|
+
expect(part).to respond_to(:value)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'handles value methods' do
|
82
|
+
expect(part).to respond_to(:greeting)
|
83
|
+
end
|
84
|
+
end
|
71
85
|
end
|
72
86
|
|
73
87
|
context 'without a renderer' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Piotr Solnica
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-10-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: tilt
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/dry/view/scope.rb
|
144
144
|
- lib/dry/view/version.rb
|
145
145
|
- spec/fixtures/templates/_hello.html.slim
|
146
|
+
- spec/fixtures/templates/controller_renderer_options.html.erb
|
146
147
|
- spec/fixtures/templates/decorated_parts.html.slim
|
147
148
|
- spec/fixtures/templates/edit.html.slim
|
148
149
|
- spec/fixtures/templates/empty.html.slim
|
@@ -196,12 +197,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
197
|
version: '0'
|
197
198
|
requirements: []
|
198
199
|
rubyforge_project:
|
199
|
-
rubygems_version: 2.7.
|
200
|
+
rubygems_version: 2.7.7
|
200
201
|
signing_key:
|
201
202
|
specification_version: 4
|
202
203
|
summary: Functional view rendering system
|
203
204
|
test_files:
|
204
205
|
- spec/fixtures/templates/_hello.html.slim
|
206
|
+
- spec/fixtures/templates/controller_renderer_options.html.erb
|
205
207
|
- spec/fixtures/templates/decorated_parts.html.slim
|
206
208
|
- spec/fixtures/templates/edit.html.slim
|
207
209
|
- spec/fixtures/templates/empty.html.slim
|