rodf 0.3.2 → 0.3.3

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/CHANGELOG CHANGED
@@ -1,3 +1,4 @@
1
+ v0.3.3. Documents can now write themselves to disk
1
2
  v0.3.2. Fixes broken styles.xml
2
3
  v0.3.1. Adds support for conditional formatting
3
4
  v0.3. Allow parameterless blocks
@@ -70,4 +70,29 @@ Some basic conditional formatting is also possible:
70
70
  row {cell '0', :type => :float, :style => 'cond1' }
71
71
  row {cell '5', :type => :float, :style => 'cond1' }
72
72
  end
73
- end
73
+ end
74
+
75
+ ==== Procedural style
76
+
77
+ The declarative style shown above is just syntatic sugar. A more procedural
78
+ style can also be used. Like so:
79
+
80
+ require 'odf/spreadsheet'
81
+
82
+ ss = ODF::Spreadsheet.new
83
+ t = ss.table 'My first table from Ruby'
84
+ r = t.row
85
+ c = r.cell 'Hello, rODF world!'
86
+
87
+ ss.write_to 'my-spreadsheet.ods'
88
+
89
+ Both styles can be mixed and matched at will:
90
+
91
+ require 'odf/spreadsheet'
92
+
93
+ ss = ODF::Spreadsheet.new
94
+ ss.table 'My first table from Ruby' do
95
+ row { cell 'Hello, rODF world!' }
96
+ end
97
+
98
+ ss.write_to 'my-spreadsheet.ods'
@@ -28,17 +28,20 @@ module ODF
28
28
  contains :styles, :default_styles, :office_styles
29
29
 
30
30
  def self.file(ods_file_name, &contents)
31
- ods_file = Zip::ZipFile.open(ods_file_name, Zip::ZipFile::CREATE)
32
- ods_file.get_output_stream('META-INF/manifest.xml') {|f| f << skeleton.manifest(doc_type) }
33
-
34
31
  (doc = new).instance_eval(&contents)
32
+ doc.write_to ods_file_name
33
+ end
34
+
35
+ def write_to(ods_file_name)
36
+ ods_file = Zip::ZipFile.open(ods_file_name, Zip::ZipFile::CREATE)
37
+ ods_file.get_output_stream('META-INF/manifest.xml') {|f| f << self.class.skeleton.manifest(self.class.doc_type) }
35
38
 
36
39
  ods_file.get_output_stream('styles.xml') do |f|
37
- f << skeleton.styles
38
- f << doc.office_styles_xml unless doc.office_styles.empty?
40
+ f << self.class.skeleton.styles
41
+ f << self.office_styles_xml unless self.office_styles.empty?
39
42
  f << "</office:styles> </office:document-styles>"
40
43
  end
41
- ods_file.get_output_stream('content.xml') {|f| f << doc.xml}
44
+ ods_file.get_output_stream('content.xml') {|f| f << self.xml}
42
45
 
43
46
  ods_file.close
44
47
  end
@@ -23,6 +23,7 @@ module ODF
23
23
  PROPERTY_NAMES = {:cell => 'table-cell-properties',
24
24
  :text => 'text-properties',
25
25
  :column => 'table-column-properties',
26
+ :row => 'table-row-properties',
26
27
  :conditional => 'map'}
27
28
  TRANSLATED_SPECS = [:border_color, :border_style, :border_width]
28
29
  STYLE_ATTRIBUTES = ['column-width', 'rotation-angle', 'text-underline-type',
@@ -25,13 +25,17 @@ module ODF
25
25
  class Row < Container
26
26
  contains :cells
27
27
  attr_reader :number
28
+ attr_writer :style
28
29
 
29
- def initialize(number=0)
30
+ def initialize(number=0, opts={})
30
31
  @number = number
32
+ @style = opts[:style]
31
33
  end
32
34
 
33
35
  def xml
34
- Builder::XmlMarkup.new.tag! 'table:table-row' do |xml|
36
+ elem_attrs = {}
37
+ elem_attrs['table:style-name'] = @style unless @style.nil?
38
+ Builder::XmlMarkup.new.tag! 'table:table-row', elem_attrs do |xml|
35
39
  xml << cells_xml
36
40
  end
37
41
  end
@@ -25,7 +25,7 @@ module ODF
25
25
  class Style < Container
26
26
  contains :properties
27
27
 
28
- FAMILIES = {:cell => 'table-cell', :column => 'table-column'}
28
+ FAMILIES = {:cell => 'table-cell', :column => 'table-column', :row => 'table-row'}
29
29
 
30
30
  def initialize(name='', opts={}, node_tag='style:style')
31
31
  @name, @node_tag = name, node_tag
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "rodf"
5
- s.version = "0.3.2"
5
+ s.version = "0.3.3"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Thiago Arrais, Foivos Zakkak"]
9
- s.date = "2012-11-08"
9
+ s.date = "2013-02-01"
10
10
  s.description = "ODF generation library for Ruby"
11
11
  s.email = "thiago.arrais@gmail.com"
12
12
  s.extra_rdoc_files = ["CHANGELOG", "LICENSE.LGPL", "README.rdoc", "lib/odf/cell.rb", "lib/odf/column.rb", "lib/odf/compatibility.rb", "lib/odf/container.rb", "lib/odf/data_style.rb", "lib/odf/document.rb", "lib/odf/hyperlink.rb", "lib/odf/master_page.rb", "lib/odf/page_layout.rb", "lib/odf/paragraph.rb", "lib/odf/paragraph_container.rb", "lib/odf/property.rb", "lib/odf/row.rb", "lib/odf/skeleton.rb", "lib/odf/skeleton/manifest.xml.erb", "lib/odf/skeleton/styles.pxml", "lib/odf/span.rb", "lib/odf/spreadsheet.rb", "lib/odf/style.rb", "lib/odf/style_section.rb", "lib/odf/tab.rb", "lib/odf/table.rb", "lib/odf/text.rb"]
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
15
15
  s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Rodf", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = "rodf"
18
- s.rubygems_version = "1.8.10"
18
+ s.rubygems_version = "1.8.25"
19
19
  s.summary = "ODF generation library for Ruby"
20
20
 
21
21
  if s.respond_to? :specification_version then
@@ -45,6 +45,12 @@ describe ODF::Property do
45
45
  elem['style:rotation-angle'].should == '-90'
46
46
  end
47
47
 
48
+ it "should generate row properties tag" do
49
+ property = ODF::Property.new :row, 'background-color' => '#f5f57a'
50
+
51
+ property.xml.should have_tag('//style:table-row-properties')
52
+ end
53
+
48
54
  it "should accept full perimeter border specs" do
49
55
  property = ODF::Property.new :cell, :border => "0.025in solid #000000"
50
56
 
@@ -41,4 +41,19 @@ describe ODF::Row do
41
41
  output.should have_tag('//table:table-row/*', :count => 2)
42
42
  output.should have_tag('//table:table-cell')
43
43
  end
44
+
45
+ it "should be stylable in the initialization" do
46
+ output = ODF::Row.create 0, :style => 'dark' do
47
+ cell
48
+ end
49
+ Hpricot(output).at('table:table-row')['table:style-name'].
50
+ should == 'dark'
51
+ end
52
+
53
+ it "should be attr_writer stylable" do
54
+ row = ODF::Row.new
55
+ row.style = 'dark'
56
+ Hpricot(row.xml).at('table:table-row')['table:style-name'].
57
+ should == 'dark'
58
+ end
44
59
  end
@@ -83,6 +83,13 @@ describe ODF::Style do
83
83
  xml.should have_tag('//style:table-column-properties')
84
84
  end
85
85
 
86
+ it "should be able to describe row styles" do
87
+ xml = ODF::Style.create 'column-style', :family => :row do |style|
88
+ end
89
+
90
+ Hpricot(xml).at('//style:style')['style:family'].should == 'table-row'
91
+ end
92
+
86
93
  it "should accept other families" do
87
94
  Hpricot(ODF::Style.create('text-style', :family => :text)).
88
95
  at('//style:style')['style:family'].should == 'text'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rodf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-08 00:00:00.000000000 Z
12
+ date: 2013-02-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
16
- requirement: &83228770 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '3.0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *83228770
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: rubyzip
27
- requirement: &83228560 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ~>
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 0.9.1
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *83228560
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 0.9.1
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: activesupport
38
- requirement: &83228350 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ~>
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '3.0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *83228350
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: rspec
49
- requirement: &83228140 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ~>
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '2.9'
55
70
  type: :development
56
71
  prerelease: false
57
- version_requirements: *83228140
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: '2.9'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: rspec_hpricot_matchers
60
- requirement: &83227930 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ~>
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '1.0'
66
86
  type: :development
67
87
  prerelease: false
68
- version_requirements: *83227930
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: '1.0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: echoe
71
- requirement: &83227720 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: '4.6'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *83227720
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '4.6'
80
110
  description: ODF generation library for Ruby
81
111
  email: thiago.arrais@gmail.com
82
112
  executables: []
@@ -182,7 +212,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
212
  version: '1.2'
183
213
  requirements: []
184
214
  rubyforge_project: rodf
185
- rubygems_version: 1.8.10
215
+ rubygems_version: 1.8.25
186
216
  signing_key:
187
217
  specification_version: 3
188
218
  summary: ODF generation library for Ruby