papercraft 0.13 → 0.14

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: 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