papercraft 0.13 → 0.14

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: 5250720b438ab385dca9f3b91487fc2e5c887ba7e709015f8e26a1a2e78fa8d6
4
- data.tar.gz: '049f2399c403f55fdd0c0ee9de3b9bac5d314d0c57520184ddc59f361f7ec87d'
3
+ metadata.gz: 8ecbcde7e33f35958acc4ca0c5c0623468563f14322675a3c7315ed92e0b289c
4
+ data.tar.gz: 5f6bdcdee15ef9ca04bc982405bd07ea3da49c4a43fbd8fd95a70494e0c43dab
5
5
  SHA512:
6
- metadata.gz: 176f86dbf9e69deaf1fd60edbcba23401c1288a96d9eb5210175815e1ea1b297178daf2ba3533ae8020d18b8bc1b7003bcf39b2175c4ad95439982d622c01fad
7
- data.tar.gz: 9f623e968a7462225e4f504c880a911557d024b45393658bec01426ebff934bfa9c94094ca52feae8c2a23b642054e9cd3b88df25644019a61f62c5fda4350ad
6
+ metadata.gz: 7496b82113125d5f20287cb8b2f6607acfe7c16dda2a4670152867a175c877c33865f85ad155e733509b55e36067d0c3ea60578bf55f041e95bb46e3c1fa84f9
7
+ data.tar.gz: 91d5a7059eaf4b760412d9440f8ae08b48486c6ca6fc423a1ce32eb61a9a376385b4830b88b8a2ca1721971c48e4525a99d732d7650522fa71a55654c63aae86
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.14 2022-01-19
2
+
3
+ - Add support for #emit_yield in applied component (#4)
4
+
1
5
  ## 0.13 2022-01-19
2
6
 
3
7
  - Add support for partial parameter application (#3)
@@ -106,11 +106,8 @@ module Papercraft
106
106
  template = self
107
107
  Renderer.verify_proc_parameters(template, a, b)
108
108
  renderer_class.new do
109
- if block
110
- with_block(block) { instance_exec(*a, **b, &template) }
111
- else
112
- instance_exec(*a, **b, &template)
113
- end
109
+ push_emit_yield_block(block) if block
110
+ instance_exec(*a, **b, &template)
114
111
  end.to_s
115
112
  rescue ArgumentError => e
116
113
  raise Papercraft::Error, e.message
@@ -136,15 +133,10 @@ module Papercraft
136
133
  # @return [Papercraft::Component] applied component
137
134
  def apply(*a, **b, &block)
138
135
  template = self
139
- if block
140
- Component.new(&proc do |*x, **y|
141
- with_block(block) { instance_exec(*a, *x, **b, **y, &template) }
142
- end)
143
- else
144
- Component.new(&proc do |*x, **y|
145
- instance_exec(*a, *x, **b, **y, &template)
146
- end)
147
- end
136
+ Component.new(&proc do |*x, **y|
137
+ push_emit_yield_block(block) if block
138
+ instance_exec(*a, *x, **b, **y, &template)
139
+ end)
148
140
  end
149
141
 
150
142
  # Returns the Renderer class used for rendering the templates, according to
@@ -242,9 +242,10 @@ module Papercraft
242
242
  # @param **b [Hash] named arguments to pass to a proc
243
243
  # @return [void]
244
244
  def emit_yield(*a, **b)
245
- raise Papercraft::Error, "No block given" unless @inner_block
245
+ block = @emit_yield_stack&.pop
246
+ raise Papercraft::Error, "No block given" unless block
246
247
 
247
- instance_exec(*a, **b, &@inner_block)
248
+ instance_exec(*a, **b, &block)
248
249
  end
249
250
 
250
251
  # Defers the given block to be evaluated later. Deferred evaluation allows
@@ -304,19 +305,19 @@ module Papercraft
304
305
  private
305
306
 
306
307
  # Escapes text. This method must be overriden in descendant classes.
308
+ #
309
+ # @param text [String] text to be escaped
307
310
  def escape_text(text)
308
311
  raise NotImplementedError
309
312
  end
310
313
 
311
- # Sets up a block to be called with `#emit_yield`
312
- def with_block(block, &run_block)
313
- old_block = @inner_block
314
- @inner_block = block
315
- instance_eval(&run_block)
316
- ensure
317
- @inner_block = old_block
314
+ # Pushes the given block onto the emit_yield stack.
315
+ #
316
+ # @param block [Proc] block
317
+ def push_emit_yield_block(block)
318
+ (@emit_yield_stack ||= []) << block
318
319
  end
319
-
320
+
320
321
  # Emits tag attributes into the rendering buffer
321
322
  # @param props [Hash] tag attributes
322
323
  # @return [void]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Papercraft
4
- VERSION = '0.13'
4
+ VERSION = '0.14'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papercraft
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.13'
4
+ version: '0.14'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner