docx-builder 0.3.1 → 0.4.1.pre.alpha
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 +26 -26
- data/README.md +51 -0
- data/lib/docx/builder/template.rb +15 -0
- data/lib/docx/builder/version.rb +1 -1
- data/lib/docx/builder/xml_processor.rb +3 -3
- data/templates/table.xml.erb +102 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20a1abe01ca637f473541e829c94c92678cef288baa893ab8855f97c303df4ee
|
4
|
+
data.tar.gz: 58436a829e7c49b5c755e82c2135650530c7d34b9c3328dd075577b01333967b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d91b84fb0f0d4a6bcd47544a73795c6f901b3c1f67510fad9c6926ddfbc68da7bde8a70de1c36a8874eeec9f7d8c0fba961cdb9e82f57a8aeba68efac1a57e85
|
7
|
+
data.tar.gz: 7e1e292b5303d4df440110b8e40732d1e385f31ec45f9d40c5e1e8095131f5130059e0b97ca28f58c95ef416c7d2d2536bccc0c623551ec5e95f3a1bf1624ad7
|
data/Gemfile.lock
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
docx-builder (0.
|
4
|
+
docx-builder (0.4.1.pre.alpha)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
ast (2.4.2)
|
10
10
|
bump (0.10.0)
|
11
|
-
bundler-audit (0.9.
|
11
|
+
bundler-audit (0.9.1)
|
12
12
|
bundler (>= 1.2.0, < 3)
|
13
13
|
thor (~> 1.0)
|
14
14
|
byebug (11.1.3)
|
15
|
-
diff-lcs (1.
|
15
|
+
diff-lcs (1.5.0)
|
16
16
|
mini_portile2 (2.8.0)
|
17
|
-
nokogiri (1.13.
|
17
|
+
nokogiri (1.13.10)
|
18
18
|
mini_portile2 (~> 2.8.0)
|
19
19
|
racc (~> 1.4)
|
20
|
-
parallel (1.
|
21
|
-
parser (3.
|
20
|
+
parallel (1.22.1)
|
21
|
+
parser (3.1.3.0)
|
22
22
|
ast (~> 2.4.1)
|
23
|
-
racc (1.6.
|
24
|
-
rainbow (3.
|
25
|
-
rake (13.0.
|
26
|
-
regexp_parser (2.
|
23
|
+
racc (1.6.1)
|
24
|
+
rainbow (3.1.1)
|
25
|
+
rake (13.0.6)
|
26
|
+
regexp_parser (2.6.1)
|
27
27
|
rexml (3.2.5)
|
28
|
-
rspec (3.
|
29
|
-
rspec-core (~> 3.
|
30
|
-
rspec-expectations (~> 3.
|
31
|
-
rspec-mocks (~> 3.
|
32
|
-
rspec-core (3.
|
33
|
-
rspec-support (~> 3.
|
34
|
-
rspec-expectations (3.
|
28
|
+
rspec (3.12.0)
|
29
|
+
rspec-core (~> 3.12.0)
|
30
|
+
rspec-expectations (~> 3.12.0)
|
31
|
+
rspec-mocks (~> 3.12.0)
|
32
|
+
rspec-core (3.12.0)
|
33
|
+
rspec-support (~> 3.12.0)
|
34
|
+
rspec-expectations (3.12.0)
|
35
35
|
diff-lcs (>= 1.2.0, < 2.0)
|
36
|
-
rspec-support (~> 3.
|
37
|
-
rspec-mocks (3.
|
36
|
+
rspec-support (~> 3.12.0)
|
37
|
+
rspec-mocks (3.12.1)
|
38
38
|
diff-lcs (>= 1.2.0, < 2.0)
|
39
|
-
rspec-support (~> 3.
|
40
|
-
rspec-support (3.
|
39
|
+
rspec-support (~> 3.12.0)
|
40
|
+
rspec-support (3.12.0)
|
41
41
|
rubocop (0.93.1)
|
42
42
|
parallel (~> 1.10)
|
43
43
|
parser (>= 2.7.1.5)
|
@@ -47,12 +47,12 @@ GEM
|
|
47
47
|
rubocop-ast (>= 0.6.0)
|
48
48
|
ruby-progressbar (~> 1.7)
|
49
49
|
unicode-display_width (>= 1.4.0, < 2.0)
|
50
|
-
rubocop-ast (1.
|
51
|
-
parser (>=
|
50
|
+
rubocop-ast (1.24.0)
|
51
|
+
parser (>= 3.1.1.0)
|
52
52
|
ruby-progressbar (1.11.0)
|
53
|
-
rubyzip (2.3.
|
53
|
+
rubyzip (2.3.2)
|
54
54
|
thor (1.2.1)
|
55
|
-
unicode-display_width (1.
|
55
|
+
unicode-display_width (1.8.0)
|
56
56
|
|
57
57
|
PLATFORMS
|
58
58
|
ruby
|
@@ -69,4 +69,4 @@ DEPENDENCIES
|
|
69
69
|
rubyzip
|
70
70
|
|
71
71
|
BUNDLED WITH
|
72
|
-
2.
|
72
|
+
2.3.17
|
data/README.md
CHANGED
@@ -14,6 +14,24 @@ Insert here some text: {{% item.property %}}
|
|
14
14
|
{{ end }}
|
15
15
|
```
|
16
16
|
|
17
|
+
## Helpers
|
18
|
+
|
19
|
+
### Table
|
20
|
+
|
21
|
+
In order to render a table on docx template, we wrote:
|
22
|
+
|
23
|
+
```
|
24
|
+
{{t config t}}
|
25
|
+
```
|
26
|
+
|
27
|
+
where "config" is a hash that contains two properties:
|
28
|
+
|
29
|
+
* columns: an array of hashes. Each element represents a column and may have the following information:
|
30
|
+
* name (required): attribute name;
|
31
|
+
* width (required): specifies the value of the preferred width of the column (according to the officeopenxml documentation, it's in twentieths of a point or 1/1440 of an inch)
|
32
|
+
* description (optional): attribute description used on table's header; if not specified, its name will be used as a description
|
33
|
+
* rows: an array of hashes. Each element represents a row and all of its properties must appear in the columns' array.
|
34
|
+
|
17
35
|
## Installation
|
18
36
|
|
19
37
|
Add this line to your application's Gemfile:
|
@@ -39,6 +57,39 @@ Or install it yourself as:
|
|
39
57
|
# or memory_stream = builder.save_as_buffer(new_xml)
|
40
58
|
```
|
41
59
|
|
60
|
+
An exemple of table configuration should be:
|
61
|
+
|
62
|
+
```ruby
|
63
|
+
users_table = {
|
64
|
+
columns: [
|
65
|
+
{
|
66
|
+
name: :name,
|
67
|
+
description: 'Name',
|
68
|
+
width: 1150
|
69
|
+
},
|
70
|
+
{
|
71
|
+
name: :email,
|
72
|
+
description: 'Mail address',
|
73
|
+
width: 1150
|
74
|
+
}
|
75
|
+
],
|
76
|
+
rows: [
|
77
|
+
{
|
78
|
+
name: 'João',
|
79
|
+
email: 'joao@example.com'
|
80
|
+
},
|
81
|
+
{
|
82
|
+
name: 'José',
|
83
|
+
email: 'jose@example.com'
|
84
|
+
},
|
85
|
+
{
|
86
|
+
name: 'Felipe',
|
87
|
+
email: 'felipe@example.com'
|
88
|
+
}
|
89
|
+
]
|
90
|
+
}
|
91
|
+
```
|
92
|
+
|
42
93
|
## Contributing
|
43
94
|
|
44
95
|
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/docx-builder. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/docx-builder/blob/master/CODE_OF_CONDUCT.md).
|
@@ -4,6 +4,8 @@ module Docx
|
|
4
4
|
module Builder
|
5
5
|
# Represents a docx erb template
|
6
6
|
class Template
|
7
|
+
attr_reader :document, :sections
|
8
|
+
|
7
9
|
def initialize(path)
|
8
10
|
@document = Docx::Builder::Decoder.to_xml(path)
|
9
11
|
@sections = ['word/document.xml']
|
@@ -34,6 +36,7 @@ module Docx
|
|
34
36
|
# Replaces the docx-builder's tags for those ones currently used in erb files
|
35
37
|
def build_erb_template(document)
|
36
38
|
ret = document.gsub(/\{\{%/, '<%=').gsub(/%\}\}/, '%>')
|
39
|
+
ret = ret.gsub(/\{\{t\s(.*)\st\}\}/) { |_| build_dynamic_table(Regexp.last_match(1)) }
|
37
40
|
ret.gsub(/\{\{/, '<%').gsub(/\}\}/, '%>')
|
38
41
|
end
|
39
42
|
|
@@ -59,6 +62,18 @@ module Docx
|
|
59
62
|
@document.close
|
60
63
|
buffer
|
61
64
|
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def build_dynamic_table(variable)
|
69
|
+
template = read_xml_template(:table)
|
70
|
+
template.gsub('data', variable)
|
71
|
+
end
|
72
|
+
|
73
|
+
def read_xml_template(filename)
|
74
|
+
path = File.join(File.dirname(__FILE__), "../../../templates/#{filename}.xml.erb")
|
75
|
+
File.readlines(path).map(&:strip).join('')
|
76
|
+
end
|
62
77
|
end
|
63
78
|
end
|
64
79
|
end
|
data/lib/docx/builder/version.rb
CHANGED
@@ -8,7 +8,7 @@ module Docx
|
|
8
8
|
document.gsub(/\{\{.*?\}\}/m) do |match|
|
9
9
|
ret = match.include?('>') ? join_variable_tags(match) : match
|
10
10
|
Docx::Builder.logger.debug("Before cleaning: #{ret}")
|
11
|
-
ret =
|
11
|
+
ret = Docx::Builder::Cleaners.single_quote_cleaner(ret)
|
12
12
|
ret = insert_null_placeholder(ret)
|
13
13
|
Docx::Builder.logger.debug("After cleaning: #{ret}")
|
14
14
|
ret
|
@@ -19,7 +19,7 @@ module Docx
|
|
19
19
|
before = match.gsub(/<(.*)/m, '')
|
20
20
|
inside = match.scan(/<w:t.*?>([^>]*?)<.w:t>/m).join
|
21
21
|
after = match.gsub(/.*>([^>]+)$/m, '\\1')
|
22
|
-
[before, inside, after].join
|
22
|
+
[before, inside, after].join
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.clean_spaces_inside_variables(match)
|
@@ -33,7 +33,7 @@ module Docx
|
|
33
33
|
|
34
34
|
def self.insert_null_placeholder(expression)
|
35
35
|
placeholder = Docx::Builder.configuration.null_placeholder
|
36
|
-
expression.gsub(/\{\{%\s(
|
36
|
+
expression.gsub(/\{\{%\s(.+?)\s%\}\}/) do |_m|
|
37
37
|
"{{% (#{Regexp.last_match(1)} || '#{placeholder}') %}}"
|
38
38
|
end
|
39
39
|
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
<w:tbl>
|
2
|
+
<w:tblPr>
|
3
|
+
<w:tblW w:w="10006" w:type="dxa"/>
|
4
|
+
<w:tblInd w:w="-626" w:type="dxa"/>
|
5
|
+
<w:tblCellMar>
|
6
|
+
<w:left w:w="70" w:type="dxa"/>
|
7
|
+
<w:right w:w="70" w:type="dxa"/>
|
8
|
+
</w:tblCellMar>
|
9
|
+
<w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/>
|
10
|
+
</w:tblPr>
|
11
|
+
<w:tblGrid>
|
12
|
+
<% data[:columns].each do |column| %>
|
13
|
+
<w:gridCol w:w="<%= column[:width] %>"/>
|
14
|
+
<% end %>
|
15
|
+
</w:tblGrid>
|
16
|
+
<w:tr w:rsidR="00080F99" w:rsidRPr="00E71341" w:rsidTr="00E653AF">
|
17
|
+
<w:trPr>
|
18
|
+
<w:trHeight w:val="315"/>
|
19
|
+
</w:trPr>
|
20
|
+
<% data[:columns].each do |column| %>
|
21
|
+
<w:tc>
|
22
|
+
<w:tcPr>
|
23
|
+
<w:tcW w:w="<%= column[:width] %>" w:type="dxa"/>
|
24
|
+
<w:tcBorders>
|
25
|
+
<w:top w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
26
|
+
<w:left w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
27
|
+
<w:bottom w:val="single" w:sz="8" w:space="0" w:color="000000"/>
|
28
|
+
<w:right w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
29
|
+
</w:tcBorders>
|
30
|
+
<w:shd w:val="clear" w:color="000000" w:fill="FFFFFF"/>
|
31
|
+
<w:noWrap/>
|
32
|
+
<w:vAlign w:val="center"/>
|
33
|
+
<w:hideMark/>
|
34
|
+
</w:tcPr>
|
35
|
+
<w:p w:rsidR="00080F99" w:rsidRPr="00E71341" w:rsidRDefault="00080F99" w:rsidP="00E653AF">
|
36
|
+
<w:pPr>
|
37
|
+
<w:jc w:val="center"/>
|
38
|
+
<w:rPr>
|
39
|
+
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
|
40
|
+
<w:b/>
|
41
|
+
<w:bCs/>
|
42
|
+
<w:color w:val="000000"/>
|
43
|
+
<w:lang w:val="pt-BR" w:eastAsia="pt-BR"/>
|
44
|
+
</w:rPr>
|
45
|
+
</w:pPr>
|
46
|
+
<w:r w:rsidRPr="00E71341">
|
47
|
+
<w:rPr>
|
48
|
+
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
|
49
|
+
<w:b/>
|
50
|
+
<w:bCs/>
|
51
|
+
<w:color w:val="000000"/>
|
52
|
+
<w:lang w:val="pt-BR" w:eastAsia="pt-BR"/>
|
53
|
+
</w:rPr>
|
54
|
+
<w:t><%= column[:description] %></w:t>
|
55
|
+
</w:r>
|
56
|
+
</w:p>
|
57
|
+
</w:tc>
|
58
|
+
<% end %>
|
59
|
+
</w:tr>
|
60
|
+
<% data[:rows].each do |row| %>
|
61
|
+
<w:tr w:rsidR="00080F99" w:rsidRPr="00E71341" w:rsidTr="00E653AF">
|
62
|
+
<w:trPr>
|
63
|
+
<w:trHeight w:val="315"/>
|
64
|
+
</w:trPr>
|
65
|
+
<% data[:columns].each do |column| %>
|
66
|
+
<w:tc>
|
67
|
+
<w:tcPr>
|
68
|
+
<w:tcW w:w="<%= column[:width] %>" w:type="dxa"/>
|
69
|
+
<w:tcBorders>
|
70
|
+
<w:top w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
71
|
+
<w:left w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
72
|
+
<w:bottom w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
73
|
+
<w:right w:val="single" w:sz="4" w:space="0" w:color="000000"/>
|
74
|
+
</w:tcBorders>
|
75
|
+
<w:shd w:val="clear" w:color="000000" w:fill="FFFFFF"/>
|
76
|
+
<w:noWrap/>
|
77
|
+
<w:vAlign w:val="center"/>
|
78
|
+
<w:hideMark/>
|
79
|
+
</w:tcPr>
|
80
|
+
<w:p w:rsidR="00080F99" w:rsidRPr="00E71341" w:rsidRDefault="005549E3" w:rsidP="00E653AF">
|
81
|
+
<w:pPr>
|
82
|
+
<w:jc w:val="center"/>
|
83
|
+
<w:rPr>
|
84
|
+
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
|
85
|
+
<w:color w:val="000000"/>
|
86
|
+
<w:lang w:val="pt-BR" w:eastAsia="pt-BR"/>
|
87
|
+
</w:rPr>
|
88
|
+
</w:pPr>
|
89
|
+
<w:r>
|
90
|
+
<w:rPr>
|
91
|
+
<w:rFonts w:ascii="Arial" w:hAnsi="Arial" w:cs="Arial"/>
|
92
|
+
<w:color w:val="000000"/>
|
93
|
+
<w:lang w:val="pt-BR" w:eastAsia="pt-BR"/>
|
94
|
+
</w:rPr>
|
95
|
+
<w:t><%= row[column[:name]] %></w:t>
|
96
|
+
</w:r>
|
97
|
+
</w:p>
|
98
|
+
</w:tc>
|
99
|
+
<% end %>
|
100
|
+
</w:tr>
|
101
|
+
<% end %>
|
102
|
+
</w:tbl>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docx-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.1.pre.alpha
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tecnologia Cashme
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-12-15 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Builds a new docx file using ERB template
|
14
14
|
email:
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- lib/docx/builder/version.rb
|
41
41
|
- lib/docx/builder/xml_processor.rb
|
42
42
|
- lib/docx/logger.rb
|
43
|
+
- templates/table.xml.erb
|
43
44
|
- tmp/.gitkeep
|
44
45
|
homepage: https://github.com/cash-me/docx-builder
|
45
46
|
licenses:
|
@@ -59,9 +60,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
59
60
|
version: 2.3.0
|
60
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
62
|
requirements:
|
62
|
-
- - "
|
63
|
+
- - ">"
|
63
64
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
65
|
+
version: 1.3.1
|
65
66
|
requirements: []
|
66
67
|
rubygems_version: 3.1.6
|
67
68
|
signing_key:
|