dry-view 0.5.0 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ce2a157debc72c52b51ea0111281241d65c8b6c30284a28d42fa8f24c70a3660
4
- data.tar.gz: fa47926b849a06728df59429b1ee419651d06477d308cd8d9c0068d78fc911f5
3
+ metadata.gz: 3b7142689536853b1e216512d00558c4edbaafe44ee3abc2d1e51eb1ad498bc1
4
+ data.tar.gz: 6373160c6fa073a52c9fa106b6f1c8ac0b58c088bbce26e29b4b65ff587dad27
5
5
  SHA512:
6
- metadata.gz: 1a0d5e51ea2e331216e7a0efdce0e995155b2e9bef0bc8b94eb565165331fbd553c0aff1585a607523b5c94a80500c3f0d28881c953f118c6458f77ae980168b
7
- data.tar.gz: 0256d4aa8f7365f4d9f9d98c21ae0dfa2fa5a5c4ff540a3127e3036780078cb96a947fc3bd2933be4157213741772ed21c1d4eee89e64e17e50d7475869d87a3
6
+ metadata.gz: 0eaccf27fc9d7f29a8b3be6e9b695341738e67d98b132630d8ec6bc462683bdcfa4613ed59c00a8d3791f93789f4a5c437ee6dd2b66c5c893d52e537a3a93f51
7
+ data.tar.gz: a6b0bb154f5056de7b1bf6ca21d78e7ad9e1453dcc64d438d7f435e6285f236e0627d55838ba020bdf68749a4a1da577b6dc1e2cacc9e8b8993ba553d99a797d
@@ -1,9 +1,17 @@
1
+ # 0.5.1 / 2018-02-20
2
+
3
+ ### Added
4
+
5
+ - Exposures are inherited from parent view controller classes (GustavoCaso)
6
+
7
+ [Compare v0.5.0...v0.5.1](https://github.com/dry-rb/dry-view/compare/v0.5.0...v0.5.1)
8
+
1
9
  # 0.5.0 / 2018-01-23
2
10
 
3
11
  ### Added
4
12
 
5
- * Support for parts with decorated attributes (timriley + GustavoCaso)
6
- * Ability to easily create another part instance via `Part#new` (GustavoCaso)
13
+ - Support for parts with decorated attributes (timriley + GustavoCaso)
14
+ - Ability to easily create another part instance via `Part#new` (GustavoCaso)
7
15
 
8
16
  [Compare v0.4.0...v0.5.0](https://github.com/dry-rb/dry-view/compare/v0.4.0...v0.5.0)
9
17
 
@@ -33,6 +33,14 @@ module Dry
33
33
  attr_reader :template_path
34
34
  attr_reader :exposures
35
35
 
36
+ # @api private
37
+ def self.inherited(klass)
38
+ super
39
+ exposures.each do |name, exposure|
40
+ klass.exposures.import(name, exposure)
41
+ end
42
+ end
43
+
36
44
  # @api public
37
45
  def self.paths
38
46
  Array(config.paths).map { |path| Dry::View::Path.new(path) }
@@ -20,10 +20,18 @@ module Dry
20
20
  exposures[name]
21
21
  end
22
22
 
23
+ def each(&block)
24
+ exposures.each(&block)
25
+ end
26
+
23
27
  def add(name, proc = nil, **options)
24
28
  exposures[name] = Exposure.new(name, proc, options)
25
29
  end
26
30
 
31
+ def import(name, exposure)
32
+ exposures[name] = exposure.dup
33
+ end
34
+
27
35
  def bind(obj)
28
36
  bound_exposures = exposures.each_with_object({}) { |(name, exposure), memo|
29
37
  memo[name] = exposure.bind(obj)
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module View
3
- VERSION = '0.5.0'.freeze
3
+ VERSION = '0.5.1'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,6 @@
1
+ ul
2
+ - users.each do |user|
3
+ li = "#{user[:name]} (#{user[:email]})"
4
+
5
+ .count = users_count
6
+ .inherit = child_expose
@@ -303,4 +303,90 @@ RSpec.describe 'exposures' do
303
303
  expect(vc.locals(input)).to include(:users, :users_count)
304
304
  expect(vc.locals(input)).not_to include(:prefix)
305
305
  end
306
+
307
+ it 'inherit exposures from parent class' do
308
+ parent = Class.new(Dry::View::Controller) do
309
+ configure do |config|
310
+ config.paths = SPEC_ROOT.join('fixtures/templates')
311
+ config.layout = 'app'
312
+ config.template = 'users_with_count_inherit'
313
+ config.default_format = :html
314
+ end
315
+
316
+ private_expose :prefix do
317
+ "COUNT: "
318
+ end
319
+
320
+ expose :users
321
+
322
+ expose :users_count do |prefix, users:|
323
+ "#{prefix}#{users.length} users"
324
+ end
325
+ end
326
+
327
+ child = Class.new(parent) do
328
+ expose :child_expose do
329
+ 'Child expose'
330
+ end
331
+ end.new
332
+
333
+ users = [
334
+ {name: 'Jane', email: 'jane@doe.org'},
335
+ {name: 'Joe', email: 'joe@doe.org'}
336
+ ]
337
+
338
+ input = {users: users, context: context}
339
+
340
+ expect(child.(input)).to eql(
341
+ '<!DOCTYPE html><html><head><title>dry-view rocks!</title></head><body><ul><li>Jane (jane@doe.org)</li><li>Joe (joe@doe.org)</li></ul><div class="count">COUNT: 2 users</div><div class="inherit">Child expose</div></body></html>'
342
+ )
343
+
344
+ expect(child.locals(input)).to include(:users, :users_count, :child_expose)
345
+ expect(child.locals(input)).not_to include(:prefix)
346
+ end
347
+
348
+ it 'inherit exposures from parent class and allow to override them' do
349
+ parent = Class.new(Dry::View::Controller) do
350
+ configure do |config|
351
+ config.paths = SPEC_ROOT.join('fixtures/templates')
352
+ config.layout = 'app'
353
+ config.template = 'users_with_count_inherit'
354
+ config.default_format = :html
355
+ end
356
+
357
+ private_expose :prefix do
358
+ "COUNT: "
359
+ end
360
+
361
+ expose :users
362
+
363
+ expose :users_count do |prefix, users:|
364
+ "#{prefix}#{users.length} users"
365
+ end
366
+ end
367
+
368
+ child = Class.new(parent) do
369
+ expose :child_expose do
370
+ 'Child expose'
371
+ end
372
+
373
+ expose :users_count do |prefix, users:|
374
+ "#{prefix}#{users.length} users overrided"
375
+ end
376
+ end.new
377
+
378
+ users = [
379
+ {name: 'Jane', email: 'jane@doe.org'},
380
+ {name: 'Joe', email: 'joe@doe.org'}
381
+ ]
382
+
383
+ input = {users: users, context: context}
384
+
385
+ expect(child.(input)).to eql(
386
+ '<!DOCTYPE html><html><head><title>dry-view rocks!</title></head><body><ul><li>Jane (jane@doe.org)</li><li>Joe (joe@doe.org)</li></ul><div class="count">COUNT: 2 users overrided</div><div class="inherit">Child expose</div></body></html>'
387
+ )
388
+
389
+ expect(child.locals(input)).to include(:users, :users_count, :child_expose)
390
+ expect(child.locals(input)).not_to include(:prefix)
391
+ end
306
392
  end
@@ -90,4 +90,14 @@ RSpec.describe Dry::View::Exposures do
90
90
  expect(locals).to eq(:name=>"WILLIAM")
91
91
  end
92
92
  end
93
+
94
+ describe "#import" do
95
+ it "imports a exposure to the exposures" do
96
+ exposures_b = described_class.new
97
+ exposures.add(:name, -> name: { name.upcase }, default: 'John')
98
+ exposures_b.import(:name, exposures[:name])
99
+
100
+ expect(exposures_b[:name]).to eq(exposures[:name])
101
+ end
102
+ end
93
103
  end
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.0
4
+ version: 0.5.1
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-01-23 00:00:00.000000000 Z
12
+ date: 2018-02-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tilt
@@ -161,6 +161,7 @@ files:
161
161
  - spec/fixtures/templates/users/_row.html.slim
162
162
  - spec/fixtures/templates/users/_tbody.html.slim
163
163
  - spec/fixtures/templates/users_with_count.html.slim
164
+ - spec/fixtures/templates/users_with_count_inherit.html.slim
164
165
  - spec/fixtures/templates_override/_hello.html.slim
165
166
  - spec/fixtures/templates_override/users.html.slim
166
167
  - spec/integration/decorator_spec.rb
@@ -195,7 +196,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
195
196
  version: '0'
196
197
  requirements: []
197
198
  rubyforge_project:
198
- rubygems_version: 2.7.4
199
+ rubygems_version: 2.7.5
199
200
  signing_key:
200
201
  specification_version: 4
201
202
  summary: Functional view rendering system
@@ -219,6 +220,7 @@ test_files:
219
220
  - spec/fixtures/templates/users/_row.html.slim
220
221
  - spec/fixtures/templates/users/_tbody.html.slim
221
222
  - spec/fixtures/templates/users_with_count.html.slim
223
+ - spec/fixtures/templates/users_with_count_inherit.html.slim
222
224
  - spec/fixtures/templates_override/_hello.html.slim
223
225
  - spec/fixtures/templates_override/users.html.slim
224
226
  - spec/integration/decorator_spec.rb