serenity-odt 0.1.0 → 0.1.1
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.
- data/Rakefile +5 -9
- data/lib/serenity.rb +1 -0
- data/lib/serenity/escape_xml.rb +14 -0
- data/lib/serenity/generator.rb +0 -2
- data/lib/serenity/line.rb +2 -5
- data/spec/escape_xml_spec.rb +19 -0
- data/spec/generator_spec.rb +4 -0
- data/spec/odteruby_spec.rb +24 -33
- metadata +4 -14
- data/serenity-odt.gemspec +0 -36
data/Rakefile
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'spec/rake/spectask'
|
3
|
+
require 'rake/gempackagetask'
|
3
4
|
|
4
5
|
task :default => [:spec]
|
5
6
|
|
@@ -7,7 +8,7 @@ Spec::Rake::SpecTask.new("spec")
|
|
7
8
|
|
8
9
|
spec = Gem::Specification.new do |s|
|
9
10
|
s.name = %q{serenity-odt}
|
10
|
-
s.version = "0.1.
|
11
|
+
s.version = "0.1.1"
|
11
12
|
|
12
13
|
s.authors = ["Tomas Kramar"]
|
13
14
|
s.description = <<-EOF
|
@@ -16,7 +17,7 @@ spec = Gem::Specification.new do |s|
|
|
16
17
|
Very similar to .erb files.
|
17
18
|
EOF
|
18
19
|
s.email = %q{kramar.tomas@gmail.com}
|
19
|
-
s.files = Dir.glob('lib/**/*.rb') + %w{README.md Rakefile
|
20
|
+
s.files = Dir.glob('lib/**/*.rb') + %w{README.md Rakefile LICENSE}
|
20
21
|
s.has_rdoc = false
|
21
22
|
s.require_paths = ["lib"]
|
22
23
|
s.rubygems_version = %q{1.3.5}
|
@@ -26,11 +27,6 @@ spec = Gem::Specification.new do |s|
|
|
26
27
|
s.add_development_dependency('rspec', '>= 1.2.9')
|
27
28
|
end
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
Rake::GemPackageTask.new(spec) do |p|
|
31
|
+
p.gem_spec = spec
|
31
32
|
end
|
32
|
-
|
33
|
-
task :gem => :gemspec do
|
34
|
-
system "gem build serenity-odt.gemspec"
|
35
|
-
end
|
36
|
-
|
data/lib/serenity.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
class String
|
2
|
+
def escape_xml
|
3
|
+
mgsub!([[/&/, '&'], [/</, '<'], [/>/, '>']])
|
4
|
+
self
|
5
|
+
end
|
6
|
+
|
7
|
+
def mgsub!(key_value_pairs=[].freeze)
|
8
|
+
regexp_fragments = key_value_pairs.collect { |k,v| k }
|
9
|
+
gsub!(Regexp.union(*regexp_fragments)) do |match|
|
10
|
+
key_value_pairs.detect{|k,v| k =~ match}[1]
|
11
|
+
end
|
12
|
+
self
|
13
|
+
end
|
14
|
+
end
|
data/lib/serenity/generator.rb
CHANGED
data/lib/serenity/line.rb
CHANGED
@@ -40,16 +40,13 @@ module Serenity
|
|
40
40
|
end
|
41
41
|
|
42
42
|
def escape_code code
|
43
|
-
code.
|
44
|
-
code.gsub!('>', ">")
|
45
|
-
code.gsub!('<', "<")
|
46
|
-
code
|
43
|
+
code.mgsub! [[/'/, "'"], [/>/, '>'], [/</, '<'], [/"/, '"']]
|
47
44
|
end
|
48
45
|
end
|
49
46
|
|
50
47
|
class StringLine < CodeLine
|
51
48
|
def to_buf
|
52
|
-
" _buf << (" << escape_code(@text) << ").to_s;"
|
49
|
+
" _buf << (" << escape_code(@text) << ").to_s.escape_xml;"
|
53
50
|
end
|
54
51
|
end
|
55
52
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe String do
|
4
|
+
it 'should escape <' do
|
5
|
+
'1 < 2'.escape_xml.should == '1 < 2'
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'should escape >' do
|
9
|
+
'2 > 1'.escape_xml.should == '2 > 1'
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should escape &' do
|
13
|
+
'1 & 2'.escape_xml.should == '1 & 2'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should escape < > &' do
|
17
|
+
'1 < 2 && 2 > 1'.escape_xml.should == '1 < 2 && 2 > 1'
|
18
|
+
end
|
19
|
+
end
|
data/spec/generator_spec.rb
CHANGED
@@ -2,6 +2,10 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
module Serenity
|
4
4
|
describe Generator do
|
5
|
+
after(:each) do
|
6
|
+
FileUtils.rm(fixture('loop_output.odt'))
|
7
|
+
end
|
8
|
+
|
5
9
|
it 'should make context from instance variables and run the provided template' do
|
6
10
|
class GeneratorClient
|
7
11
|
include Generator
|
data/spec/odteruby_spec.rb
CHANGED
@@ -16,6 +16,27 @@ module Serenity
|
|
16
16
|
text.inject('') { |memo, line| memo += line.strip } unless text.nil?
|
17
17
|
end
|
18
18
|
|
19
|
+
def run_spec template, expected, context=@context
|
20
|
+
content = OdtEruby.new(XmlReader.new template)
|
21
|
+
result = content.evaluate context
|
22
|
+
|
23
|
+
squeeze(result).should == squeeze(expected)
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should escape single quotes properly' do
|
27
|
+
expected = template = "<text:p>It's a 'quote'</text:p>"
|
28
|
+
|
29
|
+
run_spec template, expected
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should properly escape special XML characters ("<", ">", "&")' do
|
33
|
+
template = "<text:p>{%= description %}</text:p>"
|
34
|
+
description = 'This will only hold true if length < 1 && var == true or length > 1000'
|
35
|
+
expected = "<text:p>This will only hold true if length < 1 && var == true or length > 1000</text:p>"
|
36
|
+
|
37
|
+
run_spec template, expected, binding
|
38
|
+
end
|
39
|
+
|
19
40
|
it 'should replace variables with values from context' do
|
20
41
|
template = <<-EOF
|
21
42
|
<text:p text:style-name="Text_1_body">{%= name %}</text:p>
|
@@ -29,42 +50,15 @@ module Serenity
|
|
29
50
|
<text:p text:style-name="Text_1_body"/>
|
30
51
|
EOF
|
31
52
|
|
32
|
-
|
33
|
-
result = content.evaluate @context
|
34
|
-
|
35
|
-
squeeze(expected).should == squeeze(result)
|
53
|
+
run_spec template, expected
|
36
54
|
end
|
37
55
|
|
38
56
|
it 'should replace multiple variables on one line' do
|
39
57
|
template = '<text:p text:style-name="Text_1_body">{%= type %} and {%= name %}</text:p>'
|
40
58
|
expected = '<text:p text:style-name="Text_1_body">test_type and test_name</text:p>'
|
41
59
|
|
42
|
-
|
43
|
-
result = content.evaluate @context
|
44
|
-
|
45
|
-
squeeze(expected).should == squeeze(result)
|
46
|
-
end
|
47
|
-
=begin
|
48
|
-
should 'replace a LOOP construct with variables' do
|
49
|
-
template = <<-EOF
|
50
|
-
<text:p text:style-name="Text_1_body">{% for row in rows do %}</text:p>
|
51
|
-
<text:p text:style-name="Text_1_body">{%= row.name %}</text:p>
|
52
|
-
<text:p text:style-name="Text_1_body">{%= row.type %}</text:p>
|
53
|
-
<text:p text:style-name="Text_1_body">{% end %}</text:p>
|
54
|
-
EOF
|
55
|
-
|
56
|
-
expected = <<-EOF
|
57
|
-
<text:p text:style-name="Text_1_body">test_name_1</text:p>
|
58
|
-
<text:p text:style-name="Text_1_body">test_type_1</text:p>
|
59
|
-
<text:p text:style-name="Text_1_body">test_name_2</text:p>
|
60
|
-
<text:p text:style-name="Text_1_body">test_type_2</text:p>
|
61
|
-
EOF
|
62
|
-
|
63
|
-
content = OdtEruby.new(XmlReader.new template)
|
64
|
-
result = content.evaluate @context
|
65
|
-
assert_equal expected, result
|
60
|
+
run_spec template, expected
|
66
61
|
end
|
67
|
-
=end
|
68
62
|
|
69
63
|
it 'should remove empty tags after a control structure processing' do
|
70
64
|
template = <<-EOF
|
@@ -93,10 +87,7 @@ module Serenity
|
|
93
87
|
</table:table>
|
94
88
|
EOF
|
95
89
|
|
96
|
-
|
97
|
-
result = content.evaluate @context
|
98
|
-
|
99
|
-
squeeze(expected).should == squeeze(result)
|
90
|
+
run_spec template, expected
|
100
91
|
end
|
101
92
|
end
|
102
93
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: serenity-odt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tomas Kramar
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-02-
|
12
|
+
date: 2010-02-20 00:00:00 +01:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -42,6 +42,7 @@ extra_rdoc_files: []
|
|
42
42
|
|
43
43
|
files:
|
44
44
|
- lib/serenity/debug.rb
|
45
|
+
- lib/serenity/escape_xml.rb
|
45
46
|
- lib/serenity/generator.rb
|
46
47
|
- lib/serenity/line.rb
|
47
48
|
- lib/serenity/node_type.rb
|
@@ -51,19 +52,7 @@ files:
|
|
51
52
|
- lib/serenity.rb
|
52
53
|
- README.md
|
53
54
|
- Rakefile
|
54
|
-
- serenity-odt.gemspec
|
55
55
|
- LICENSE
|
56
|
-
- spec/generator_spec.rb
|
57
|
-
- spec/odteruby_spec.rb
|
58
|
-
- spec/spec_helper.rb
|
59
|
-
- spec/support/matchers/be_a_document.rb
|
60
|
-
- spec/template_spec.rb
|
61
|
-
- spec/xml_reader_spec.rb
|
62
|
-
- fixtures/advanced.odt
|
63
|
-
- fixtures/loop.odt
|
64
|
-
- fixtures/loop_table.odt
|
65
|
-
- fixtures/table_rows.odt
|
66
|
-
- fixtures/variables.odt
|
67
56
|
has_rdoc: true
|
68
57
|
homepage:
|
69
58
|
licenses: []
|
@@ -93,6 +82,7 @@ signing_key:
|
|
93
82
|
specification_version: 3
|
94
83
|
summary: Embedded ruby for OpenOffice Text Document (.odt) files
|
95
84
|
test_files:
|
85
|
+
- spec/escape_xml_spec.rb
|
96
86
|
- spec/generator_spec.rb
|
97
87
|
- spec/odteruby_spec.rb
|
98
88
|
- spec/spec_helper.rb
|
data/serenity-odt.gemspec
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
# -*- encoding: utf-8 -*-
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = %q{serenity-odt}
|
5
|
-
s.version = "0.1.0"
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Tomas Kramar"]
|
9
|
-
s.date = %q{2010-02-18}
|
10
|
-
s.description = %q{ Embedded ruby for OpenOffice Text Document (.odt) files. You provide an .odt template
|
11
|
-
with ruby code in a special markup and the data, and Serenity generates the document.
|
12
|
-
Very similar to .erb files.
|
13
|
-
}
|
14
|
-
s.email = %q{kramar.tomas@gmail.com}
|
15
|
-
s.files = ["lib/serenity/debug.rb", "lib/serenity/generator.rb", "lib/serenity/line.rb", "lib/serenity/node_type.rb", "lib/serenity/odteruby.rb", "lib/serenity/template.rb", "lib/serenity/xml_reader.rb", "lib/serenity.rb", "README.md", "Rakefile", "serenity-odt.gemspec", "LICENSE", "spec/generator_spec.rb", "spec/odteruby_spec.rb", "spec/spec_helper.rb", "spec/support/matchers/be_a_document.rb", "spec/template_spec.rb", "spec/xml_reader_spec.rb", "fixtures/advanced.odt", "fixtures/loop.odt", "fixtures/loop_table.odt", "fixtures/table_rows.odt", "fixtures/variables.odt"]
|
16
|
-
s.require_paths = ["lib"]
|
17
|
-
s.rubygems_version = %q{1.3.5}
|
18
|
-
s.summary = %q{Embedded ruby for OpenOffice Text Document (.odt) files}
|
19
|
-
s.test_files = ["spec/generator_spec.rb", "spec/odteruby_spec.rb", "spec/spec_helper.rb", "spec/support/matchers/be_a_document.rb", "spec/template_spec.rb", "spec/xml_reader_spec.rb", "fixtures/advanced.odt", "fixtures/loop.odt", "fixtures/loop_table.odt", "fixtures/table_rows.odt", "fixtures/variables.odt"]
|
20
|
-
|
21
|
-
if s.respond_to? :specification_version then
|
22
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
23
|
-
s.specification_version = 3
|
24
|
-
|
25
|
-
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
26
|
-
s.add_runtime_dependency(%q<rubyzip>, [">= 0.9.1"])
|
27
|
-
s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
|
28
|
-
else
|
29
|
-
s.add_dependency(%q<rubyzip>, [">= 0.9.1"])
|
30
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
31
|
-
end
|
32
|
-
else
|
33
|
-
s.add_dependency(%q<rubyzip>, [">= 0.9.1"])
|
34
|
-
s.add_dependency(%q<rspec>, [">= 1.2.9"])
|
35
|
-
end
|
36
|
-
end
|