papercraft 0.24 → 0.25

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: f90c4ea6ac9d3090ae45d79f7f4a58668ccf7f8ae5d4dfa2a727b44a82699eb9
4
- data.tar.gz: 10ff5bc3df10c10b0a968921517d2e0c18a61973dd97b88e95eef38670b9e451
3
+ metadata.gz: f23902f7431dcbd6c1180e26f612ae5099d4e7f2ba468dd0e0e5e9a76e324ef4
4
+ data.tar.gz: 5bf38e4faea0ab6c6145d769b24b416e467836b29c6d8856bb96442f86b43bfe
5
5
  SHA512:
6
- metadata.gz: '02461962ba174678a5b4a6ec550a8faa2f643fe87234e41513f7b49d798e3f3b2ade02adcfb0fa4961124a74484ddddea9437cb02eec98e9e897721729c0ef63'
7
- data.tar.gz: f99728bb218382a040f67cbf2fd9652c33b3e0648efefbc695ceee708006758b6ec249748f3e3d41b065bf3b2fb28014b1ae61e02f7d3b01231e928f028e6ebd
6
+ metadata.gz: 69ed90f079f1db073bbc18b1b631c13cbcd2db5dae9e512781046fb7fa5ab0a164653137b28c201f48671d77e4d08ff1da3818381aca5d3686d61eb185f8a586
7
+ data.tar.gz: 85681c583e3e145ca27a52638e0d3370fa94462d5baaae8cccb477a1a2938ad56f3040ee4f6cceb2757b49019890bcae505bcdc008e2ff0931987f09ab9eb91a
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.25 2023-01-12
2
+
3
+ - Implement `#def_tag` for defining custom tags inline
4
+
1
5
  ## 0.24 2022-03-19
2
6
 
3
7
  - Fix usage of const components (#13)
data/README.md CHANGED
@@ -86,6 +86,7 @@ hello.render('world')
86
86
  - [XML Templates](#xml-templates)
87
87
  - [JSON Templates](#json-templates)
88
88
  - [Papercraft Extensions](#papercraft-extensions)
89
+ - [Inline Helper Methods](#inline-helper-methods)
89
90
  - [Bundled Extensions](#bundled-extensions)
90
91
  - [API Reference](#api-reference)
91
92
 
@@ -681,6 +682,57 @@ Papercraft.html {
681
682
  }
682
683
  ```
683
684
 
685
+ ## Inline Helper Methods
686
+
687
+ In addition to proper extensions defined in modules, you can also define
688
+ individual extension methods inline in your Papercraft templates. You can do
689
+ this using any of the following techniques:
690
+
691
+ 1. Define a method in the template body:
692
+
693
+ ```ruby
694
+ Papercraft.html {
695
+ def label(text)
696
+ span text, class: 'label'
697
+ end
698
+
699
+ label 'foo'
700
+ label 'bar'
701
+ }
702
+ ```
703
+
704
+ 2. Use `def_tag` to define a custom tag:
705
+
706
+ ```ruby
707
+ Papercraft.html {
708
+ def_tag(:label) { |text| span text, class: 'label' }
709
+
710
+ label 'foo'
711
+ label 'bar'
712
+ }
713
+ ```
714
+
715
+ Note that using any of the above methods you can also create custom components
716
+ that take a block with inner HTML:
717
+
718
+ ```ruby
719
+ # using def
720
+ def section(title, &inner)
721
+ div {
722
+ h1 title
723
+ emit inner
724
+ }
725
+ end
726
+
727
+ # using def_tag
728
+ def_tag(:section) do |title, &inner|
729
+ div {
730
+ h1 title
731
+ emit inner
732
+ }
733
+ end
734
+ ```
735
+
684
736
  ## Bundled Extensions
685
737
 
686
738
  Papercraft comes bundled with a few extensions that address common use cases.
@@ -180,6 +180,29 @@ module Papercraft
180
180
  @buffer << escape_text(data)
181
181
  end
182
182
 
183
+ # Defines a custom tag. This is handy for defining helper or extension
184
+ # methods inside the template body.
185
+ #
186
+ # Papercraft.html {
187
+ # def_tag(:section) { |title, &inner|
188
+ # div {
189
+ # h1 title
190
+ # emit inner
191
+ # }
192
+ # }
193
+ #
194
+ # section('Foo') {
195
+ # p 'Bar'
196
+ # }
197
+ # }
198
+ #
199
+ # @param tag [Symbol, String] tag/method name
200
+ # @param block [Proc] method body
201
+ # @return [void]
202
+ def def_tag(sym, &block)
203
+ self.class.define_method(sym, &block)
204
+ end
205
+
183
206
  private
184
207
 
185
208
  # Defines a method that emits the given tag based on a constant. The
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Papercraft
4
- VERSION = '0.24'
4
+ VERSION = '0.25'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: papercraft
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.24'
4
+ version: '0.25'
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: 2022-03-19 00:00:00.000000000 Z
11
+ date: 2023-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: escape_utils
@@ -122,7 +122,7 @@ dependencies:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
124
  version: 2.0.9
125
- description:
125
+ description:
126
126
  email: sharon@noteflakes.com
127
127
  executables: []
128
128
  extensions: []
@@ -152,7 +152,7 @@ metadata:
152
152
  documentation_uri: https://www.rubydoc.info/gems/papercraft
153
153
  homepage_uri: https://github.com/digital-fabric/papercraft
154
154
  changelog_uri: https://github.com/digital-fabric/papercraft/blob/master/CHANGELOG.md
155
- post_install_message:
155
+ post_install_message:
156
156
  rdoc_options:
157
157
  - "--title"
158
158
  - Papercraft
@@ -171,8 +171,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  - !ruby/object:Gem::Version
172
172
  version: '0'
173
173
  requirements: []
174
- rubygems_version: 3.3.3
175
- signing_key:
174
+ rubygems_version: 3.4.1
175
+ signing_key:
176
176
  specification_version: 4
177
177
  summary: 'Papercraft: component-based HTML templating for Ruby'
178
178
  test_files: []