xmlss 0.3.1 → 0.4.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.
- data/.gitignore +1 -2
- data/Gemfile +1 -0
- data/Gemfile.lock +12 -11
- data/README.rdoc +141 -107
- data/Rakefile +24 -1
- data/bench/profiler.rb +6 -0
- data/bench/profiler_runner.rb +43 -0
- data/examples/example_workbook.rb +8 -12
- data/examples/layout.rb +34 -60
- data/examples/layout.xml +66 -0
- data/examples/simple.rb +16 -21
- data/examples/simple.xml +32 -0
- data/examples/styles.rb +52 -56
- data/examples/styles.xml +50 -0
- data/examples/text.rb +18 -28
- data/examples/text.xml +20 -0
- data/lib/xmlss/{cell.rb → element/cell.rb} +4 -14
- data/lib/xmlss/{column.rb → element/column.rb} +2 -7
- data/lib/xmlss/{data.rb → element/data.rb} +7 -12
- data/lib/xmlss/{row.rb → element/row.rb} +2 -13
- data/lib/xmlss/{worksheet.rb → element/worksheet.rb} +7 -18
- data/lib/xmlss/style/alignment.rb +3 -10
- data/lib/xmlss/style/base.rb +6 -45
- data/lib/xmlss/style/border.rb +5 -5
- data/lib/xmlss/style/font.rb +2 -9
- data/lib/xmlss/style/interior.rb +2 -5
- data/lib/xmlss/style/number_format.rb +4 -7
- data/lib/xmlss/style/protection.rb +4 -7
- data/lib/xmlss/undies_writer.rb +172 -0
- data/lib/xmlss/version.rb +1 -1
- data/lib/xmlss/workbook.rb +97 -31
- data/lib/xmlss.rb +1 -28
- data/test/{cell_test.rb → element/cell_test.rb} +11 -35
- data/test/{column_test.rb → element/column_test.rb} +6 -12
- data/test/{data_test.rb → element/data_test.rb} +15 -10
- data/test/{row_test.rb → element/row_test.rb} +5 -35
- data/test/{worksheet_test.rb → element/worksheet_test.rb} +4 -30
- data/test/helper.rb +13 -30
- data/test/style/alignment_test.rb +13 -45
- data/test/style/base_test.rb +1 -106
- data/test/style/border_test.rb +12 -32
- data/test/style/font_test.rb +11 -43
- data/test/style/interior_test.rb +7 -27
- data/test/style/number_format_test.rb +5 -21
- data/test/style/protection_test.rb +2 -12
- data/test/undies_writer_test.rb +333 -0
- data/test/workbook_test.rb +89 -44
- data/xmlss.gemspec +2 -2
- metadata +37 -39
- data/lib/xmlss/item_set.rb +0 -17
- data/lib/xmlss/table.rb +0 -22
- data/lib/xmlss/xml.rb +0 -60
- data/test/item_set_test.rb +0 -27
- data/test/table_test.rb +0 -56
- data/test/xml_test.rb +0 -81
- data/test/xmlss_test.rb +0 -31
data/examples/simple.xml
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<Styles>
|
4
|
+
</Styles>
|
5
|
+
|
6
|
+
<Worksheet ss:Name="1 row, 5 columns">
|
7
|
+
<Table>
|
8
|
+
<Column />
|
9
|
+
<Column />
|
10
|
+
<Column />
|
11
|
+
<Column />
|
12
|
+
<Column />
|
13
|
+
<Row>
|
14
|
+
<Cell>
|
15
|
+
<Data ss:Type="Number">1</Data>
|
16
|
+
</Cell>
|
17
|
+
<Cell>
|
18
|
+
<Data ss:Type="String">text</Data>
|
19
|
+
</Cell>
|
20
|
+
<Cell>
|
21
|
+
<Data ss:Type="Number">123.45</Data>
|
22
|
+
</Cell>
|
23
|
+
<Cell>
|
24
|
+
<Data ss:Type="String">0001267</Data>
|
25
|
+
</Cell>
|
26
|
+
<Cell>
|
27
|
+
<Data ss:Type="String">$45.23</Data>
|
28
|
+
</Cell>
|
29
|
+
</Row>
|
30
|
+
</Table>
|
31
|
+
</Worksheet>
|
32
|
+
</Workbook>
|
data/examples/styles.rb
CHANGED
@@ -1,55 +1,54 @@
|
|
1
1
|
require 'examples/example_workbook'
|
2
2
|
|
3
|
-
|
4
|
-
def name; "styles"; end
|
5
|
-
def build
|
3
|
+
# $ bundle exec ruby examples/styles.rb
|
6
4
|
|
7
|
-
|
8
|
-
wksht.table.columns << Xmlss::Column.new
|
5
|
+
ExampleWorkbook.new("styles") do
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
)
|
7
|
+
worksheet 'styles' do
|
8
|
+
column
|
9
|
+
|
10
|
+
style 'centered' do
|
11
|
+
alignment(:horizontal => :center, :vertical => :center)
|
15
12
|
end
|
16
|
-
wksht.table.rows << Xmlss::Row.new
|
17
|
-
wksht.table.rows[0].cells << Xmlss::Cell.new({
|
18
|
-
:style_id => "centered",
|
19
|
-
:data => Xmlss::Data.new("x")
|
20
|
-
})
|
21
13
|
|
22
|
-
|
14
|
+
row {
|
15
|
+
cell(:style_id => "centered") { data "x" }
|
16
|
+
}
|
17
|
+
|
18
|
+
style 'bordered' do
|
23
19
|
alignment(:wrap_text => true)
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
20
|
+
borders {
|
21
|
+
border(
|
22
|
+
:position => :top,
|
23
|
+
:weight => :hairline,
|
24
|
+
:line_style => :continuous
|
25
|
+
)
|
26
|
+
border(
|
27
|
+
:position => :right,
|
28
|
+
:weight => :medium,
|
29
|
+
:line_style => :continuous
|
30
|
+
)
|
31
|
+
border(
|
32
|
+
:position => :bottom,
|
33
|
+
:weight => :thick,
|
34
|
+
:line_style => :dash_dot,
|
35
|
+
:color => '#00FF00'
|
36
|
+
)
|
37
|
+
border(
|
38
|
+
:position => :left,
|
39
|
+
:weight => :thin,
|
40
|
+
:line_style => :dot
|
41
|
+
)
|
42
|
+
}
|
45
43
|
end
|
46
|
-
wksht.table.rows << Xmlss::Row.new
|
47
|
-
wksht.table.rows[1].cells << Xmlss::Cell.new({
|
48
|
-
:style_id => "bordered",
|
49
|
-
:data => Xmlss::Data.new(%{blah blah blah blah blah\nblah blah blah blah\nblah blah blah blah})
|
50
|
-
})
|
51
44
|
|
52
|
-
|
45
|
+
row {
|
46
|
+
cell(:style_id => "bordered") {
|
47
|
+
data %{blah blah blah blah blah\nblah blah blah blah\nblah blah blah blah}
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
style 'fonted' do
|
53
52
|
font(
|
54
53
|
:bold => true,
|
55
54
|
:color => "#FF0000",
|
@@ -59,13 +58,12 @@ class Styles < ExampleWorkbook
|
|
59
58
|
:underline => true
|
60
59
|
)
|
61
60
|
end
|
62
|
-
wksht.table.rows << Xmlss::Row.new
|
63
|
-
wksht.table.rows[2].cells << Xmlss::Cell.new({
|
64
|
-
:style_id => "fonted",
|
65
|
-
:data => Xmlss::Data.new("Cool Font Styles!!")
|
66
|
-
})
|
67
61
|
|
68
|
-
|
62
|
+
row {
|
63
|
+
cell(:style_id => "fonted") { data "Cool Font Styles!!" }
|
64
|
+
}
|
65
|
+
|
66
|
+
style 'interior' do
|
69
67
|
interior(
|
70
68
|
:color => "#FF0000",
|
71
69
|
:pattern => :diag_cross,
|
@@ -73,13 +71,11 @@ class Styles < ExampleWorkbook
|
|
73
71
|
)
|
74
72
|
font(:color => "#FFFFFF")
|
75
73
|
end
|
76
|
-
wksht.table.rows << Xmlss::Row.new
|
77
|
-
wksht.table.rows[3].cells << Xmlss::Cell.new({
|
78
|
-
:style_id => "interior",
|
79
|
-
:data => Xmlss::Data.new("Weird Styles Man...")
|
80
|
-
})
|
81
74
|
|
82
|
-
|
75
|
+
row {
|
76
|
+
cell(:style_id => "interior") { data "Weird Styles Man..." }
|
77
|
+
}
|
78
|
+
|
83
79
|
end
|
80
|
+
|
84
81
|
end
|
85
|
-
Styles.new.to_file(:format)
|
data/examples/styles.xml
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<Styles>
|
4
|
+
<Style ss:ID="centered">
|
5
|
+
<Alignment ss:Horizontal="Center" ss:Vertical="Center" />
|
6
|
+
</Style>
|
7
|
+
<Style ss:ID="bordered">
|
8
|
+
<Alignment ss:WrapText="1" />
|
9
|
+
<Borders>
|
10
|
+
<Border ss:LineStyle="Continuous" ss:Position="Top" ss:Weight="0" />
|
11
|
+
<Border ss:LineStyle="Continuous" ss:Position="Right" ss:Weight="2" />
|
12
|
+
<Border ss:Color="#00FF00" ss:LineStyle="DashDot" ss:Position="Bottom" ss:Weight="3" />
|
13
|
+
<Border ss:LineStyle="Dot" ss:Position="Left" ss:Weight="1" />
|
14
|
+
</Borders>
|
15
|
+
</Style>
|
16
|
+
<Style ss:ID="fonted">
|
17
|
+
<Font ss:Bold="1" ss:Color="#FF0000" ss:Italic="1" ss:Size="18" ss:StrikeThrough="1" />
|
18
|
+
</Style>
|
19
|
+
<Style ss:ID="interior">
|
20
|
+
<Interior ss:Color="#FF0000" ss:Pattern="DiagCross" ss:PatternColor="#00FFFF" />
|
21
|
+
<Font ss:Color="#FFFFFF" />
|
22
|
+
</Style>
|
23
|
+
</Styles>
|
24
|
+
|
25
|
+
<Worksheet ss:Name="styles">
|
26
|
+
<Table>
|
27
|
+
<Column />
|
28
|
+
<Row>
|
29
|
+
<Cell ss:StyleID="centered">
|
30
|
+
<Data ss:Type="String">x</Data>
|
31
|
+
</Cell>
|
32
|
+
</Row>
|
33
|
+
<Row>
|
34
|
+
<Cell ss:StyleID="bordered">
|
35
|
+
<Data ss:Type="String">blah blah blah blah blah blah blah blah blah blah blah blah blah</Data>
|
36
|
+
</Cell>
|
37
|
+
</Row>
|
38
|
+
<Row>
|
39
|
+
<Cell ss:StyleID="fonted">
|
40
|
+
<Data ss:Type="String">Cool Font Styles!!</Data>
|
41
|
+
</Cell>
|
42
|
+
</Row>
|
43
|
+
<Row>
|
44
|
+
<Cell ss:StyleID="interior">
|
45
|
+
<Data ss:Type="String">Weird Styles Man...</Data>
|
46
|
+
</Cell>
|
47
|
+
</Row>
|
48
|
+
</Table>
|
49
|
+
</Worksheet>
|
50
|
+
</Workbook>
|
data/examples/text.rb
CHANGED
@@ -1,36 +1,26 @@
|
|
1
1
|
require 'examples/example_workbook'
|
2
2
|
|
3
|
-
|
4
|
-
def name; "text"; end
|
5
|
-
def build
|
3
|
+
# $ bundle exec ruby examples/text.rb
|
6
4
|
|
7
|
-
|
8
|
-
self.styles << Xmlss::Style::Base.new('general_text') do
|
9
|
-
alignment(
|
10
|
-
:horizontal => :left,
|
11
|
-
:vertical => :top,
|
12
|
-
:wrap_text => true
|
13
|
-
)
|
14
|
-
number_format(
|
15
|
-
:format => "@" # set format to text explicitly
|
16
|
-
)
|
17
|
-
end
|
5
|
+
ExampleWorkbook.new("text") do
|
18
6
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
7
|
+
style 'general_text' do
|
8
|
+
alignment(:horizontal => :left, :vertical => :top, :wrap_text => true)
|
9
|
+
# set format to text explicitly
|
10
|
+
number_format("@")
|
11
|
+
end
|
12
|
+
|
13
|
+
worksheet('text') do
|
14
|
+
column
|
15
|
+
|
16
|
+
row {
|
17
|
+
cell(:style_id => "general_text") {
|
18
|
+
data %{
|
26
19
|
A blob of text
|
27
20
|
with line breaks
|
28
|
-
and leading space
|
29
|
-
}
|
30
|
-
}
|
31
|
-
wksht.table.rows << row1
|
32
|
-
self.worksheets << wksht
|
33
|
-
|
21
|
+
and leading space}
|
22
|
+
}
|
23
|
+
}
|
34
24
|
end
|
25
|
+
|
35
26
|
end
|
36
|
-
Text.new.to_file(:format)
|
data/examples/text.xml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet">
|
3
|
+
<Styles>
|
4
|
+
<Style ss:ID="general_text">
|
5
|
+
<Alignment ss:Horizontal="Left" ss:Vertical="Top" ss:WrapText="1" />
|
6
|
+
<NumberFormat ss:Format="@" />
|
7
|
+
</Style>
|
8
|
+
</Styles>
|
9
|
+
|
10
|
+
<Worksheet ss:Name="text">
|
11
|
+
<Table>
|
12
|
+
<Column />
|
13
|
+
<Row>
|
14
|
+
<Cell ss:StyleID="general_text">
|
15
|
+
<Data ss:Type="String"> A blob of text with line breaks and leading space</Data>
|
16
|
+
</Cell>
|
17
|
+
</Row>
|
18
|
+
</Table>
|
19
|
+
</Worksheet>
|
20
|
+
</Workbook>
|
@@ -1,28 +1,18 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
module Xmlss
|
1
|
+
module Xmlss; end
|
2
|
+
module Xmlss::Element
|
4
3
|
class Cell
|
5
4
|
|
6
|
-
|
7
|
-
def xml
|
8
|
-
{ :node => :cell,
|
9
|
-
:attributes => [:index, :style_i_d, :formula, :h_ref, :merge_across, :merge_down],
|
10
|
-
:children => [:data] }
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_accessor :style_id, :formula, :href, :merge_across, :merge_down
|
14
|
-
attr_accessor :index, :data
|
5
|
+
attr_accessor :index, :style_id, :formula, :href, :merge_across, :merge_down
|
15
6
|
alias_method :style_i_d, :style_id
|
16
7
|
alias_method :h_ref, :href
|
17
8
|
|
18
|
-
def initialize(attrs={})
|
9
|
+
def initialize(attrs={}, &build)
|
19
10
|
self.index = attrs[:index]
|
20
11
|
self.style_id = attrs[:style_id]
|
21
12
|
self.formula = attrs[:formula]
|
22
13
|
self.href = attrs[:href]
|
23
14
|
self.merge_across = attrs[:merge_across] || 0
|
24
15
|
self.merge_down = attrs[:merge_down] || 0
|
25
|
-
self.data = attrs[:data]
|
26
16
|
end
|
27
17
|
|
28
18
|
[:index, :merge_across, :merge_down].each do |meth|
|
@@ -1,12 +1,7 @@
|
|
1
|
-
module Xmlss
|
1
|
+
module Xmlss; end
|
2
|
+
module Xmlss::Element
|
2
3
|
class Column
|
3
4
|
|
4
|
-
include Xmlss::Xml
|
5
|
-
def xml
|
6
|
-
{ :node => :column,
|
7
|
-
:attributes => [:style_i_d, :width, :auto_fit_width, :hidden] }
|
8
|
-
end
|
9
|
-
|
10
5
|
attr_accessor :style_id, :width, :auto_fit_width, :hidden
|
11
6
|
alias_method :style_i_d, :style_id
|
12
7
|
|
@@ -1,17 +1,12 @@
|
|
1
1
|
require 'date'
|
2
|
+
require 'enumeration'
|
2
3
|
|
3
|
-
module Xmlss
|
4
|
+
module Xmlss; end
|
5
|
+
module Xmlss::Element
|
4
6
|
class Data
|
5
7
|
|
6
8
|
LB = " "
|
7
9
|
|
8
|
-
include Xmlss::Xml
|
9
|
-
def xml
|
10
|
-
{ :node => :data,
|
11
|
-
:attributes => [:type],
|
12
|
-
:value => :xml_value }
|
13
|
-
end
|
14
|
-
|
15
10
|
include Enumeration
|
16
11
|
enum :type, {
|
17
12
|
:number => "Number",
|
@@ -36,13 +31,13 @@ module Xmlss
|
|
36
31
|
end
|
37
32
|
|
38
33
|
def xml_value
|
39
|
-
case value
|
34
|
+
case self.value
|
40
35
|
when ::Date, ::Time, ::DateTime
|
41
|
-
value.strftime("%Y-%m-%dT%H:%M:%S")
|
36
|
+
self.value.strftime("%Y-%m-%dT%H:%M:%S")
|
42
37
|
when ::String, ::Symbol
|
43
|
-
value.to_s.gsub(/(\r|\n)+/, LB)
|
38
|
+
self.value.to_s.gsub(/(\r|\n)+/, LB)
|
44
39
|
else
|
45
|
-
value.to_s
|
40
|
+
self.value.to_s
|
46
41
|
end
|
47
42
|
end
|
48
43
|
|
@@ -1,18 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
module Xmlss
|
1
|
+
module Xmlss; end
|
2
|
+
module Xmlss::Element
|
5
3
|
class Row
|
6
4
|
|
7
|
-
include Xmlss::Xml
|
8
|
-
def xml
|
9
|
-
{ :node => :row,
|
10
|
-
:attributes => [:style_i_d, :height, :auto_fit_height, :hidden],
|
11
|
-
:children => [:cells] }
|
12
|
-
end
|
13
|
-
|
14
5
|
attr_accessor :style_id, :height, :auto_fit_height, :hidden
|
15
|
-
attr_accessor :cells
|
16
6
|
alias_method :style_i_d, :style_id
|
17
7
|
|
18
8
|
def initialize(attrs={})
|
@@ -20,7 +10,6 @@ module Xmlss
|
|
20
10
|
self.height = attrs[:height]
|
21
11
|
self.auto_fit_height = attrs[:auto_fit_height] || false
|
22
12
|
self.hidden = attrs[:hidden] || false
|
23
|
-
self.cells = Xmlss::ItemSet.new(nil, attrs[:cells] || [])
|
24
13
|
end
|
25
14
|
|
26
15
|
def height=(value)
|
@@ -1,20 +1,16 @@
|
|
1
|
-
require 'xmlss/
|
1
|
+
require 'xmlss/element/column'
|
2
|
+
require 'xmlss/element/row'
|
3
|
+
require 'xmlss/element/cell'
|
4
|
+
require 'xmlss/element/data'
|
2
5
|
|
3
|
-
module Xmlss
|
6
|
+
module Xmlss; end
|
7
|
+
module Xmlss::Element
|
4
8
|
class Worksheet
|
5
9
|
|
6
|
-
|
7
|
-
def xml
|
8
|
-
{ :node => :worksheet,
|
9
|
-
:attributes => [:name],
|
10
|
-
:children => [:table] }
|
11
|
-
end
|
12
|
-
|
13
|
-
attr_accessor :name, :table
|
10
|
+
attr_accessor :name
|
14
11
|
|
15
12
|
def initialize(name, attrs={})
|
16
13
|
self.name = name
|
17
|
-
self.table = attrs[:table] || Table.new
|
18
14
|
end
|
19
15
|
|
20
16
|
def name=(value)
|
@@ -24,13 +20,6 @@ module Xmlss
|
|
24
20
|
@name = sanitized_name(value.to_s)
|
25
21
|
end
|
26
22
|
|
27
|
-
def table=(value)
|
28
|
-
if value.nil? || !value.kind_of?(Table)
|
29
|
-
raise ArgumentError, "you must set table to an actual Table object"
|
30
|
-
end
|
31
|
-
@table = value
|
32
|
-
end
|
33
|
-
|
34
23
|
private
|
35
24
|
|
36
25
|
def sanitized_name(name)
|
@@ -1,10 +1,7 @@
|
|
1
|
+
require 'xmlss/style/base'
|
2
|
+
|
1
3
|
module Xmlss::Style
|
2
4
|
class Alignment
|
3
|
-
include Xmlss::Xml
|
4
|
-
def xml
|
5
|
-
{ :node => :alignment,
|
6
|
-
:attributes => [:horizontal, :vertical, :wrap_text, :rotate] }
|
7
|
-
end
|
8
5
|
|
9
6
|
include Enumeration
|
10
7
|
enum :horizontal, {
|
@@ -33,11 +30,7 @@ module Xmlss::Style
|
|
33
30
|
|
34
31
|
def rotate=(value)
|
35
32
|
@rotate = if value.kind_of?(::Numeric)
|
36
|
-
|
37
|
-
value.round
|
38
|
-
else
|
39
|
-
nil
|
40
|
-
end
|
33
|
+
value <= 90 && value >= -90 ? value.round : nil
|
41
34
|
else
|
42
35
|
nil
|
43
36
|
end
|
data/lib/xmlss/style/base.rb
CHANGED
@@ -1,4 +1,7 @@
|
|
1
|
-
|
1
|
+
module Xmlss;end
|
2
|
+
module Xmlss::Style; end
|
3
|
+
|
4
|
+
require 'enumeration'
|
2
5
|
require 'xmlss/style/alignment'
|
3
6
|
require 'xmlss/style/border'
|
4
7
|
require 'xmlss/style/font'
|
@@ -8,56 +11,14 @@ require 'xmlss/style/protection'
|
|
8
11
|
|
9
12
|
module Xmlss::Style
|
10
13
|
class Base
|
11
|
-
include Xmlss::Xml
|
12
|
-
def xml
|
13
|
-
{ :node => :style,
|
14
|
-
:attributes => [:i_d],
|
15
|
-
:children => [
|
16
|
-
:alignment, :borders, :font, :interior, :number_format, :protection
|
17
|
-
]}
|
18
|
-
end
|
19
14
|
|
20
|
-
attr_reader :id
|
15
|
+
attr_reader :id
|
21
16
|
alias_method :i_d, :id
|
22
|
-
attr_writer :alignment, :font, :interior, :number_format, :protection
|
23
17
|
|
24
|
-
def initialize(id
|
18
|
+
def initialize(id)
|
25
19
|
raise ArgumentError, "please choose an id for the style" if id.nil?
|
26
20
|
@id = id.to_s
|
27
|
-
self.borders = Xmlss::ItemSet.new(:borders)
|
28
|
-
instance_eval(&block) if block
|
29
|
-
end
|
30
|
-
|
31
|
-
def borders=(value)
|
32
|
-
if !value.kind_of? Xmlss::ItemSet
|
33
|
-
raise ArgumentError, "must set borders to an Xmlss::ItemSet value"
|
34
|
-
end
|
35
|
-
@borders = value
|
36
|
-
end
|
37
|
-
|
38
|
-
def border(opts = nil)
|
39
|
-
valid_attrs?(opts) do |attrs|
|
40
|
-
@borders << Border.new(attrs)
|
41
|
-
end
|
42
21
|
end
|
43
22
|
|
44
|
-
[:alignment, :font, :interior, :number_format, :protection].each do |meth|
|
45
|
-
define_method(meth) do |*args|
|
46
|
-
valid_attrs?(args.first) do |attrs|
|
47
|
-
instance_variable_set("@#{meth}", klass(meth).new(attrs))
|
48
|
-
end
|
49
|
-
instance_variable_get("@#{meth}")
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
protected
|
54
|
-
|
55
|
-
def valid_attrs?(attrs)
|
56
|
-
yield attrs if block_given? && attrs && attrs.kind_of?(::Hash)
|
57
|
-
end
|
58
|
-
|
59
|
-
def klass(method_name)
|
60
|
-
Xmlss::Style.const_get(Xmlss.classify(method_name))
|
61
|
-
end
|
62
23
|
end
|
63
24
|
end
|
data/lib/xmlss/style/border.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
+
require 'xmlss/style/base'
|
2
|
+
|
1
3
|
module Xmlss::Style
|
2
4
|
class Border
|
3
|
-
include Xmlss::Xml
|
4
|
-
def xml
|
5
|
-
{ :node => :border,
|
6
|
-
:attributes => [:color, :position, :weight, :line_style] }
|
7
|
-
end
|
8
5
|
|
9
6
|
include Enumeration
|
7
|
+
|
10
8
|
enum :position, {
|
11
9
|
:left => "Left",
|
12
10
|
:top => "Top",
|
@@ -15,12 +13,14 @@ module Xmlss::Style
|
|
15
13
|
:diagonal_left => "DiagonalLeft",
|
16
14
|
:diagonal_right => "DiagonalRight"
|
17
15
|
}
|
16
|
+
|
18
17
|
enum :weight, {
|
19
18
|
:hairline => 0,
|
20
19
|
:thin => 1,
|
21
20
|
:medium => 2,
|
22
21
|
:thick => 3
|
23
22
|
}
|
23
|
+
|
24
24
|
enum :line_style, {
|
25
25
|
:none => "None",
|
26
26
|
:continuous => "Continuous",
|
data/lib/xmlss/style/font.rb
CHANGED
@@ -1,14 +1,7 @@
|
|
1
|
+
require 'xmlss/style/base'
|
2
|
+
|
1
3
|
module Xmlss::Style
|
2
4
|
class Font
|
3
|
-
include Xmlss::Xml
|
4
|
-
def xml
|
5
|
-
{ :node => :font,
|
6
|
-
:attributes => [
|
7
|
-
:bold, :color, :italic, :size, :shadow,
|
8
|
-
:strike_through, :underline, :vertical_align,
|
9
|
-
:font_name
|
10
|
-
] }
|
11
|
-
end
|
12
5
|
|
13
6
|
include Enumeration
|
14
7
|
enum :underline, {
|
data/lib/xmlss/style/interior.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
|
+
require 'xmlss/style/base'
|
2
|
+
|
1
3
|
module Xmlss::Style
|
2
4
|
class NumberFormat
|
3
|
-
include Xmlss::Xml
|
4
|
-
def xml
|
5
|
-
{ :node => :number_format,
|
6
|
-
:attributes => [:format] }
|
7
|
-
end
|
8
5
|
|
9
6
|
attr_accessor :format
|
10
7
|
|
11
|
-
def initialize(
|
12
|
-
self.format =
|
8
|
+
def initialize(format=nil)
|
9
|
+
self.format = format
|
13
10
|
end
|
14
11
|
|
15
12
|
def format=(value)
|
@@ -1,15 +1,12 @@
|
|
1
|
+
require 'xmlss/style/base'
|
2
|
+
|
1
3
|
module Xmlss::Style
|
2
4
|
class Protection
|
3
|
-
include Xmlss::Xml
|
4
|
-
def xml
|
5
|
-
{ :node => :protection,
|
6
|
-
:attributes => [:protect] }
|
7
|
-
end
|
8
5
|
|
9
6
|
attr_accessor :protect
|
10
7
|
|
11
|
-
def initialize(
|
12
|
-
self.protect =
|
8
|
+
def initialize(value=nil)
|
9
|
+
self.protect = value
|
13
10
|
end
|
14
11
|
|
15
12
|
def protected?; !!self.protect; end
|