sablon 0.0.20 → 0.0.21
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 +4 -4
- data/Gemfile.lock +4 -6
- data/README.md +2 -0
- data/lib/sablon/operations.rb +1 -1
- data/lib/sablon/parser/mail_merge.rb +3 -1
- data/lib/sablon/version.rb +1 -1
- data/misc/TEMPLATE.md +44 -0
- data/misc/step_1.png +0 -0
- data/misc/step_2.png +0 -0
- data/misc/step_3_1.png +0 -0
- data/misc/step_3_2.png +0 -0
- data/misc/step_3_3_a.png +0 -0
- data/misc/step_3_3_b.png +0 -0
- data/misc/step_4.png +0 -0
- data/misc/step_5.png +0 -0
- data/misc/step_6.png +0 -0
- data/misc/step_7.png +0 -0
- data/test/fixtures/xml/test_ignore_complex_field_spanning_multiple_paragraphs.xml +35 -0
- data/test/processor/document_test.rb +42 -0
- metadata +16 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b83974c57d78d5a2b9ae7f1fc15f8527b3d349bf
|
4
|
+
data.tar.gz: 1d8283d8c781bb7e3810316cd71ef60f4e53cf70
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aacf3306315f9d9cc76c82de9a43cbf491ffccc5af4434e1409c6a7f513ef13133868201ba5cf702c478c585182fd46d8232a2c8e45ae3b50675cdc957f4b7a6
|
7
|
+
data.tar.gz: bf82feaafe41009c8f1e4b95a3dbbf31159da473fcfda2cad055c37bfe3ba600d7529aabba8bf3574353bbb81be9f9e9b751b7aa8e5e93b8ef8df740790db6e6
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
sablon (0.0.
|
4
|
+
sablon (0.0.21)
|
5
5
|
nokogiri (>= 1.6.0)
|
6
6
|
rubyzip (>= 1.1)
|
7
7
|
|
@@ -10,12 +10,10 @@ GEM
|
|
10
10
|
specs:
|
11
11
|
mini_portile2 (2.1.0)
|
12
12
|
minitest (5.8.0)
|
13
|
-
nokogiri (1.
|
13
|
+
nokogiri (1.7.1)
|
14
14
|
mini_portile2 (~> 2.1.0)
|
15
|
-
pkg-config (~> 1.1.7)
|
16
|
-
pkg-config (1.1.7)
|
17
15
|
rake (10.4.2)
|
18
|
-
rubyzip (1.2.
|
16
|
+
rubyzip (1.2.1)
|
19
17
|
xml-simple (1.1.5)
|
20
18
|
|
21
19
|
PLATFORMS
|
@@ -29,4 +27,4 @@ DEPENDENCIES
|
|
29
27
|
xml-simple
|
30
28
|
|
31
29
|
BUNDLED WITH
|
32
|
-
1.
|
30
|
+
1.14.5
|
data/README.md
CHANGED
@@ -36,6 +36,8 @@ Sablon templates are normal Word documents (`.docx`) sprinkled with MailMerge fi
|
|
36
36
|
to perform operations. The following section uses the notation `«=title»` to
|
37
37
|
refer to [Word MailMerge](http://en.wikipedia.org/wiki/Mail_merge) fields.
|
38
38
|
|
39
|
+
A detailed description about how to create a template can be found [here](misc/TEMPLATE.md)
|
40
|
+
|
39
41
|
#### Content Insertion
|
40
42
|
|
41
43
|
The most basic operation is to insert content. The contents of a context
|
data/lib/sablon/operations.rb
CHANGED
@@ -111,6 +111,7 @@ module Sablon
|
|
111
111
|
end
|
112
112
|
|
113
113
|
private
|
114
|
+
|
114
115
|
def build_complex_field(node)
|
115
116
|
possible_field_node = node.parent
|
116
117
|
field_nodes = [possible_field_node]
|
@@ -118,7 +119,8 @@ module Sablon
|
|
118
119
|
possible_field_node = possible_field_node.next_element
|
119
120
|
field_nodes << possible_field_node
|
120
121
|
end
|
121
|
-
|
122
|
+
# skip instantiation if no end tag
|
123
|
+
ComplexField.new(field_nodes) if field_nodes.last
|
122
124
|
end
|
123
125
|
end
|
124
126
|
end
|
data/lib/sablon/version.rb
CHANGED
data/misc/TEMPLATE.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
### Creating a Simple Template
|
2
|
+
Creating a template is as easy as creating a normal Word document (`.docx`). Yet it could be confusing to people who haven't used the [Mail Merge](https://support.office.com/en-us/article/Use-mail-merge-to-send-bulk-email-messages-0f123521-20ce-4aa8-8b62-ac211dedefa4) feature in Microsoft Word. The steps are as follows:
|
3
|
+
|
4
|
+
- Create a new word document
|
5
|
+
|
6
|
+

|
7
|
+
|
8
|
+
- Create your template
|
9
|
+
|
10
|
+

|
11
|
+
|
12
|
+
- Add mail merge fields
|
13
|
+
|
14
|
+
- Click the `Insert` tab on the ribbon
|
15
|
+
|
16
|
+

|
17
|
+
|
18
|
+
- Click the `Quick Parts` dropdown and select `Field...`
|
19
|
+
|
20
|
+

|
21
|
+
|
22
|
+
- On the dialog, scroll down and select `MergeField`
|
23
|
+
|
24
|
+

|
25
|
+
|
26
|
+
- Select `Field Codes`
|
27
|
+
|
28
|
+

|
29
|
+
|
30
|
+

|
31
|
+
|
32
|
+
- In the `Field codes` input box, enter your variable in front of the `MERGEFIELD`. Notice the space between the `MERGEFIELD` and the variable
|
33
|
+
|
34
|
+

|
35
|
+
|
36
|
+
- You should then have something like this:
|
37
|
+
|
38
|
+

|
39
|
+
|
40
|
+
- A complete template might look like this:
|
41
|
+
|
42
|
+

|
43
|
+
|
44
|
+
NOTE: When adding variables, those that display a value are preceded with an equals sign `=`. Those that just perform logics, such as loops and conditionals, do not need a preceding equals sign.
|
data/misc/step_1.png
ADDED
Binary file
|
data/misc/step_2.png
ADDED
Binary file
|
data/misc/step_3_1.png
ADDED
Binary file
|
data/misc/step_3_2.png
ADDED
Binary file
|
data/misc/step_3_3_a.png
ADDED
Binary file
|
data/misc/step_3_3_b.png
ADDED
Binary file
|
data/misc/step_4.png
ADDED
Binary file
|
data/misc/step_5.png
ADDED
Binary file
|
data/misc/step_6.png
ADDED
Binary file
|
data/misc/step_7.png
ADDED
Binary file
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<w:p w14:paraId="2A8BFD66" w14:textId="77777777" w:rsidR="006F0A69" w:rsidRDefault="00E40CBA" w:rsidP="00670731">
|
2
|
+
<w:r>
|
3
|
+
<w:fldChar w:fldCharType="begin"/>
|
4
|
+
</w:r>
|
5
|
+
<w:r>
|
6
|
+
<w:instrText xml:space="preserve"> AUTOTEXT Header:Date \* MERGEFORMAT </w:instrText>
|
7
|
+
</w:r>
|
8
|
+
<w:r>
|
9
|
+
<w:fldChar w:fldCharType="separate"/>
|
10
|
+
</w:r>
|
11
|
+
<w:r w:rsidR="006F0A69" w:rsidRPr="009A09E3">
|
12
|
+
<w:t>Day Month Year</w:t>
|
13
|
+
</w:r>
|
14
|
+
</w:p>
|
15
|
+
|
16
|
+
<w:p w14:paraId="71B65E52" w14:textId="613138CB" w:rsidR="001D1AF8" w:rsidRDefault="00E40CBA" w:rsidP="006C34C3">
|
17
|
+
<w:pPr>
|
18
|
+
<w:pStyle w:val="Address"/>
|
19
|
+
</w:pPr>
|
20
|
+
<w:r>
|
21
|
+
<w:fldChar w:fldCharType="end"/>
|
22
|
+
</w:r>
|
23
|
+
<w:bookmarkEnd w:id="0"/>
|
24
|
+
</w:p>
|
25
|
+
|
26
|
+
<w:p w14:paraId="7C3EB778" w14:textId="78AB4714" w:rsidR="001D1AF8" w:rsidRPr="000C6261" w:rsidRDefault="00A35B65" w:rsidP="001D1AF8">
|
27
|
+
<w:fldSimple w:instr=" MERGEFIELD =current_time \* MERGEFORMAT ">
|
28
|
+
<w:r>
|
29
|
+
<w:rPr>
|
30
|
+
<w:noProof/>
|
31
|
+
</w:rPr>
|
32
|
+
<w:t>«=current_time»</w:t>
|
33
|
+
</w:r>
|
34
|
+
</w:fldSimple>
|
35
|
+
</w:p>
|
@@ -384,6 +384,48 @@ class ProcessorDocumentTest < Sablon::TestCase
|
|
384
384
|
assert_equal "ParagraphBefore Before Content After ParagraphAfter", text(with_true)
|
385
385
|
end
|
386
386
|
|
387
|
+
def test_ignore_complex_field_spanning_multiple_paragraphs
|
388
|
+
result = process(snippet("test_ignore_complex_field_spanning_multiple_paragraphs"),
|
389
|
+
{"current_time" => '14:53'})
|
390
|
+
|
391
|
+
assert_equal "AUTOTEXT Header:Date \\* MERGEFORMAT Day Month Year 14:53", text(result)
|
392
|
+
assert_xml_equal <<-document, result
|
393
|
+
<w:p w14:paraId="2A8BFD66" w14:textId="77777777" w:rsidR="006F0A69" w:rsidRDefault="00E40CBA" w:rsidP="00670731">
|
394
|
+
<w:r>
|
395
|
+
<w:fldChar w:fldCharType="begin"/>
|
396
|
+
</w:r>
|
397
|
+
<w:r>
|
398
|
+
<w:instrText xml:space="preserve"> AUTOTEXT Header:Date \\* MERGEFORMAT </w:instrText>
|
399
|
+
</w:r>
|
400
|
+
<w:r>
|
401
|
+
<w:fldChar w:fldCharType="separate"/>
|
402
|
+
</w:r>
|
403
|
+
<w:r w:rsidR="006F0A69" w:rsidRPr="009A09E3">
|
404
|
+
<w:t>Day Month Year</w:t>
|
405
|
+
</w:r>
|
406
|
+
</w:p>
|
407
|
+
|
408
|
+
<w:p w14:paraId="71B65E52" w14:textId="613138CB" w:rsidR="001D1AF8" w:rsidRDefault="00E40CBA" w:rsidP="006C34C3">
|
409
|
+
<w:pPr>
|
410
|
+
<w:pStyle w:val="Address"/>
|
411
|
+
</w:pPr>
|
412
|
+
<w:r>
|
413
|
+
<w:fldChar w:fldCharType="end"/>
|
414
|
+
</w:r>
|
415
|
+
<w:bookmarkEnd w:id="0"/>
|
416
|
+
</w:p>
|
417
|
+
|
418
|
+
<w:p w14:paraId="7C3EB778" w14:textId="78AB4714" w:rsidR="001D1AF8" w:rsidRPr="000C6261" w:rsidRDefault="00A35B65" w:rsidP="001D1AF8">
|
419
|
+
<w:r>
|
420
|
+
<w:rPr>
|
421
|
+
<w:noProof/>
|
422
|
+
</w:rPr>
|
423
|
+
<w:t>14:53</w:t>
|
424
|
+
</w:r>
|
425
|
+
</w:p>
|
426
|
+
document
|
427
|
+
end
|
428
|
+
|
387
429
|
def test_conditional_with_predicate
|
388
430
|
result = process(snippet("conditional_with_predicate"), {"body" => ""})
|
389
431
|
assert_equal "some content", text(result)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sablon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yves Senn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -128,10 +128,21 @@ files:
|
|
128
128
|
- lib/sablon/test.rb
|
129
129
|
- lib/sablon/test/assertions.rb
|
130
130
|
- lib/sablon/version.rb
|
131
|
+
- misc/TEMPLATE.md
|
131
132
|
- misc/cv_sample.png
|
132
133
|
- misc/cv_template.png
|
133
134
|
- misc/recipe_sample.png
|
134
135
|
- misc/recipe_template.png
|
136
|
+
- misc/step_1.png
|
137
|
+
- misc/step_2.png
|
138
|
+
- misc/step_3_1.png
|
139
|
+
- misc/step_3_2.png
|
140
|
+
- misc/step_3_3_a.png
|
141
|
+
- misc/step_3_3_b.png
|
142
|
+
- misc/step_4.png
|
143
|
+
- misc/step_5.png
|
144
|
+
- misc/step_6.png
|
145
|
+
- misc/step_7.png
|
135
146
|
- sablon.gemspec
|
136
147
|
- test/content_test.rb
|
137
148
|
- test/context_test.rb
|
@@ -165,6 +176,7 @@ files:
|
|
165
176
|
- test/fixtures/xml/simple_fields.xml
|
166
177
|
- test/fixtures/xml/table_multi_row_loop.xml
|
167
178
|
- test/fixtures/xml/table_row_loop.xml
|
179
|
+
- test/fixtures/xml/test_ignore_complex_field_spanning_multiple_paragraphs.xml
|
168
180
|
- test/html/converter_test.rb
|
169
181
|
- test/html_test.rb
|
170
182
|
- test/mail_merge_parser_test.rb
|
@@ -195,7 +207,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
207
|
version: '0'
|
196
208
|
requirements: []
|
197
209
|
rubyforge_project:
|
198
|
-
rubygems_version: 2.
|
210
|
+
rubygems_version: 2.6.11
|
199
211
|
signing_key:
|
200
212
|
specification_version: 4
|
201
213
|
summary: docx tempalte processor
|
@@ -232,6 +244,7 @@ test_files:
|
|
232
244
|
- test/fixtures/xml/simple_fields.xml
|
233
245
|
- test/fixtures/xml/table_multi_row_loop.xml
|
234
246
|
- test/fixtures/xml/table_row_loop.xml
|
247
|
+
- test/fixtures/xml/test_ignore_complex_field_spanning_multiple_paragraphs.xml
|
235
248
|
- test/html/converter_test.rb
|
236
249
|
- test/html_test.rb
|
237
250
|
- test/mail_merge_parser_test.rb
|