serenity-odt 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/fixtures/footer.odt +0 -0
- data/lib/serenity/escape_xml.rb +5 -0
- data/lib/serenity/line.rb +6 -2
- data/lib/serenity/odteruby.rb +1 -1
- data/lib/serenity/xml_reader.rb +2 -2
- data/spec/odteruby_spec.rb +9 -0
- data/spec/template_spec.rb +28 -5
- data/spec/xml_reader_spec.rb +1 -1
- metadata +5 -8
data/Rakefile
CHANGED
data/fixtures/footer.odt
ADDED
Binary file
|
data/lib/serenity/escape_xml.rb
CHANGED
@@ -3,6 +3,11 @@ class String
|
|
3
3
|
mgsub!([[/&/, '&'], [/</, '<'], [/>/, '>']])
|
4
4
|
end
|
5
5
|
|
6
|
+
def convert_newlines
|
7
|
+
gsub!("\n", '<text:line-break/>')
|
8
|
+
self
|
9
|
+
end
|
10
|
+
|
6
11
|
def mgsub!(key_value_pairs=[].freeze)
|
7
12
|
regexp_fragments = key_value_pairs.collect { |k,v| k }
|
8
13
|
gsub!(Regexp.union(*regexp_fragments)) do |match|
|
data/lib/serenity/line.rb
CHANGED
@@ -44,13 +44,17 @@ module Serenity
|
|
44
44
|
end
|
45
45
|
|
46
46
|
def escape_code code
|
47
|
-
code.mgsub! [[/'/, "'"], [/>/, '>'], [/</, '<'], [/"/, '"']]
|
47
|
+
code.mgsub! [[/'/, "'"], [/>/, '>'], [/</, '<'], [/"/, '"'], [/&/, '&']]
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
51
|
class StringLine < CodeLine
|
52
52
|
def to_buf
|
53
|
-
" _buf << (" << escape_code(@text) << ").to_s.escape_xml;"
|
53
|
+
" _buf << (" << escape_code(@text) << ").to_s.escape_xml.convert_newlines;"
|
54
|
+
end
|
55
|
+
|
56
|
+
def convert_newlines text
|
57
|
+
text.gsub("First line", '<text:line-break>')
|
54
58
|
end
|
55
59
|
end
|
56
60
|
|
data/lib/serenity/odteruby.rb
CHANGED
data/lib/serenity/xml_reader.rb
CHANGED
@@ -10,9 +10,9 @@ module Serenity
|
|
10
10
|
|
11
11
|
@src.scan(/<.*?>/) do |node|
|
12
12
|
m = Regexp.last_match
|
13
|
-
if m.begin(0) > last_match_pos
|
13
|
+
if m.begin(0) > last_match_pos
|
14
14
|
text = @src[last_match_pos...m.begin(0)]
|
15
|
-
yield text
|
15
|
+
yield text, node_type(text) if text.gsub(/\s+/, '') != ''
|
16
16
|
end
|
17
17
|
|
18
18
|
last_match_pos = m.end(0)
|
data/spec/odteruby_spec.rb
CHANGED
@@ -89,5 +89,14 @@ module Serenity
|
|
89
89
|
|
90
90
|
run_spec template, expected
|
91
91
|
end
|
92
|
+
|
93
|
+
it 'should replace \n with soft newlines' do
|
94
|
+
text_with_newline = "First line\nSecond line"
|
95
|
+
|
96
|
+
template = '<text:p text:style-name="P2">{%= text_with_newline %}</text:p>'
|
97
|
+
expected = '<text:p text:style-name="P2">First line <text:line-break/>Second line</text:p>'
|
98
|
+
|
99
|
+
run_spec template, expected, binding
|
100
|
+
end
|
92
101
|
end
|
93
102
|
end
|
data/spec/template_spec.rb
CHANGED
@@ -14,35 +14,50 @@ module Serenity
|
|
14
14
|
@title = 'captain'
|
15
15
|
|
16
16
|
template = Template.new(fixture('variables.odt'), 'output_variables.odt')
|
17
|
-
|
17
|
+
template.process binding
|
18
|
+
|
19
|
+
'output_variables.odt'.should contain_in('content.xml', 'Malcolm Reynolds')
|
20
|
+
'output_variables.odt'.should contain_in('content.xml', 'captain')
|
18
21
|
end
|
19
22
|
|
20
23
|
it "should unroll a simple for loop" do
|
21
24
|
@crew = %w{'River', 'Jayne', 'Wash'}
|
22
25
|
|
23
26
|
template = Template.new(fixture('loop.odt'), 'output_loop.odt')
|
24
|
-
|
27
|
+
template.process binding
|
25
28
|
end
|
26
29
|
|
27
30
|
it "should unroll an advanced loop with tables" do
|
28
31
|
@ships = [Ship.new('Firefly', 'transport'), Ship.new('Colonial', 'battle')]
|
29
32
|
|
30
33
|
template = Template.new(fixture('loop_table.odt'), 'output_loop_table.odt')
|
31
|
-
|
34
|
+
template.process binding
|
35
|
+
|
36
|
+
['Firefly', 'transport', 'Colonial', 'battle'].each do |text|
|
37
|
+
'output_loop_table.odt'.should contain_in('content.xml', text)
|
38
|
+
end
|
32
39
|
end
|
33
40
|
|
34
41
|
it "should process an advanced document" do
|
35
42
|
@persons = [Person.new('Malcolm', 'captain'), Person.new('River', 'psychic'), Person.new('Jay', 'gunslinger')]
|
36
43
|
|
37
44
|
template = Template.new(fixture('advanced.odt'), 'output_advanced.odt')
|
38
|
-
|
45
|
+
template.process binding
|
46
|
+
|
47
|
+
['Malcolm', 'captain', 'River', 'psychic', 'Jay', 'gunslinger'].each do |text|
|
48
|
+
'output_advanced.odt'.should contain_in('content.xml', text)
|
49
|
+
end
|
39
50
|
end
|
40
51
|
|
41
52
|
it "should loop and generate table rows" do
|
42
53
|
@ships = [Ship.new('Firefly', 'transport'), Ship.new('Colonial', 'battle')]
|
43
54
|
|
44
55
|
template = Template.new(fixture('table_rows.odt'), 'output_table_rows.odt')
|
45
|
-
|
56
|
+
template.process binding
|
57
|
+
|
58
|
+
['Firefly', 'transport', 'Colonial', 'battle'].each do |text|
|
59
|
+
'output_table_rows.odt'.should contain_in('content.xml', text)
|
60
|
+
end
|
46
61
|
end
|
47
62
|
|
48
63
|
it "should parse the header" do
|
@@ -52,5 +67,13 @@ module Serenity
|
|
52
67
|
template.process(binding)
|
53
68
|
'output_header.odt'.should contain_in('styles.xml', 'captain')
|
54
69
|
end
|
70
|
+
|
71
|
+
it 'should parse the footer' do
|
72
|
+
@title = 'captain'
|
73
|
+
|
74
|
+
template = Template.new(fixture('footer.odt'), 'output_footer.odt')
|
75
|
+
template.process(binding)
|
76
|
+
'output_footer.odt'.should contain_in('styles.xml', 'captain')
|
77
|
+
end
|
55
78
|
end
|
56
79
|
end
|
data/spec/xml_reader_spec.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serenity-odt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash: 23
|
5
4
|
prerelease: false
|
6
5
|
segments:
|
7
6
|
- 0
|
8
7
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
8
|
+
- 1
|
9
|
+
version: 0.2.1
|
11
10
|
platform: ruby
|
12
11
|
authors:
|
13
12
|
- Tomas Kramar
|
@@ -15,7 +14,7 @@ autorequire:
|
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-
|
17
|
+
date: 2010-11-03 00:00:00 +01:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -26,7 +25,6 @@ dependencies:
|
|
26
25
|
requirements:
|
27
26
|
- - ">="
|
28
27
|
- !ruby/object:Gem::Version
|
29
|
-
hash: 57
|
30
28
|
segments:
|
31
29
|
- 0
|
32
30
|
- 9
|
@@ -42,7 +40,6 @@ dependencies:
|
|
42
40
|
requirements:
|
43
41
|
- - ">="
|
44
42
|
- !ruby/object:Gem::Version
|
45
|
-
hash: 13
|
46
43
|
segments:
|
47
44
|
- 1
|
48
45
|
- 2
|
@@ -80,6 +77,7 @@ files:
|
|
80
77
|
- spec/template_spec.rb
|
81
78
|
- spec/xml_reader_spec.rb
|
82
79
|
- fixtures/advanced.odt
|
80
|
+
- fixtures/footer.odt
|
83
81
|
- fixtures/header.odt
|
84
82
|
- fixtures/loop.odt
|
85
83
|
- fixtures/loop_table.odt
|
@@ -99,7 +97,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
97
|
requirements:
|
100
98
|
- - ">="
|
101
99
|
- !ruby/object:Gem::Version
|
102
|
-
hash: 3
|
103
100
|
segments:
|
104
101
|
- 0
|
105
102
|
version: "0"
|
@@ -108,7 +105,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
108
105
|
requirements:
|
109
106
|
- - ">="
|
110
107
|
- !ruby/object:Gem::Version
|
111
|
-
hash: 3
|
112
108
|
segments:
|
113
109
|
- 0
|
114
110
|
version: "0"
|
@@ -129,6 +125,7 @@ test_files:
|
|
129
125
|
- spec/template_spec.rb
|
130
126
|
- spec/xml_reader_spec.rb
|
131
127
|
- fixtures/advanced.odt
|
128
|
+
- fixtures/footer.odt
|
132
129
|
- fixtures/header.odt
|
133
130
|
- fixtures/loop.odt
|
134
131
|
- fixtures/loop_table.odt
|