rodf 0.1.5 → 0.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +1 -0
- data/Manifest +4 -0
- data/lib/odf/cell.rb +17 -6
- data/lib/odf/container.rb +1 -1
- data/lib/odf/data_style.rb +45 -0
- data/lib/odf/skeleton/styles.xml +7 -0
- data/lib/odf/spreadsheet.rb +5 -2
- data/lib/odf/style_section.rb +42 -0
- data/rodf.gemspec +5 -5
- data/spec/cell_spec.rb +20 -4
- data/spec/data_style_spec.rb +50 -0
- data/spec/spreadsheet_spec.rb +8 -0
- data/spec/style_section_spec.rb +42 -0
- metadata +9 -4
data/CHANGELOG
CHANGED
data/Manifest
CHANGED
@@ -6,18 +6,22 @@ Rakefile
|
|
6
6
|
lib/odf/cell.rb
|
7
7
|
lib/odf/column.rb
|
8
8
|
lib/odf/container.rb
|
9
|
+
lib/odf/data_style.rb
|
9
10
|
lib/odf/property.rb
|
10
11
|
lib/odf/row.rb
|
11
12
|
lib/odf/skeleton/manifest.xml
|
12
13
|
lib/odf/skeleton/styles.xml
|
13
14
|
lib/odf/spreadsheet.rb
|
14
15
|
lib/odf/style.rb
|
16
|
+
lib/odf/style_section.rb
|
15
17
|
lib/odf/table.rb
|
16
18
|
rodf.gemspec
|
17
19
|
spec/cell_spec.rb
|
20
|
+
spec/data_style_spec.rb
|
18
21
|
spec/property_spec.rb
|
19
22
|
spec/row_spec.rb
|
20
23
|
spec/spec_helper.rb
|
21
24
|
spec/spreadsheet_spec.rb
|
25
|
+
spec/style_section_spec.rb
|
22
26
|
spec/style_spec.rb
|
23
27
|
spec/table_spec.rb
|
data/lib/odf/cell.rb
CHANGED
@@ -26,7 +26,13 @@ module ODF
|
|
26
26
|
|
27
27
|
@url = opts[:url]
|
28
28
|
@type = opts[:type] || :string
|
29
|
-
|
29
|
+
unless value.instance_of?(Hash)
|
30
|
+
if [Date, DateTime, Time].include? value.class
|
31
|
+
@value = value.strftime("%Y-%m-%d")
|
32
|
+
else
|
33
|
+
@value = value.to_s.strip
|
34
|
+
end
|
35
|
+
end
|
30
36
|
|
31
37
|
@elem_attrs = make_element_attributes(@type, @value, opts)
|
32
38
|
@mutiply = (opts[:span] || 1).to_i
|
@@ -35,10 +41,14 @@ module ODF
|
|
35
41
|
def xml
|
36
42
|
markup = Builder::XmlMarkup.new
|
37
43
|
text = markup.tag! 'table:table-cell', @elem_attrs do |xml|
|
38
|
-
if
|
39
|
-
xml.text
|
40
|
-
|
41
|
-
|
44
|
+
if contains_string?
|
45
|
+
xml.text:p do |p|
|
46
|
+
if contains_url?
|
47
|
+
p.text:a, @value, 'xlink:href' => @url
|
48
|
+
else
|
49
|
+
p << @value
|
50
|
+
end
|
51
|
+
end
|
42
52
|
end
|
43
53
|
end
|
44
54
|
(@mutiply - 1).times {text = markup.tag! 'table:table-cell'}
|
@@ -55,7 +65,8 @@ module ODF
|
|
55
65
|
|
56
66
|
def make_element_attributes(type, value, opts)
|
57
67
|
attrs = {'office:value-type' => type}
|
58
|
-
attrs['office:value'] = value
|
68
|
+
attrs['office:date-value'] = value if :date == type
|
69
|
+
attrs['office:value'] = value if :float == type
|
59
70
|
attrs['table:formula'] = opts[:formula] unless opts[:formula].nil?
|
60
71
|
attrs['table:style-name'] = opts[:style] unless opts[:style].nil?
|
61
72
|
attrs['table:number-columns-spanned'] = opts[:span] unless opts[:span].nil?
|
data/lib/odf/container.rb
CHANGED
@@ -0,0 +1,45 @@
|
|
1
|
+
# Copyright (c) 2010 Thiago Arrais
|
2
|
+
#
|
3
|
+
# This file is part of rODF.
|
4
|
+
#
|
5
|
+
# rODF is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of
|
8
|
+
# the License, or (at your option) any later version.
|
9
|
+
|
10
|
+
# rODF is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with rODF. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require 'rubygems'
|
19
|
+
|
20
|
+
require 'builder'
|
21
|
+
|
22
|
+
require 'odf/container'
|
23
|
+
require 'odf/style_section'
|
24
|
+
|
25
|
+
module ODF
|
26
|
+
class DataStyle < Container
|
27
|
+
contains :style_sections
|
28
|
+
|
29
|
+
alias section style_section
|
30
|
+
|
31
|
+
def initialize(name, type)
|
32
|
+
@type, @name = type, name
|
33
|
+
end
|
34
|
+
|
35
|
+
def xml
|
36
|
+
Builder::XmlMarkup.new.tag! "number:#{@type}-style", 'style:name' => @name do |xml|
|
37
|
+
xml << style_sections_xml
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def method_missing(name, *args)
|
42
|
+
section(name, *args)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/odf/skeleton/styles.xml
CHANGED
@@ -17,6 +17,13 @@
|
|
17
17
|
<number:number-style style:name="integer-grouped">
|
18
18
|
<number:number number:decimal-places="0" number:min-integer-digits="1" number:grouping="true" />
|
19
19
|
</number:number-style>
|
20
|
+
<number:date-style style:name="year-to-day-long">
|
21
|
+
<number:year number:style="long"/>
|
22
|
+
<number:text>-</number:text>
|
23
|
+
<number:month number:style="long"/>
|
24
|
+
<number:text>-</number:text>
|
25
|
+
<number:day number:style="long"/>
|
26
|
+
</number:date-style>
|
20
27
|
</office:styles>
|
21
28
|
</office:document-styles>
|
22
29
|
|
data/lib/odf/spreadsheet.rb
CHANGED
@@ -21,12 +21,13 @@ require 'builder'
|
|
21
21
|
require 'zip/zip'
|
22
22
|
|
23
23
|
require 'odf/container'
|
24
|
+
require 'odf/data_style'
|
24
25
|
require 'odf/style'
|
25
26
|
require 'odf/table'
|
26
27
|
|
27
28
|
module ODF
|
28
29
|
class SpreadSheet < Container
|
29
|
-
contains :tables, :styles
|
30
|
+
contains :tables, :styles, :data_styles
|
30
31
|
|
31
32
|
def self.file(ods_file_name)
|
32
33
|
ods_file = Zip::ZipFile.open(ods_file_name, Zip::ZipFile::CREATE)
|
@@ -50,11 +51,13 @@ module ODF
|
|
50
51
|
'xmlns:oooc' => "http://openoffice.org/2004/calc",
|
51
52
|
'xmlns:style' => "urn:oasis:names:tc:opendocument:xmlns:style:1.0",
|
52
53
|
'xmlns:fo' => "urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0",
|
54
|
+
'xmlns:number' => "urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0",
|
53
55
|
'xmlns:xlink' => "http://www.w3.org/1999/xlink" do
|
54
56
|
|xml|
|
55
57
|
xml.tag! 'office:automatic-styles' do
|
56
58
|
xml << styles_xml
|
57
|
-
|
59
|
+
xml << data_styles_xml
|
60
|
+
end unless styles.empty? && data_styles.empty?
|
58
61
|
xml.office:body do
|
59
62
|
xml.office:spreadsheet do
|
60
63
|
xml << tables_xml
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2010 Thiago Arrais
|
2
|
+
#
|
3
|
+
# This file is part of rODF.
|
4
|
+
#
|
5
|
+
# rODF is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of
|
8
|
+
# the License, or (at your option) any later version.
|
9
|
+
|
10
|
+
# rODF is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with rODF. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require 'rubygems'
|
19
|
+
|
20
|
+
require 'builder'
|
21
|
+
|
22
|
+
module ODF
|
23
|
+
class StyleSection
|
24
|
+
def initialize(type, second = {})
|
25
|
+
@type = type
|
26
|
+
if second.instance_of?(Hash)
|
27
|
+
@elem_attrs = make_element_attributes(second)
|
28
|
+
else
|
29
|
+
@content, @elem_attrs = second, {}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def xml
|
34
|
+
Builder::XmlMarkup.new.number @type, @content, @elem_attrs
|
35
|
+
end
|
36
|
+
|
37
|
+
def make_element_attributes(opts)
|
38
|
+
{'number:style' => opts[:style], 'number:textual' => opts[:textual]}
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
data/rodf.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{rodf}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.7"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.authors = ["Thiago Arrais"
|
9
|
-
s.date = %q{2010-04-
|
8
|
+
s.authors = ["Thiago Arrais"]
|
9
|
+
s.date = %q{2010-04-19}
|
10
10
|
s.description = %q{ODF generation library for Ruby}
|
11
11
|
s.email = %q{thiago.arrais@gmail.com}
|
12
|
-
s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.rdoc", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/container.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton/manifest.xml", "lib/odf/skeleton/styles.xml", "lib/odf/spreadsheet.rb", "lib/odf/style.rb", "lib/odf/table.rb"]
|
13
|
-
s.files = ["CHANGELOG", "LICENSE.LGPL", "Manifest", "README.rdoc", "Rakefile", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/container.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton/manifest.xml", "lib/odf/skeleton/styles.xml", "lib/odf/spreadsheet.rb", "lib/odf/style.rb", "lib/odf/table.rb", "rodf.gemspec", "spec/cell_spec.rb", "spec/property_spec.rb", "spec/row_spec.rb", "spec/spec_helper.rb", "spec/spreadsheet_spec.rb", "spec/style_spec.rb", "spec/table_spec.rb"]
|
12
|
+
s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.rdoc", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton/manifest.xml", "lib/odf/skeleton/styles.xml", "lib/odf/spreadsheet.rb", "lib/odf/style_section.rb", "lib/odf/style.rb", "lib/odf/table.rb"]
|
13
|
+
s.files = ["CHANGELOG", "LICENSE.LGPL", "Manifest", "README.rdoc", "Rakefile", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton/manifest.xml", "lib/odf/skeleton/styles.xml", "lib/odf/spreadsheet.rb", "lib/odf/style_section.rb", "lib/odf/style.rb", "lib/odf/table.rb", "rodf.gemspec", "spec/cell_spec.rb", "spec/data_style_spec.rb", "spec/property_spec.rb", "spec/row_spec.rb", "spec/spec_helper.rb", "spec/spreadsheet_spec.rb", "spec/style_section_spec.rb", "spec/style_spec.rb", "spec/table_spec.rb"]
|
14
14
|
s.homepage = %q{http://github.com/thiagoarrais/rodf/tree}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rodf", "--main", "README.rdoc"]
|
16
16
|
s.require_paths = ["lib"]
|
data/spec/cell_spec.rb
CHANGED
@@ -102,10 +102,26 @@ describe ODF::Cell do
|
|
102
102
|
doc.at('text:a')['xlink:href'].should == 'http://www.example.org'
|
103
103
|
end
|
104
104
|
|
105
|
-
it "should
|
105
|
+
it "should ignore the URL requested on anything other than a string" do
|
106
106
|
cell = ODF::Cell.new(47.1, :type => :float, :url => 'http://www.example.org')
|
107
|
-
|
108
|
-
|
109
|
-
|
107
|
+
cell.xml.should_not have_tag('text:p')
|
108
|
+
cell.xml.should_not have_tag('text:a')
|
109
|
+
|
110
|
+
cell = ODF::Cell.new(Date.parse('15 Apr 2010'), :type => :date, :url => 'http://www.example.org')
|
111
|
+
cell.xml.should_not have_tag('text:p')
|
112
|
+
cell.xml.should_not have_tag('text:a')
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should have the date set correctly" do
|
116
|
+
cell = Hpricot(ODF::Cell.new(Date.parse('15 Apr 2010'), :type => :date).xml).
|
117
|
+
at('table:table-cell')
|
118
|
+
cell['office:value-type'].should == 'date'
|
119
|
+
cell['office:date-value'].should == '2010-04-15'
|
120
|
+
cell['office:value'].should be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should also accept strings as date values" do
|
124
|
+
Hpricot(ODF::Cell.new(Date.parse('16 Apr 2010'), :type => :date).xml).
|
125
|
+
at('table:table-cell')['office:date-value'] = '2010-04-16'
|
110
126
|
end
|
111
127
|
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# Copyright (c) 2010 Thiago Arrais
|
2
|
+
#
|
3
|
+
# This file is part of rODF.
|
4
|
+
#
|
5
|
+
# rODF is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of
|
8
|
+
# the License, or (at your option) any later version.
|
9
|
+
|
10
|
+
# rODF is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with rODF. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
19
|
+
|
20
|
+
require 'odf/data_style'
|
21
|
+
|
22
|
+
describe ODF::DataStyle do
|
23
|
+
it "should have sections" do
|
24
|
+
output = ODF::DataStyle.create 'year-to-day', :date do |s|
|
25
|
+
s.section :year, :style => 'long'
|
26
|
+
s.section :month, :style => 'long'
|
27
|
+
s.section :day
|
28
|
+
end
|
29
|
+
|
30
|
+
output.should have_tag('number:date-style')
|
31
|
+
output.should have_tag('number:year')
|
32
|
+
output.should have_tag('number:month')
|
33
|
+
output.should have_tag('number:day')
|
34
|
+
|
35
|
+
Hpricot(output).at('number:date-style')['style:name'].should == 'year-to-day'
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should allow short section names" do
|
39
|
+
output = ODF::DataStyle.create 'year-to-day', :date do |number|
|
40
|
+
number.year :style => 'long'
|
41
|
+
number.month :style => 'long'
|
42
|
+
number.day
|
43
|
+
end
|
44
|
+
|
45
|
+
output.should have_tag('number:year')
|
46
|
+
output.should have_tag('number:month')
|
47
|
+
output.should have_tag('number:day')
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
data/spec/spreadsheet_spec.rb
CHANGED
@@ -68,6 +68,14 @@ describe ODF::SpreadSheet do
|
|
68
68
|
output.should have_tag('//style:style')
|
69
69
|
Hpricot(output).at('//style:style')['style:name'].should == 'even-row-cell'
|
70
70
|
Hpricot(output).at('//style:style')['style:family'].should == 'table-cell'
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should have data styles" do
|
74
|
+
output = ODF::SpreadSheet.create do |ss|
|
75
|
+
ss.data_style 'year-to-day-long', :date
|
76
|
+
end
|
77
|
+
output.should have_tag('//office:automatic-styles/*', :count => 1)
|
78
|
+
output.should have_tag('//number:date-style')
|
71
79
|
end
|
72
80
|
end
|
73
81
|
|
@@ -0,0 +1,42 @@
|
|
1
|
+
# Copyright (c) 2010 Thiago Arrais
|
2
|
+
#
|
3
|
+
# This file is part of rODF.
|
4
|
+
#
|
5
|
+
# rODF is free software: you can redistribute it and/or modify
|
6
|
+
# it under the terms of the GNU Lesser General Public License as
|
7
|
+
# published by the Free Software Foundation, either version 3 of
|
8
|
+
# the License, or (at your option) any later version.
|
9
|
+
|
10
|
+
# rODF is distributed in the hope that it will be useful,
|
11
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
+
# GNU Lesser General Public License for more details.
|
14
|
+
|
15
|
+
# You should have received a copy of the GNU Lesser General Public License
|
16
|
+
# along with rODF. If not, see <http://www.gnu.org/licenses/>.
|
17
|
+
|
18
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
19
|
+
|
20
|
+
require 'odf/style_section'
|
21
|
+
|
22
|
+
describe ODF::StyleSection do
|
23
|
+
it "should allow style attribute" do
|
24
|
+
output = ODF::StyleSection.new(:year, :style => 'long').xml
|
25
|
+
output.should have_tag('number:year')
|
26
|
+
Hpricot(output).at('number:year')['number:style'].should == 'long'
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should allow textual flag" do
|
30
|
+
output = ODF::StyleSection.new(:month, :textual => true).xml
|
31
|
+
Hpricot(output).at('number:month')['number:textual'].should == 'true'
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should allow text to be inserted" do
|
35
|
+
Hpricot(ODF::StyleSection.new(:text, 'content').xml).
|
36
|
+
at('number:text').innerHTML.should == 'content'
|
37
|
+
|
38
|
+
Hpricot(ODF::StyleSection.new(:day).xml).
|
39
|
+
at('number:day').innerHTML.should == ''
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
metadata
CHANGED
@@ -5,17 +5,16 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 7
|
9
|
+
version: 0.1.7
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Thiago Arrais
|
13
|
-
- Merul Patel
|
14
13
|
autorequire:
|
15
14
|
bindir: bin
|
16
15
|
cert_chain: []
|
17
16
|
|
18
|
-
date: 2010-04-
|
17
|
+
date: 2010-04-19 00:00:00 -03:00
|
19
18
|
default_executable:
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
@@ -114,11 +113,13 @@ extra_rdoc_files:
|
|
114
113
|
- lib/odf/cell.rb
|
115
114
|
- lib/odf/column.rb
|
116
115
|
- lib/odf/container.rb
|
116
|
+
- lib/odf/data_style.rb
|
117
117
|
- lib/odf/property.rb
|
118
118
|
- lib/odf/row.rb
|
119
119
|
- lib/odf/skeleton/manifest.xml
|
120
120
|
- lib/odf/skeleton/styles.xml
|
121
121
|
- lib/odf/spreadsheet.rb
|
122
|
+
- lib/odf/style_section.rb
|
122
123
|
- lib/odf/style.rb
|
123
124
|
- lib/odf/table.rb
|
124
125
|
files:
|
@@ -130,19 +131,23 @@ files:
|
|
130
131
|
- lib/odf/cell.rb
|
131
132
|
- lib/odf/column.rb
|
132
133
|
- lib/odf/container.rb
|
134
|
+
- lib/odf/data_style.rb
|
133
135
|
- lib/odf/property.rb
|
134
136
|
- lib/odf/row.rb
|
135
137
|
- lib/odf/skeleton/manifest.xml
|
136
138
|
- lib/odf/skeleton/styles.xml
|
137
139
|
- lib/odf/spreadsheet.rb
|
140
|
+
- lib/odf/style_section.rb
|
138
141
|
- lib/odf/style.rb
|
139
142
|
- lib/odf/table.rb
|
140
143
|
- rodf.gemspec
|
141
144
|
- spec/cell_spec.rb
|
145
|
+
- spec/data_style_spec.rb
|
142
146
|
- spec/property_spec.rb
|
143
147
|
- spec/row_spec.rb
|
144
148
|
- spec/spec_helper.rb
|
145
149
|
- spec/spreadsheet_spec.rb
|
150
|
+
- spec/style_section_spec.rb
|
146
151
|
- spec/style_spec.rb
|
147
152
|
- spec/table_spec.rb
|
148
153
|
has_rdoc: true
|