osheet 0.10.0 → 1.0.0.rc.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +0 -1
- data/Gemfile.lock +9 -6
- data/Rakefile +35 -19
- data/bench/bench_runner.rb +91 -0
- data/bench/profiler_runner.rb +1 -0
- data/examples/basic.rb +1 -1
- data/examples/basic.xls +2 -1
- data/examples/basic_with_templates.rb +2 -2
- data/examples/basic_with_templates.xls +3 -3
- data/examples/formats.rb +2 -2
- data/examples/formats.xls +46 -46
- data/examples/formula.rb +2 -2
- data/examples/styles.rb +2 -2
- data/examples/styles.xls +5 -5
- data/examples/trivial.rb +2 -2
- data/lib/osheet/cell.rb +48 -46
- data/lib/osheet/column.rb +23 -29
- data/lib/osheet/format.rb +3 -3
- data/lib/osheet/meta_element.rb +2 -1
- data/lib/osheet/mixin.rb +21 -9
- data/lib/osheet/partial.rb +5 -9
- data/lib/osheet/row.rb +28 -32
- data/lib/osheet/style.rb +11 -25
- data/lib/osheet/styled_element.rb +9 -1
- data/lib/osheet/template.rb +3 -8
- data/lib/osheet/version.rb +1 -1
- data/lib/osheet/workbook.rb +135 -43
- data/lib/osheet/workbook_api.rb +208 -0
- data/lib/osheet/workbook_element.rb +225 -8
- data/lib/osheet/worksheet.rb +22 -28
- data/lib/osheet/xmlss_writer/style_cache.rb +64 -0
- data/lib/osheet/xmlss_writer/style_settings.rb +148 -0
- data/lib/osheet/xmlss_writer.rb +143 -1
- data/lib/osheet.rb +3 -29
- data/osheet.gemspec +4 -1
- data/test/cell_test.rb +33 -98
- data/test/column_test.rb +20 -88
- data/test/{mixins.rb → fixtures/mixins.rb} +6 -4
- data/test/fixtures/test_writer.rb +68 -0
- data/test/format_test.rb +2 -2
- data/test/helper.rb +34 -68
- data/test/mixin_test.rb +37 -43
- data/test/partial_test.rb +3 -26
- data/test/row_test.rb +32 -85
- data/test/style_test.rb +9 -26
- data/test/template_test.rb +5 -6
- data/test/workbook_element_test.rb +231 -0
- data/test/workbook_test.rb +225 -116
- data/test/worksheet_test.rb +51 -98
- data/test/xmlss_writer/api_test.rb +139 -0
- data/test/xmlss_writer/style_cache_test.rb +65 -0
- data/test/xmlss_writer/style_settings_test.rb +263 -0
- data/test/xmlss_writer/styles_test.rb +121 -153
- data/test/xmlss_writer_test.rb +91 -0
- metadata +75 -50
- data/lib/osheet/associations.rb +0 -58
- data/lib/osheet/instance.rb +0 -30
- data/lib/osheet/markup_element.rb +0 -22
- data/lib/osheet/partial_set.rb +0 -57
- data/lib/osheet/railtie.rb +0 -9
- data/lib/osheet/style_set.rb +0 -39
- data/lib/osheet/template_set.rb +0 -51
- data/lib/osheet/view_handler/rails.rb +0 -44
- data/lib/osheet/view_handler/tilt.rb +0 -42
- data/lib/osheet/view_handler.rb +0 -2
- data/lib/osheet/worksheet_element.rb +0 -17
- data/lib/osheet/xmlss_writer/base.rb +0 -49
- data/lib/osheet/xmlss_writer/elements.rb +0 -56
- data/lib/osheet/xmlss_writer/styles.rb +0 -216
- data/test/osheet_test.rb +0 -13
- data/test/partial_set_test.rb +0 -64
- data/test/style_set_test.rb +0 -47
- data/test/template_set_test.rb +0 -74
- data/test/xmlss_writer/base_test.rb +0 -103
- data/test/xmlss_writer/elements_test.rb +0 -172
@@ -1,56 +0,0 @@
|
|
1
|
-
module Osheet::XmlssWriter::Elements
|
2
|
-
|
3
|
-
protected
|
4
|
-
|
5
|
-
def worksheet(xworkbook, oworksheet)
|
6
|
-
xworkbook.worksheet(oworksheet.attributes[:name]) do
|
7
|
-
oworksheet.columns.each { |ocolumn| column(xworkbook, ocolumn) }
|
8
|
-
oworksheet.rows.each { |orow| row(xworkbook, orow) }
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
def column(xworkbook, ocolumn)
|
13
|
-
xworkbook.column({
|
14
|
-
:style_id => style_id(xworkbook, ocolumn.attributes[:style_class]),
|
15
|
-
:width => ocolumn.attributes[:width],
|
16
|
-
:auto_fit_width => ocolumn.attributes[:autofit],
|
17
|
-
:hidden => ocolumn.attributes[:hidden]
|
18
|
-
})
|
19
|
-
end
|
20
|
-
|
21
|
-
def row(xworkbook, orow)
|
22
|
-
xworkbook.row({
|
23
|
-
:style_id => style_id(xworkbook, orow.attributes[:style_class]),
|
24
|
-
:height => orow.attributes[:height],
|
25
|
-
:auto_fit_height => orow.attributes[:autofit],
|
26
|
-
:hidden => orow.attributes[:hidden]
|
27
|
-
}) do
|
28
|
-
orow.cells.each { |ocell| cell(xworkbook, ocell) }
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
def cell(xworkbook, ocell)
|
33
|
-
xworkbook.cell({
|
34
|
-
:style_id => style_id(xworkbook, ocell.attributes[:style_class], ocell.attributes[:format]),
|
35
|
-
:href => ocell.attributes[:href],
|
36
|
-
:index => ocell.attributes[:index],
|
37
|
-
:merge_across => cell_merge(ocell.attributes[:colspan]),
|
38
|
-
:merge_down => cell_merge(ocell.attributes[:rowspan]),
|
39
|
-
:formula => ocell.attributes[:formula]
|
40
|
-
}) do
|
41
|
-
data(xworkbook, ocell.attributes[:data])
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def data(xworkbook, odata)
|
46
|
-
xworkbook.data(odata)
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
|
51
|
-
# convert osheet col/row span value to xmlss merge value
|
52
|
-
def cell_merge(span)
|
53
|
-
span.kind_of?(::Fixnum) && span > 1 ? span-1 : 0
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
@@ -1,216 +0,0 @@
|
|
1
|
-
require 'osheet/format'
|
2
|
-
module Osheet::XmlssWriter::Styles
|
3
|
-
|
4
|
-
protected
|
5
|
-
|
6
|
-
def style_id(xworkbook, style_class, oformat=nil)
|
7
|
-
xstyle = style(xworkbook, style_class, oformat)
|
8
|
-
xstyle.nil? ? '' : xstyle.id
|
9
|
-
end
|
10
|
-
|
11
|
-
def style(xworkbook, style_class, oformat=nil)
|
12
|
-
oformat ||= Osheet::Format.new(:general)
|
13
|
-
|
14
|
-
# generate the style key for the given class/format
|
15
|
-
key = style_key(style_class, oformat.key)
|
16
|
-
|
17
|
-
# see if we have already created/used an xmlss style for the given key
|
18
|
-
xstyle = @used_xstyles.find{ |xs| xs.id == key }
|
19
|
-
|
20
|
-
# if not, create an xmlss style for the key and add it to the used cache
|
21
|
-
if !key.empty? && xstyle.nil?
|
22
|
-
xstyle = xmlss_style(xworkbook, key, oformat)
|
23
|
-
@used_xstyles << xstyle
|
24
|
-
end
|
25
|
-
|
26
|
-
xstyle
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def style_key(style_class, format_key)
|
32
|
-
(style_class || '').strip.split(/\s+/).collect do |c|
|
33
|
-
".#{c}"
|
34
|
-
end.join('') + (format_key.nil? || format_key.empty? ? '' : "..#{format_key}")
|
35
|
-
end
|
36
|
-
|
37
|
-
def xmlss_style(xworkbook, key, oformat)
|
38
|
-
# take all the matching osheet styles for the given key,
|
39
|
-
# and build up xmlss style settings for them
|
40
|
-
settings = style_settings(key)
|
41
|
-
|
42
|
-
xworkbook.style(key) do
|
43
|
-
|
44
|
-
if settings.has_key?(:align) && !settings[:align].empty?
|
45
|
-
xworkbook.alignment(settings[:align])
|
46
|
-
end
|
47
|
-
|
48
|
-
if settings.has_key?(:font) && !settings[:font].empty?
|
49
|
-
xworkbook.font(settings[:font])
|
50
|
-
end
|
51
|
-
|
52
|
-
if settings.has_key?(:bg) && !settings[:bg].empty?
|
53
|
-
xworkbook.interior(settings[:bg])
|
54
|
-
end
|
55
|
-
|
56
|
-
border_set = ::Osheet::Style::BORDERS.inject([]) do |set, bp|
|
57
|
-
if settings.has_key?(bp) && !settings[bp].empty?
|
58
|
-
set << settings[bp]
|
59
|
-
end
|
60
|
-
set
|
61
|
-
end
|
62
|
-
if !border_set.empty?
|
63
|
-
xworkbook.borders {
|
64
|
-
border_set.each { |border_setting| xworkbook.border(border_setting) }
|
65
|
-
}
|
66
|
-
end
|
67
|
-
|
68
|
-
if oformat
|
69
|
-
xworkbook.number_format(oformat.style)
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
# TODO: would be nice to have a class handle all of the osheet-xmlss style translations...
|
76
|
-
|
77
|
-
def style_settings(key)
|
78
|
-
@oworkbook.styles.for(key).inject({}) do |style_settings, ostyle|
|
79
|
-
merged_settings(style_settings, ostyle_settings(ostyle))
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
def merged_settings(current, add)
|
84
|
-
# concat values for keys in both sets
|
85
|
-
current.keys.each do |k|
|
86
|
-
current[k].merge!(add.delete(k) || {})
|
87
|
-
end
|
88
|
-
# merge keys for anything not in the current
|
89
|
-
current.merge(add)
|
90
|
-
end
|
91
|
-
|
92
|
-
def ostyle_settings(ostyle)
|
93
|
-
ostyle_settings = {}
|
94
|
-
ostyle.attributes.each do |k,v|
|
95
|
-
unless v.empty?
|
96
|
-
ostyle_settings[k] = send("#{k}_settings", v)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
ostyle_settings
|
100
|
-
end
|
101
|
-
|
102
|
-
def align_settings(align_cmds)
|
103
|
-
align_cmds.inject({}) do |align_settings, align_cmd|
|
104
|
-
if (setting = case align_cmd
|
105
|
-
when :left, :center, :right
|
106
|
-
[:horizontal, align_cmd]
|
107
|
-
when :top, :bottom
|
108
|
-
[:vertical, align_cmd]
|
109
|
-
when :middle
|
110
|
-
[:vertical, :center]
|
111
|
-
when :wrap
|
112
|
-
[:wrap_text, true]
|
113
|
-
when ::Fixnum
|
114
|
-
[:rotate, align_cmd]
|
115
|
-
end
|
116
|
-
)
|
117
|
-
align_settings[setting.first] = setting.last
|
118
|
-
end
|
119
|
-
align_settings
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
def font_settings(font_cmds)
|
124
|
-
font_cmds.inject({}) do |font_settings, font_cmd|
|
125
|
-
if (setting = case font_cmd
|
126
|
-
when ::Fixnum
|
127
|
-
[:size, font_cmd]
|
128
|
-
when ::String
|
129
|
-
if font_cmd =~ /^#/
|
130
|
-
[:color, font_cmd]
|
131
|
-
else
|
132
|
-
[:name, font_cmd]
|
133
|
-
end
|
134
|
-
when :bold, :italic, :shadow
|
135
|
-
[font_cmd, true]
|
136
|
-
when :subscript, :superscript
|
137
|
-
[:alignment, font_cmd]
|
138
|
-
when :strikethrough
|
139
|
-
[:strike_through, true]
|
140
|
-
when :underline
|
141
|
-
[:underline, :single]
|
142
|
-
when :double_underline
|
143
|
-
[:underline, :double]
|
144
|
-
when :accounting_underline
|
145
|
-
[:underline, :single_accounting]
|
146
|
-
when :double_accounting_underline
|
147
|
-
[:underline, :double_accounting]
|
148
|
-
end
|
149
|
-
)
|
150
|
-
font_settings[setting.first] = setting.last
|
151
|
-
end
|
152
|
-
font_settings
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
def bg_settings(bg_cmds)
|
157
|
-
bg_cmds.inject({}) do |bg_settings, bg_cmd|
|
158
|
-
if (settings = case bg_cmd
|
159
|
-
when ::String
|
160
|
-
if bg_cmd =~ /^#/
|
161
|
-
[[:color, bg_cmd]]
|
162
|
-
end
|
163
|
-
when ::Symbol
|
164
|
-
if ::Xmlss::Style::Interior.pattern_set.include?(bg_cmd)
|
165
|
-
[[:pattern, bg_cmd]]
|
166
|
-
end
|
167
|
-
when ::Hash
|
168
|
-
bg_cmd.inject([]) do |set, kv|
|
169
|
-
if ::Xmlss::Style::Interior.pattern_set.include?(kv.first) && kv.last =~ /^#/
|
170
|
-
set << [:pattern, kv.first]
|
171
|
-
set << [:pattern_color, kv.last]
|
172
|
-
end
|
173
|
-
set
|
174
|
-
end
|
175
|
-
end
|
176
|
-
)
|
177
|
-
settings.each do |setting|
|
178
|
-
bg_settings[setting.first] = setting.last
|
179
|
-
end
|
180
|
-
end
|
181
|
-
if !bg_settings[:color].nil? && bg_settings[:pattern].nil?
|
182
|
-
bg_settings[:pattern] = :solid
|
183
|
-
end
|
184
|
-
bg_settings
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
def border_settings(border_cmds)
|
189
|
-
border_cmds.inject({}) do |border_settings, border_cmd|
|
190
|
-
if (setting = case border_cmd
|
191
|
-
when ::String
|
192
|
-
if border_cmd =~ /^#/
|
193
|
-
[:color, border_cmd]
|
194
|
-
end
|
195
|
-
when ::Symbol
|
196
|
-
if ::Xmlss::Style::Border.position_set.include?(border_cmd)
|
197
|
-
[:position, border_cmd]
|
198
|
-
elsif ::Xmlss::Style::Border.weight_set.include?(border_cmd)
|
199
|
-
[:weight, border_cmd]
|
200
|
-
elsif ::Xmlss::Style::Border.line_style_set.include?(border_cmd)
|
201
|
-
[:line_style, border_cmd]
|
202
|
-
end
|
203
|
-
end
|
204
|
-
)
|
205
|
-
border_settings[setting.first] = setting.last
|
206
|
-
end
|
207
|
-
border_settings
|
208
|
-
end
|
209
|
-
end
|
210
|
-
::Osheet::Style::BORDER_POSITIONS.each do |p|
|
211
|
-
define_method("border_#{p}_settings") do |cmds|
|
212
|
-
border_settings(cmds+[p])
|
213
|
-
end
|
214
|
-
end
|
215
|
-
|
216
|
-
end
|
data/test/osheet_test.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
|
3
|
-
class OsheetTest < Assert::Context
|
4
|
-
desc "Osheet"
|
5
|
-
subject {::Osheet}
|
6
|
-
|
7
|
-
should have_instance_method :register
|
8
|
-
|
9
|
-
should "use provide a default mime type" do
|
10
|
-
assert_equal "application/vnd.ms-excel", Osheet::MIME_TYPE
|
11
|
-
end
|
12
|
-
|
13
|
-
end
|
data/test/partial_set_test.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
require "osheet/partial_set"
|
3
|
-
|
4
|
-
module Osheet
|
5
|
-
|
6
|
-
class PartialSetTest < Assert::Context
|
7
|
-
desc "Osheet::PartialSet"
|
8
|
-
before { @ps = PartialSet.new }
|
9
|
-
subject { @ps }
|
10
|
-
|
11
|
-
should "be a Hash" do
|
12
|
-
assert_kind_of ::Hash, subject
|
13
|
-
end
|
14
|
-
|
15
|
-
should have_instance_method :<<
|
16
|
-
should have_reader :get
|
17
|
-
|
18
|
-
should "verify set objs are partials" do
|
19
|
-
assert_raises ArgumentError do
|
20
|
-
subject.send(:verify, {})
|
21
|
-
end
|
22
|
-
assert_nothing_raised do
|
23
|
-
subject.send(:verify, Partial.new(:poo) {})
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
should "key using name values" do
|
28
|
-
assert_equal 'poo', subject.send(:key, :poo)
|
29
|
-
end
|
30
|
-
|
31
|
-
should "key on partial objs" do
|
32
|
-
assert_equal 'poo', subject.send(:partial_key, Partial.new(:poo) {})
|
33
|
-
end
|
34
|
-
|
35
|
-
should "init the key in the set when verifying" do
|
36
|
-
key = subject.send(:verify, Partial.new(:thing) {})
|
37
|
-
assert_equal 'thing', key
|
38
|
-
assert_equal({'thing' => nil}, subject)
|
39
|
-
end
|
40
|
-
|
41
|
-
should "push partials onto the set" do
|
42
|
-
assert_nothing_raised do
|
43
|
-
subject << Partial.new(:poo) {}
|
44
|
-
subject << Partial.new(:not_poo) {}
|
45
|
-
subject << Partial.new(:awesome) {}
|
46
|
-
subject << Partial.new(:poo) {}
|
47
|
-
end
|
48
|
-
|
49
|
-
assert_equal 3, subject.keys.size
|
50
|
-
assert subject["poo"]
|
51
|
-
assert_kind_of Partial, subject["poo"]
|
52
|
-
end
|
53
|
-
|
54
|
-
should "lookup a partial by name" do
|
55
|
-
p = Partial.new(:poo) {}
|
56
|
-
subject << p
|
57
|
-
assert_equal p, subject.get(:poo)
|
58
|
-
assert_equal p, subject.get('poo')
|
59
|
-
assert_equal nil, subject.get(:ugh)
|
60
|
-
end
|
61
|
-
|
62
|
-
end
|
63
|
-
|
64
|
-
end
|
data/test/style_set_test.rb
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
require "osheet/style_set"
|
3
|
-
|
4
|
-
module Osheet
|
5
|
-
class StyleSetTest < Assert::Context
|
6
|
-
desc "Osheet::StyleSet"
|
7
|
-
before { @set = StyleSet.new }
|
8
|
-
subject { @set }
|
9
|
-
|
10
|
-
should "be an Array" do
|
11
|
-
assert_kind_of ::Array, subject
|
12
|
-
end
|
13
|
-
|
14
|
-
should have_reader :for
|
15
|
-
|
16
|
-
should "verify Template objs" do
|
17
|
-
assert_raises ArgumentError do
|
18
|
-
subject.send(:verify, {})
|
19
|
-
end
|
20
|
-
assert_nothing_raised do
|
21
|
-
subject.send(:verify, Style.new('.awesome') {})
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
should "be able to lookup styles by class" do
|
26
|
-
subject << (a = Style.new('.awesome') {})
|
27
|
-
subject << (at = Style.new('.awesome.thing') {})
|
28
|
-
subject << (b = Style.new('.boring') {})
|
29
|
-
subject << (bt = Style.new('.boring.thing') {})
|
30
|
-
subject << (a_b = Style.new('.awesome', '.boring') {})
|
31
|
-
subject << (t = Style.new('.thing') {})
|
32
|
-
subject << (s = Style.new('.stupid') {})
|
33
|
-
|
34
|
-
{ 'awesome' => [a, a_b],
|
35
|
-
'boring' => [b, a_b],
|
36
|
-
'thing' => [t],
|
37
|
-
'awesome thing' => [a, at, a_b, t],
|
38
|
-
'thing awesome' => [a, at, a_b, t],
|
39
|
-
'other' => []
|
40
|
-
}.each do |style_class, styles_set|
|
41
|
-
assert_equal styles_set, subject.for(style_class)
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
data/test/template_set_test.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
require "osheet/template_set"
|
3
|
-
|
4
|
-
module Osheet
|
5
|
-
class TemplateSetTest < Assert::Context
|
6
|
-
desc "Osheet::TemplateSet"
|
7
|
-
before { @set = TemplateSet.new }
|
8
|
-
subject { @set }
|
9
|
-
|
10
|
-
should "be a PartialSet" do
|
11
|
-
assert_kind_of PartialSet, subject
|
12
|
-
end
|
13
|
-
|
14
|
-
should "verify set objs are templates" do
|
15
|
-
assert_raises ArgumentError do
|
16
|
-
subject.send(:verify, {})
|
17
|
-
end
|
18
|
-
assert_nothing_raised do
|
19
|
-
subject.send(:verify, Template.new(:row, :poo) {})
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
should "key templates using an array of their element and name" do
|
24
|
-
assert_equal ['row','poo'], subject.send(:key, :row, :poo)
|
25
|
-
end
|
26
|
-
|
27
|
-
should "key on templates objs" do
|
28
|
-
assert_equal ['row', 'poo'], subject.send(:template_key, Template.new(:row, :poo) {})
|
29
|
-
end
|
30
|
-
|
31
|
-
should "init the key in the set when verifying" do
|
32
|
-
key = subject.send(:verify, Template.new(:row, :poo) {})
|
33
|
-
assert_equal ['row', 'poo'], key
|
34
|
-
assert_equal({
|
35
|
-
key.first => { key.last => nil }
|
36
|
-
}, subject)
|
37
|
-
end
|
38
|
-
|
39
|
-
should "push templates onto the set" do
|
40
|
-
assert_nothing_raised do
|
41
|
-
subject << Template.new(:row, :poo) {}
|
42
|
-
subject << Template.new(:row, :not_poo) {}
|
43
|
-
subject << Template.new(:column, :awesome) {}
|
44
|
-
subject << Template.new(:column, :not_awesome) {}
|
45
|
-
end
|
46
|
-
|
47
|
-
assert_equal 2, subject.keys.size
|
48
|
-
assert subject["row"]
|
49
|
-
assert_equal 2, subject["row"].keys.size
|
50
|
-
assert subject["row"]["poo"]
|
51
|
-
assert_kind_of Template, subject["row"]["poo"]
|
52
|
-
assert subject["row"]["not_poo"]
|
53
|
-
assert_kind_of Template, subject["row"]["not_poo"]
|
54
|
-
assert subject["column"]
|
55
|
-
assert_equal 2, subject["column"].keys.size
|
56
|
-
assert subject["column"]["awesome"]
|
57
|
-
assert_kind_of Template, subject["column"]["awesome"]
|
58
|
-
assert subject["column"]["not_awesome"]
|
59
|
-
assert_kind_of Template, subject["column"]["not_awesome"]
|
60
|
-
end
|
61
|
-
|
62
|
-
should "lookup a template by element, name" do
|
63
|
-
t = Template.new(:row, :poo) {}
|
64
|
-
subject << t
|
65
|
-
assert_equal t, subject.get(:row, :poo)
|
66
|
-
assert_equal t, subject.get('row', 'poo')
|
67
|
-
|
68
|
-
assert_equal nil, subject.get(:row, :ugh)
|
69
|
-
assert_equal nil, subject.get(:col, :ugh)
|
70
|
-
end
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
require 'osheet/xmlss_writer'
|
3
|
-
|
4
|
-
module Osheet
|
5
|
-
|
6
|
-
class XmlssWriter::BaseTest < Assert::Context
|
7
|
-
desc "XmlssWriter::Base"
|
8
|
-
before { @writer = XmlssWriter::Base.new }
|
9
|
-
subject { @writer }
|
10
|
-
|
11
|
-
should have_readers :used_xstyles
|
12
|
-
should have_writer :oworkbook
|
13
|
-
should have_instance_methods :xworkbook
|
14
|
-
|
15
|
-
end
|
16
|
-
|
17
|
-
class XmlssWriter::WorkbookTests < XmlssWriter::BaseTest
|
18
|
-
before do
|
19
|
-
@workbook = Workbook.new {
|
20
|
-
title "xmlss"
|
21
|
-
worksheet { name "testsheet1" }
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
should "only allow writing an Osheet::Workbook" do
|
26
|
-
assert_nothing_raised do
|
27
|
-
subject.oworkbook = @workbook
|
28
|
-
end
|
29
|
-
assert_raises ArgumentError do
|
30
|
-
subject.oworkbook = "poo"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
should "not allow writing a workbook that has multiple worksheets with the same name" do
|
35
|
-
assert_raises ArgumentError do
|
36
|
-
subject.workbook = Workbook.new {
|
37
|
-
title "invalid"
|
38
|
-
worksheet { name "testsheet1" }
|
39
|
-
worksheet { name "testsheet1" }
|
40
|
-
}
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
should "create an Xmlss workbook" do
|
45
|
-
subject.oworkbook = @workbook
|
46
|
-
assert_kind_of ::Xmlss::Workbook, subject.xworkbook
|
47
|
-
|
48
|
-
assert_equal(
|
49
|
-
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles></Styles><Worksheet ss:Name=\"testsheet1\"><Table></Table></Worksheet></Workbook>",
|
50
|
-
subject.xworkbook.to_s
|
51
|
-
)
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
55
|
-
|
56
|
-
class XmlssWriter::ToFileTests < Assert::Context
|
57
|
-
desc "XmlssWriter::Base"
|
58
|
-
before do
|
59
|
-
@writer = XmlssWriter::Base.new({
|
60
|
-
:workbook => Workbook.new {
|
61
|
-
title "written"
|
62
|
-
worksheet {
|
63
|
-
name "Poo!"
|
64
|
-
column
|
65
|
-
row {
|
66
|
-
cell {
|
67
|
-
data 1
|
68
|
-
format :number
|
69
|
-
}
|
70
|
-
}
|
71
|
-
}
|
72
|
-
}
|
73
|
-
})
|
74
|
-
end
|
75
|
-
after do
|
76
|
-
# remove any test files this creates
|
77
|
-
end
|
78
|
-
subject { @writer }
|
79
|
-
|
80
|
-
should have_instance_methods :to_data, :to_file
|
81
|
-
|
82
|
-
should "return string xml data" do
|
83
|
-
xml_data = nil
|
84
|
-
assert_nothing_raised do
|
85
|
-
xml_data = subject.to_data
|
86
|
-
end
|
87
|
-
assert_kind_of ::String, xml_data
|
88
|
-
assert_match /^<\?xml/, xml_data
|
89
|
-
end
|
90
|
-
|
91
|
-
should "write xml data to a file path" do
|
92
|
-
path = nil
|
93
|
-
assert_nothing_raised do
|
94
|
-
path = subject.to_file("./tmp/base_test.xls")
|
95
|
-
end
|
96
|
-
assert_kind_of ::String, path
|
97
|
-
assert_equal './tmp/base_test.xls', path
|
98
|
-
assert File.exists?(path)
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|