papercraft 1.1 → 1.3

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.
@@ -6,7 +6,6 @@ module Papercraft
6
6
  # Emits a SOAP XML tag that identifies the XML document as a SOAP message.
7
7
  #
8
8
  # @param **props [Hash] tag attributes
9
- # @param &block [Proc] optional inner XML
10
9
  # @return [void]
11
10
  def Envelope(**props, &block)
12
11
  props[:xmlns__soap] ||= 'http://schemas.xmlsoap.org/soap/envelope/'
@@ -16,7 +15,6 @@ module Papercraft
16
15
  # Emits a SOAP XML tag that contains header information.
17
16
  #
18
17
  # @param **props [Hash] tag attributes
19
- # @param &block [Proc] optional inner XML
20
18
  # @return [void]
21
19
  def Header(**props, &blk)
22
20
  tag('soap:Header', **props, &blk)
@@ -25,7 +23,6 @@ module Papercraft
25
23
  # Emits a SOAP XML tag that contains header information.
26
24
  #
27
25
  # @param **props [Hash] tag attributes
28
- # @param &block [Proc] optional inner XML
29
26
  # @return [void]
30
27
  def Body(**props, &blk)
31
28
  tag('soap:Body', **props, &blk)
@@ -34,7 +31,6 @@ module Papercraft
34
31
  # Emits a SOAP XML tag that contains errors and status information.
35
32
  #
36
33
  # @param **props [Hash] tag attributes
37
- # @param &block [Proc] optional inner XML
38
34
  # @return [void]
39
35
  def Fault(**props, &blk)
40
36
  tag('soap:Fault', **props, &blk)
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './tags'
4
+ require 'cgi'
4
5
 
5
6
  module Papercraft
6
7
  # HTML Markup extensions
@@ -10,11 +11,11 @@ module Papercraft
10
11
  # Emits the p tag (overrides Object#p)
11
12
  #
12
13
  # @param text [String] text content of tag
13
- # @param props [Hash] tag attributes
14
+ # @param **attributes [Hash] tag attributes
14
15
  # @para block [Proc] nested HTML block
15
16
  # @return [void]
16
- def p(text = nil, **props, &block)
17
- method_missing(:p, text, **props, &block)
17
+ def p(text = nil, **attributes, &block)
18
+ method_missing(:p, text, **attributes, &block)
18
19
  end
19
20
 
20
21
  S_HTML5_DOCTYPE = '<!DOCTYPE html>'
@@ -47,11 +48,11 @@ module Papercraft
47
48
  # Emits an inline CSS style element.
48
49
  #
49
50
  # @param css [String] CSS code
50
- # @param **props [Hash] optional element attributes
51
+ # @param **attributes [Hash] optional element attributes
51
52
  # @return [void]
52
- def style(css, **props, &block)
53
+ def style(css, **attributes, &block)
53
54
  @buffer << '<style'
54
- emit_props(props) unless props.empty?
55
+ emit_attributes(attributes) unless attributes.empty?
55
56
 
56
57
  @buffer << '>' << css << '</style>'
57
58
  end
@@ -59,11 +60,11 @@ module Papercraft
59
60
  # Emits an inline JS script element.
60
61
  #
61
62
  # @param js [String, nil] Javascript code
62
- # @param **props [Hash] optional element attributes
63
+ # @param **attributes [Hash] optional element attributes
63
64
  # @return [void]
64
- def script(js = nil, **props, &block)
65
+ def script(js = nil, **attributes, &block)
65
66
  @buffer << '<script'
66
- emit_props(props) unless props.empty?
67
+ emit_attributes(attributes) unless attributes.empty?
67
68
 
68
69
  if js
69
70
  @buffer << '>' << js << '</script>'
@@ -131,7 +132,7 @@ module Papercraft
131
132
  # Returns true if the given tag is a void element, in order to render a self
132
133
  # closing tag. See spec: https://html.spec.whatwg.org/multipage/syntax.html#void-elements.
133
134
  #
134
- # @param text [String] tag
135
+ # @param tag [String] tag
135
136
  # @return [Bool] is it a void element
136
137
  def is_void_element_tag?(tag)
137
138
  case tag
@@ -148,7 +149,7 @@ module Papercraft
148
149
  # @param text [String] text
149
150
  # @return [String] escaped text
150
151
  def escape_text(text)
151
- EscapeUtils.escape_html(text.to_s)
152
+ CGI.escapeHTML(text.to_s)
152
153
  end
153
154
 
154
155
  # Converts a tag to its string representation. Underscores will be converted
@@ -15,8 +15,12 @@ module Papercraft
15
15
  # block is evaulated against a new object target, then added to the current
16
16
  # array.
17
17
  #
18
+ # Papercraft.json {
19
+ # item 'foo'
20
+ # item 'bar'
21
+ # }.render #=> "[\"foo\", \"bar\"]"
22
+ #
18
23
  # @param value [Object] item
19
- # @param &block [Proc] template block
20
24
  # @return [void]
21
25
  def item(value = nil, _for: nil, &block)
22
26
  return _for.each { |*a| item(value) { block.(*a)} } if _for
@@ -34,7 +38,6 @@ module Papercraft
34
38
  #
35
39
  # @param key [Object] key
36
40
  # @param value [Object] value
37
- # @param &block [Proc] template block
38
41
  # @return [void]
39
42
  def kv(key, value = nil, &block)
40
43
  verify_hash_target
@@ -47,12 +50,11 @@ module Papercraft
47
50
  # Intercepts method calls by adding key-value pairs to the current object
48
51
  # target.
49
52
  #
50
- # @param key [Object] key
53
+ # @param key [Symbol] key
51
54
  # @param value [Object] value
52
- # @param &block [Proc] template block
53
55
  # @return [void]
54
- def method_missing(sym, value = nil, &block)
55
- kv(sym, value, &block)
56
+ def method_missing(key, value = nil, &block)
57
+ kv(key, value, &block)
56
58
  end
57
59
 
58
60
  # Converts the root object target to JSON.
@@ -66,7 +68,6 @@ module Papercraft
66
68
 
67
69
  # Adds a new entry to the object stack and evaluates the given block.
68
70
  #
69
- # @param &block [Proc] template block
70
71
  # @return [void]
71
72
  def with_object(&block)
72
73
  @object_stack << nil
@@ -117,7 +118,6 @@ module Papercraft
117
118
  # Adds a new object to the object stack, evaluates the given template block,
118
119
  # then pops the object off the stack.
119
120
  #
120
- # @param &block [Proc] template block
121
121
  # @return [void]
122
122
  def enter_object(&block)
123
123
  @object_stack << nil
@@ -84,7 +84,8 @@ module Papercraft
84
84
  # renderer's scope.
85
85
  #
86
86
  # @param &template [Proc] template block
87
- def initialize(&template)
87
+ def initialize(render_fragment = nil, &template)
88
+ @render_fragment = render_fragment
88
89
  instance_eval(&template)
89
90
  end
90
91
 
@@ -119,7 +120,7 @@ module Papercraft
119
120
  end
120
121
  alias_method :e, :emit
121
122
 
122
- # Emits a block supplied using `Component#apply` or `Component#render`.
123
+ # Emits a block supplied using {Template#apply} or {Template#render}.
123
124
  #
124
125
  # div_wrap = Papercraft.html { |*args| div { emit_yield(*args) } }
125
126
  # greeter = div_wrap.apply { |name| h1 "Hello, #{name}!" }
@@ -135,6 +136,33 @@ module Papercraft
135
136
  instance_exec(*a, **b, &block)
136
137
  end
137
138
 
139
+ # Defines a named template fragment. Template fragments allow rendering
140
+ # specific parts of the same template. A template fragment can be rendered
141
+ # using {Template#render_fragment}. See also
142
+ # {https://htmx.org/essays/template-fragments/ HTMX template fragments}.
143
+ #
144
+ # form = Papercraft.html {
145
+ # h1 'Hello'
146
+ # fragment(:buttons) {
147
+ # button 'OK'
148
+ # button 'Cancel'
149
+ # }
150
+ # }
151
+ # form.render_fragment(:buttons) #=> "<button>OK</button><button>Cancel</buttons>"
152
+ #
153
+ # @param name [Symbol, String] fragment name
154
+ # @return [void]
155
+ def fragment(name, &block)
156
+ raise Papercraft::Error, "Already in fragment" if @fragment
157
+
158
+ begin
159
+ @fragment = name
160
+ emit(block)
161
+ ensure
162
+ @fragment = nil
163
+ end
164
+ end
165
+
138
166
  private
139
167
 
140
168
  # Pushes the given block onto the emit_yield stack.
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative './extension_proxy'
4
+ require 'escape_utils'
4
5
 
5
6
  module Papercraft
6
7
  # Markup (HTML/XML) extensions
@@ -22,16 +23,18 @@ module Papercraft
22
23
  S_TAG_%<TAG>s_PRE = %<tag_pre>s
23
24
  S_TAG_%<TAG>s_CLOSE = %<tag_close>s
24
25
 
25
- def %<tag>s(text = nil, _for: nil, **props, &block)
26
- return _for.each { |*a| %<tag>s(text, **props) { block.(*a)} } if _for
26
+ def %<tag>s(text = nil, _for: nil, **attributes, &block)
27
+ return if @render_fragment && @fragment != @render_fragment
27
28
 
28
- if text.is_a?(Hash) && props.empty?
29
- props = text
29
+ return _for.each { |*a| %<tag>s(text, **attributes) { block.(*a)} } if _for
30
+
31
+ if text.is_a?(Hash) && attributes.empty?
32
+ attributes = text
30
33
  text = nil
31
34
  end
32
35
 
33
36
  @buffer << S_TAG_%<TAG>s_PRE
34
- emit_props(props) unless props.empty?
37
+ emit_attributes(attributes) unless attributes.empty?
35
38
 
36
39
  if block
37
40
  @buffer << S_GT
@@ -54,16 +57,18 @@ module Papercraft
54
57
  S_TAG_%<TAG>s_PRE = %<tag_pre>s
55
58
  S_TAG_%<TAG>s_CLOSE = %<tag_close>s
56
59
 
57
- def %<tag>s(text = nil, _for: nil, **props, &block)
58
- return _for.each { |*a| %<tag>s(text, **props) { block.(*a)} } if _for
60
+ def %<tag>s(text = nil, _for: nil, **attributes, &block)
61
+ return if @render_fragment && @fragment != @render_fragment
62
+
63
+ return _for.each { |*a| %<tag>s(text, **attributes) { block.(*a)} } if _for
59
64
 
60
- if text.is_a?(Hash) && props.empty?
61
- props = text
65
+ if text.is_a?(Hash) && attributes.empty?
66
+ attributes = text
62
67
  text = nil
63
68
  end
64
69
 
65
70
  @buffer << S_TAG_%<TAG>s_PRE
66
- emit_props(props) unless props.empty?
71
+ emit_attributes(attributes) unless attributes.empty?
67
72
 
68
73
  if block
69
74
  @buffer << S_GT
@@ -84,9 +89,9 @@ module Papercraft
84
89
  INITIAL_BUFFER_CAPACITY = 8192
85
90
 
86
91
  # Initializes a tag renderer.
87
- def initialize(&template)
92
+ def initialize(render_fragment = nil, &template)
88
93
  @buffer = String.new(capacity: INITIAL_BUFFER_CAPACITY)
89
- super
94
+ super(render_fragment)
90
95
  end
91
96
 
92
97
  # Returns the rendered template.
@@ -134,7 +139,6 @@ module Papercraft
134
139
  # h1 'content'
135
140
  # }
136
141
  #
137
- # @param &block [Proc] Deferred block to be emitted
138
142
  # @return [void]
139
143
  def defer(&block)
140
144
  if !@parts
@@ -160,21 +164,22 @@ module Papercraft
160
164
  #
161
165
  # @param sym [Symbol, String] XML tag
162
166
  # @param text [String, nil] tag content
163
- # @param **props [Hash] tag attributes
164
- # @param &block [Proc] optional inner XML
167
+ # @param **attributes [Hash] tag attributes
165
168
  # @return [void]
166
- def tag(sym, text = nil, _for: nil, **props, &block)
167
- return _for.each { |*a| tag(sym, text, **props) { block.(*a)} } if _for
169
+ def tag(sym, text = nil, _for: nil, **attributes, &block)
170
+ return if @render_fragment && @fragment != @render_fragment
171
+
172
+ return _for.each { |*a| tag(sym, text, **attributes) { block.(*a)} } if _for
168
173
 
169
- if text.is_a?(Hash) && props.empty?
170
- props = text
174
+ if text.is_a?(Hash) && attributes.empty?
175
+ attributes = text
171
176
  text = nil
172
177
  end
173
178
 
174
179
  tag = tag_repr(sym)
175
180
 
176
181
  @buffer << S_LT << tag
177
- emit_props(props) unless props.empty?
182
+ emit_attributes(attributes) unless attributes.empty?
178
183
 
179
184
  if block
180
185
  @buffer << S_GT
@@ -195,10 +200,9 @@ module Papercraft
195
200
 
196
201
  # Catches undefined tag method call and handles it by defining the method.
197
202
  #
198
- # @param sym [Symbol] XML tag or component identifier
203
+ # @param sym [Symbol] tag or component identifier
199
204
  # @param args [Array] method arguments
200
205
  # @param opts [Hash] named method arguments
201
- # @param &block [Proc] block passed to method
202
206
  # @return [void]
203
207
  def method_missing(sym, *args, **opts, &block)
204
208
  tag = sym.to_s
@@ -214,9 +218,12 @@ module Papercraft
214
218
  # Emits text into the rendering buffer, escaping any special characters to
215
219
  # the respective XML entities.
216
220
  #
217
- # @param data [String] text
221
+ # @param data [String, nil] text
218
222
  # @return [void]
219
- def text(data)
223
+ def text(data = nil)
224
+ return if !data
225
+ return if @render_fragment && @fragment != @render_fragment
226
+
220
227
  @buffer << escape_text(data)
221
228
  end
222
229
 
@@ -239,8 +246,8 @@ module Papercraft
239
246
  # @param tag [Symbol, String] tag/method name
240
247
  # @param block [Proc] method body
241
248
  # @return [void]
242
- def def_tag(sym, &block)
243
- self.class.define_method(sym, &block)
249
+ def def_tag(tag, &block)
250
+ self.class.define_method(tag, &block)
244
251
  end
245
252
 
246
253
  alias_method :orig_extend, :extend
@@ -333,13 +340,14 @@ module Papercraft
333
340
  # @param obj [Object] emitted object
334
341
  # @return [void]
335
342
  def emit_object(obj)
343
+ return if @render_fragment && @fragment != @render_fragment
344
+
336
345
  @buffer << obj.to_s
337
346
  end
338
347
 
339
348
  # Renders a deferred proc by evaluating it, then adding the rendered result
340
349
  # to the buffer.
341
350
  #
342
- # @param &block [Proc] deferred proc
343
351
  # @return [void]
344
352
  def render_deferred_proc(&block)
345
353
  old_buffer = @buffer
@@ -379,30 +387,22 @@ module Papercraft
379
387
 
380
388
  # Emits tag attributes into the rendering buffer.
381
389
  #
382
- # @param props [Hash] tag attributes
390
+ # @param attributes [Hash] tag attributes
383
391
  # @return [void]
384
- def emit_props(props)
385
- props.each { |k, v|
386
- case k
387
- when :src, :href
388
- @buffer << S_SPACE << k.to_s << S_EQUAL_QUOTE <<
389
- EscapeUtils.escape_uri(v) << S_QUOTE
392
+ def emit_attributes(attributes)
393
+ attributes.each do |k, v|
394
+ case v
395
+ when true
396
+ @buffer << S_SPACE << att_repr(k)
397
+ when false, nil
398
+ # emit nothing
390
399
  else
391
- case v
392
- when true
393
- @buffer << S_SPACE << att_repr(k)
394
- when false, nil
395
- # emit nothing
396
- when Array
397
- v = v.join(' ')
398
- @buffer << S_SPACE << att_repr(k) <<
399
- S_EQUAL_QUOTE << escape_text(v) << S_QUOTE
400
- else
401
- @buffer << S_SPACE << att_repr(k) <<
402
- S_EQUAL_QUOTE << escape_text(v) << S_QUOTE
403
- end
400
+ v = v.join(S_SPACE) if v.is_a?(Array)
401
+ @buffer << S_SPACE << att_repr(k) <<
402
+ S_EQUAL_QUOTE << escape_text(v) << S_QUOTE
404
403
  end
405
- }
404
+ end
406
405
  end
406
+
407
407
  end
408
408
  end
@@ -113,8 +113,9 @@ module Papercraft
113
113
  # Renders the template with the given parameters and or block, and returns
114
114
  # the string result.
115
115
  #
116
- # @param context [Hash] context
117
- # @return [String]
116
+ # @param *params [any] unnamed parameters
117
+ # @param **named_params [any] named parameters
118
+ # @return [String] rendered string
118
119
  def render(*a, **b, &block)
119
120
  template = self
120
121
  Renderer.verify_proc_parameters(template, a, b)
@@ -124,6 +125,32 @@ module Papercraft
124
125
  end.to_s
125
126
  end
126
127
 
128
+ # Renders a template fragment. Any given parameters are passed to the
129
+ # template just like with {Template#render}. See also
130
+ # {https://htmx.org/essays/template-fragments/ HTMX template fragments}.
131
+ #
132
+ # form = Papercraft.html { |action|
133
+ # h1 'Hello'
134
+ # fragment(:buttons) {
135
+ # button action
136
+ # button 'Cancel'
137
+ # }
138
+ # }
139
+ # form.render_fragment(:buttons, 'foo') #=> "<button>foo</button><button>Cancel</buttons>"
140
+ #
141
+ # @param name [Symbol, String] fragment name
142
+ # @param *params [any] unnamed parameters
143
+ # @param **named_params [any] named parameters
144
+ # @return [String] rendered string
145
+ def render_fragment(name, *a, **b, &block)
146
+ template = self
147
+ Renderer.verify_proc_parameters(template, a, b)
148
+ renderer_class.new(name) do
149
+ push_emit_yield_block(block) if block
150
+ instance_exec(*a, **b, &template)
151
+ end.to_s
152
+ end
153
+
127
154
  # Creates a new template, applying the given parameters and or block to the
128
155
  # current one. Application is one of the principal methods of composing
129
156
  # templates, particularly when passing inner templates as blocks:
@@ -140,7 +167,6 @@ module Papercraft
140
167
  #
141
168
  # @param *a [<any>] normal parameters
142
169
  # @param **b [Hash] named parameters
143
- # @param &block [Proc] inner block
144
170
  # @return [Papercraft::Template] applied template
145
171
  def apply(*a, **b, &block)
146
172
  template = self
@@ -174,8 +200,8 @@ module Papercraft
174
200
  @mime_type
175
201
  end
176
202
 
177
- # def compile
178
- # Papercraft::Compiler.new.compile(self)
179
- # end
203
+ def compile(*args)
204
+ Papercraft::Compiler.new.compile(self, *args)
205
+ end
180
206
  end
181
207
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Papercraft
4
- VERSION = '1.1'
4
+ VERSION = '1.3'
5
5
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'escape_utils'
4
3
  require_relative './tags'
4
+ require 'escape_utils'
5
5
 
6
6
  module Papercraft
7
7
  # XML renderer extensions
data/lib/papercraft.rb CHANGED
@@ -6,7 +6,7 @@ require 'kramdown-parser-gfm'
6
6
 
7
7
  require_relative 'papercraft/template'
8
8
  require_relative 'papercraft/renderer'
9
- # require_relative 'papercraft/compiler'
9
+ require_relative 'papercraft/compiler'
10
10
 
11
11
 
12
12
  # Papercraft is a composable templating library
@@ -79,7 +79,7 @@ module Papercraft
79
79
  # default Kramdown options in order to change the rendering behaviour.
80
80
  #
81
81
  # @param markdown [String] Markdown
82
- # @param **opts [Hash] Kramdown option overrides
82
+ # @param opts [Hash] Kramdown option overrides
83
83
  # @return [String] HTML
84
84
  def markdown(markdown, **opts)
85
85
  opts = default_kramdown_options.merge(opts)
metadata CHANGED
@@ -1,57 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papercraft
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.1'
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-03 00:00:00.000000000 Z
11
+ date: 2024-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sirop
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.4'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: escape_utils
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
31
  - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: 1.2.1
33
+ version: 1.3.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
38
  - - "~>"
25
39
  - !ruby/object:Gem::Version
26
- version: 1.2.1
40
+ version: 1.3.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: kramdown
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - "~>"
32
46
  - !ruby/object:Gem::Version
33
- version: 2.3.1
47
+ version: 2.5.1
34
48
  type: :runtime
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - "~>"
39
53
  - !ruby/object:Gem::Version
40
- version: 2.3.1
54
+ version: 2.5.1
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rouge
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: 3.27.0
61
+ version: 4.5.1
48
62
  type: :runtime
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: 3.27.0
68
+ version: 4.5.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: kramdown-parser-gfm
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +86,14 @@ dependencies:
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '5.15'
89
+ version: 5.25.4
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '5.15'
96
+ version: 5.25.4
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: benchmark-ips
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -114,15 +128,15 @@ dependencies:
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: 2.1.0
131
+ version: 2.2.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: 2.1.0
125
- description:
138
+ version: 2.2.0
139
+ description:
126
140
  email: sharon@noteflakes.com
127
141
  executables: []
128
142
  extensions: []
@@ -134,6 +148,7 @@ files:
134
148
  - README.md
135
149
  - lib/papercraft.rb
136
150
  - lib/papercraft/compiler.rb
151
+ - lib/papercraft/compiler_old.rb
137
152
  - lib/papercraft/extension_proxy.rb
138
153
  - lib/papercraft/extensions/soap.rb
139
154
  - lib/papercraft/html.rb
@@ -153,7 +168,7 @@ metadata:
153
168
  documentation_uri: https://www.rubydoc.info/gems/papercraft
154
169
  homepage_uri: https://github.com/digital-fabric/papercraft
155
170
  changelog_uri: https://github.com/digital-fabric/papercraft/blob/master/CHANGELOG.md
156
- post_install_message:
171
+ post_install_message:
157
172
  rdoc_options:
158
173
  - "--title"
159
174
  - Papercraft
@@ -165,15 +180,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
180
  requirements:
166
181
  - - ">="
167
182
  - !ruby/object:Gem::Version
168
- version: '2.7'
183
+ version: '3.2'
169
184
  required_rubygems_version: !ruby/object:Gem::Requirement
170
185
  requirements:
171
186
  - - ">="
172
187
  - !ruby/object:Gem::Version
173
188
  version: '0'
174
189
  requirements: []
175
- rubygems_version: 3.4.1
176
- signing_key:
190
+ rubygems_version: 3.5.16
191
+ signing_key:
177
192
  specification_version: 4
178
193
  summary: 'Papercraft: component-based HTML templating for Ruby'
179
194
  test_files: []