lm_docstache 2.1.2 → 3.0.0
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/CHANGELOG.md +7 -0
- data/lib/lm_docstache/hide_custom_tags.rb +20 -8
- data/lib/lm_docstache/parser.rb +19 -14
- data/lib/lm_docstache/renderer.rb +2 -1
- data/lib/lm_docstache/version.rb +1 -1
- data/spec/hide_custom_tags_spec.rb +34 -17
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f59dcaa224f4e8e899df674bc5bd296432ebb24e8e4f929be6b414b8f3a8e0a9
|
4
|
+
data.tar.gz: b05e837bccad1978807e82bd7d13da786d24fc796213f4f2859f6ebf023522f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 900ff62d4ada49c3645abfd6fbb64f30b6d7f7e0bf0d619d378c1702890dc25d15685e0c950b152242ca3438d9c4e09658788cc36171d0dacad57c37046eb545
|
7
|
+
data.tar.gz: abd44d43c73c3012b1512e56c2c0fa985295876217d66d86a83670c73e23054362a29899608a86e90893cc1b82ce5306770a57e45fdbf71f0bec5cacf6518900
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 3.0.0
|
4
|
+
|
5
|
+
## Breaking Changes
|
6
|
+
* Replaced Renderer `hide_custom_tags` options to be a `Hash` instead of `Array`.
|
7
|
+
There are are edge cases which we want to replace the content on hide custom tags.
|
8
|
+
All documentations can be followed on `Renderer` and `HideCustomTag` classes.
|
9
|
+
|
3
10
|
## 2.1.2
|
4
11
|
|
5
12
|
### Bugfix
|
@@ -2,21 +2,27 @@ module LMDocstache
|
|
2
2
|
class HideCustomTags
|
3
3
|
attr_reader :document, :hide_custom_tags
|
4
4
|
|
5
|
-
# The +hide_custom_tags+ options is
|
6
|
-
# the pattern you expect to keep at the document but
|
5
|
+
# The +hide_custom_tags+ options is a +Hash+ of +Regexp+ or +String+ keys representing
|
6
|
+
# the pattern you expect to keep at the document but replacing the content to use
|
7
|
+
# font color equal to document background color or white.
|
8
|
+
# For the +Hash+ values we can have:
|
7
9
|
#
|
8
|
-
#
|
9
|
-
#
|
10
|
-
#
|
11
|
-
|
10
|
+
# * +false+ -> In this case we don't change the text content.
|
11
|
+
# * +Proc+ -> When a +Proc+ instance is provided, it's expected it to be
|
12
|
+
# able to receive the matched string and to return the string that will be
|
13
|
+
# used as replacement.
|
14
|
+
# * any other value that will be turned into a string -> in this case, this
|
15
|
+
# will be the value that will replace the matched string
|
16
|
+
def initialize(document:, hide_custom_tags: {})
|
12
17
|
@document = document
|
13
18
|
@hide_custom_tags = hide_custom_tags
|
14
19
|
end
|
15
20
|
|
16
21
|
# Find all run nodes matching hide custom tags +Regexp's+ options you defined, split it
|
17
22
|
# in multiple runs and replace font color to document background color or white in the matching tag run node.
|
23
|
+
# Replace content if you have defined any replacement value.
|
18
24
|
def hide_custom_tags!
|
19
|
-
hide_custom_tags.each do |full_pattern|
|
25
|
+
hide_custom_tags.each do |full_pattern, value|
|
20
26
|
paragraphs = document.css('w|p')
|
21
27
|
while paragraph = paragraphs.shift do
|
22
28
|
next unless paragraph.text =~ full_pattern
|
@@ -33,7 +39,13 @@ module LMDocstache
|
|
33
39
|
nodes_list = [remainder_run_node]
|
34
40
|
if matched_tag
|
35
41
|
replace_style(run_node_with_match)
|
36
|
-
|
42
|
+
matched_content = matched_tag
|
43
|
+
if value
|
44
|
+
matched_content = value.is_a?(Proc) ?
|
45
|
+
value.call(matched_tag) :
|
46
|
+
value.to_s
|
47
|
+
end
|
48
|
+
replace_content(run_node_with_match, matched_content)
|
37
49
|
nodes_list << run_node_with_match
|
38
50
|
end
|
39
51
|
paragraph << Nokogiri::XML::NodeSet.new(document, nodes_list)
|
data/lib/lm_docstache/parser.rb
CHANGED
@@ -34,22 +34,30 @@ module LMDocstache
|
|
34
34
|
# * any other value that will be turned into a string -> in this case, this
|
35
35
|
# will be the value that will replace the matched string
|
36
36
|
#
|
37
|
-
# The +hide_custom_tags+ options is
|
38
|
-
# the pattern you expect to keep at the document but
|
37
|
+
# The +hide_custom_tags+ options is a +Hash+ of +Regexp+ or +String+ keys representing
|
38
|
+
# the pattern you expect to keep at the document but replacing the content to use
|
39
|
+
# font color equal to document background color or white.
|
40
|
+
# For the +Hash+ values we can have:
|
39
41
|
#
|
40
|
-
#
|
41
|
-
#
|
42
|
-
#
|
42
|
+
# * +false+ -> In this case we don't change the text content.
|
43
|
+
# * +Proc+ -> When a +Proc+ instance is provided, it's expected it to be
|
44
|
+
# able to receive the matched string and to return the string that will be
|
45
|
+
# used as replacement.
|
46
|
+
# * any other value that will be turned into a string -> in this case, this
|
47
|
+
# will be the value that will replace the matched string
|
43
48
|
def initialize(document, data, options = {})
|
44
49
|
@document = document
|
45
50
|
@data = data.transform_keys(&:to_s)
|
46
|
-
@special_variable_replacements = options.fetch(:special_variable_replacements, {})
|
47
|
-
@hide_custom_tags =
|
51
|
+
@special_variable_replacements = add_blocks_to_regexp(options.fetch(:special_variable_replacements, {}))
|
52
|
+
@hide_custom_tags = add_blocks_to_regexp(options.fetch(:hide_custom_tags, {}))
|
48
53
|
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
55
|
+
# Replace +Regepx+ or +String+ keys to have the enclosing blocks
|
56
|
+
def add_blocks_to_regexp(options)
|
57
|
+
options.inject({}) do |x, (regexp_str, value)|
|
58
|
+
key = regexp_str.is_a?(String) ? Regexp.new("{{#{regexp_str}}}") : /{{#{regexp_str.source}}/
|
59
|
+
x[key] = value
|
60
|
+
x
|
53
61
|
end
|
54
62
|
end
|
55
63
|
|
@@ -128,15 +136,13 @@ module LMDocstache
|
|
128
136
|
variable_replacement.call($1) :
|
129
137
|
variable_replacement.to_s
|
130
138
|
end
|
131
|
-
|
132
139
|
text_node.content = text
|
133
140
|
end
|
134
141
|
end
|
135
142
|
|
136
143
|
def has_skippable_variable?(text)
|
137
|
-
return true if hide_custom_tags.find { |pattern| text =~ pattern }
|
144
|
+
return true if hide_custom_tags.find { |(pattern, value)| text =~ pattern }
|
138
145
|
!!special_variable_replacements.find do |(pattern, value)|
|
139
|
-
pattern = pattern.is_a?(String) ? /{{#{pattern}}}/ : /{{#{pattern.source}}}/
|
140
146
|
text =~ pattern && value == false
|
141
147
|
end
|
142
148
|
end
|
@@ -144,7 +150,6 @@ module LMDocstache
|
|
144
150
|
def special_variable_replacement(text)
|
145
151
|
Array(
|
146
152
|
special_variable_replacements.find do |(pattern, value)|
|
147
|
-
pattern = pattern.is_a?(String) ? /{{#{pattern}}}/ : /{{#{pattern.source}}}/
|
148
153
|
text =~ pattern && !!value
|
149
154
|
end
|
150
155
|
).last
|
@@ -6,7 +6,8 @@ module LMDocstache
|
|
6
6
|
|
7
7
|
def initialize(xml, data, options = {})
|
8
8
|
@content = xml
|
9
|
-
|
9
|
+
option_types = [:special_variable_replacements, :hide_custom_tags]
|
10
|
+
@parser = Parser.new(xml, data, options.slice(*option_types))
|
10
11
|
end
|
11
12
|
|
12
13
|
def render
|
data/lib/lm_docstache/version.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe LMDocstache::HideCustomTags do
|
4
|
-
|
5
4
|
context '#example' do
|
6
5
|
let(:output_dir) { "#{base_path}/tmp/" }
|
7
6
|
let(:output_file) { File.new("#{output_dir}/BlankTestOutput.docx", 'w') }
|
@@ -16,10 +15,18 @@ describe LMDocstache::HideCustomTags do
|
|
16
15
|
end
|
17
16
|
|
18
17
|
let(:base_path) { SPEC_BASE_PATH.join('example_input') }
|
19
|
-
let(:document) {
|
20
|
-
|
18
|
+
let(:document) {
|
19
|
+
doc = LMDocstache::Document.new(input_file)
|
20
|
+
doc.fix_errors
|
21
|
+
doc.instance_variable_get(:@document)
|
22
|
+
}
|
23
|
+
let(:regexp_tag) { /(?:sig|sigfirm|date|text|initial)\|(?:req|noreq)\|.+?/ }
|
24
|
+
let(:regexp_for_replacement) { /(?:check)\|(?:req|noreq)\|.+?/ }
|
21
25
|
let(:hide_custom_tags) {
|
22
|
-
LMDocstache::HideCustomTags.new(document: document, hide_custom_tags:
|
26
|
+
LMDocstache::HideCustomTags.new(document: document, hide_custom_tags: {
|
27
|
+
/#{regexp_tag}/ => false,
|
28
|
+
/#{regexp_for_replacement}/ => 'replaced_content'
|
29
|
+
})
|
23
30
|
}
|
24
31
|
|
25
32
|
context "giving a document with blue background" do
|
@@ -30,10 +37,9 @@ describe LMDocstache::HideCustomTags do
|
|
30
37
|
d = hide_custom_tags.document
|
31
38
|
run_nodes = d.css('w|p w|r')
|
32
39
|
while run_node = run_nodes.shift
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
end
|
40
|
+
next unless run_node.text =~ regexp_tag
|
41
|
+
expect(run_node.at_css('w|rPr w|color').first[1]).to eq('4472C4')
|
42
|
+
expect(run_node.children.first.name).to eq('rPr')
|
37
43
|
end
|
38
44
|
end
|
39
45
|
end
|
@@ -46,14 +52,13 @@ describe LMDocstache::HideCustomTags do
|
|
46
52
|
d = hide_custom_tags.document
|
47
53
|
run_nodes = d.css('w|p w|r')
|
48
54
|
while run_node = run_nodes.shift
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
end
|
55
|
+
next unless run_node.text =~ regexp_tag
|
56
|
+
expect(run_node.at_css('w|rPr w|color').first[1]).to eq('FFFFFF')
|
57
|
+
expect(run_node.children.first.name).to eq('rPr')
|
53
58
|
end
|
54
59
|
end
|
55
60
|
end
|
56
|
-
context 'giving a document without rpr' do
|
61
|
+
context 'giving a document without rpr and block tags on the left' do
|
57
62
|
let(:input_file) { "#{base_path}/docx-no-rpr.docx" }
|
58
63
|
|
59
64
|
it 'expect to have a white color on all hide custom tags matching and have first child node equal rPr tag' do
|
@@ -61,11 +66,23 @@ describe LMDocstache::HideCustomTags do
|
|
61
66
|
d = hide_custom_tags.document
|
62
67
|
run_nodes = d.css('w|p w|r')
|
63
68
|
while run_node = run_nodes.shift
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
69
|
+
next unless run_node.text =~ regexp_tag
|
70
|
+
expect(run_node.at_css('w|rPr w|color').first[1]).to eq('FFFFFF')
|
71
|
+
expect(run_node.children.first.name).to eq('rPr')
|
72
|
+
end
|
73
|
+
end
|
74
|
+
it 'expect to have a white color on all replacement tags and content following replacement' do
|
75
|
+
hide_custom_tags.hide_custom_tags!
|
76
|
+
d = hide_custom_tags.document
|
77
|
+
run_nodes = d.css('w|p w|r')
|
78
|
+
total_replacement = 0
|
79
|
+
while run_node = run_nodes.shift
|
80
|
+
next unless run_node.text =~ /replaced_content/
|
81
|
+
total_replacement+=1
|
82
|
+
expect(run_node.at_css('w|rPr w|color').first[1]).to eq('FFFFFF')
|
83
|
+
expect(run_node.children.first.name).to eq('rPr')
|
68
84
|
end
|
85
|
+
expect(total_replacement).to eq(2)
|
69
86
|
end
|
70
87
|
end
|
71
88
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lm_docstache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Roey Chasman
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2021-03-
|
15
|
+
date: 2021-03-23 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: nokogiri
|