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
@@ -0,0 +1,231 @@
|
|
1
|
+
require "assert"
|
2
|
+
|
3
|
+
require 'osheet/workbook_element'
|
4
|
+
|
5
|
+
module Osheet
|
6
|
+
|
7
|
+
|
8
|
+
class WorkbookElementTests < Assert::Context
|
9
|
+
desc "a WorkbookElement object"
|
10
|
+
before do
|
11
|
+
@wd = WorkbookElement.new
|
12
|
+
end
|
13
|
+
subject { @wd }
|
14
|
+
|
15
|
+
should have_reader :title
|
16
|
+
should have_readers :templates, :partials, :styles, :worksheets
|
17
|
+
should have_instance_methods :template, :partial, :style, :worksheet
|
18
|
+
|
19
|
+
should "set it's defaults" do
|
20
|
+
assert_nil subject.title
|
21
|
+
assert_equal WorkbookElement::TemplateSet.new, subject.templates
|
22
|
+
assert_equal WorkbookElement::PartialSet.new, subject.partials
|
23
|
+
assert_equal WorkbookElement::StyleSet.new, subject.styles
|
24
|
+
assert_equal WorkbookElement::WorksheetSet.new, subject.worksheets
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
class PartialSetTests < Assert::Context
|
32
|
+
desc "a PartialSet"
|
33
|
+
before { @ps = WorkbookElement::PartialSet.new }
|
34
|
+
subject { @ps }
|
35
|
+
|
36
|
+
should "be a Hash" do
|
37
|
+
assert_kind_of ::Hash, subject
|
38
|
+
end
|
39
|
+
|
40
|
+
should have_instance_method :<<
|
41
|
+
should have_reader :get
|
42
|
+
|
43
|
+
should "verify set objs are partials" do
|
44
|
+
assert_raises ArgumentError do
|
45
|
+
subject.send(:verify, {})
|
46
|
+
end
|
47
|
+
assert_nothing_raised do
|
48
|
+
subject.send(:verify, Partial.new(:poo) {})
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
should "key using name values" do
|
53
|
+
assert_equal 'poo', subject.send(:key, :poo)
|
54
|
+
end
|
55
|
+
|
56
|
+
should "key on partial objs" do
|
57
|
+
assert_equal 'poo', subject.send(:partial_key, Partial.new(:poo) {})
|
58
|
+
end
|
59
|
+
|
60
|
+
should "init the key in the set when verifying" do
|
61
|
+
key = subject.send(:verify, Partial.new(:thing) {})
|
62
|
+
assert_equal 'thing', key
|
63
|
+
assert_equal({'thing' => nil}, subject)
|
64
|
+
end
|
65
|
+
|
66
|
+
should "push partials onto the set" do
|
67
|
+
assert_nothing_raised do
|
68
|
+
subject << Partial.new(:poo) {}
|
69
|
+
subject << Partial.new(:not_poo) {}
|
70
|
+
subject << Partial.new(:awesome) {}
|
71
|
+
subject << Partial.new(:poo) {}
|
72
|
+
end
|
73
|
+
|
74
|
+
assert_equal 3, subject.keys.size
|
75
|
+
assert subject["poo"]
|
76
|
+
assert_kind_of Partial, subject["poo"]
|
77
|
+
end
|
78
|
+
|
79
|
+
should "lookup a partial by name" do
|
80
|
+
p = Partial.new(:poo) {}
|
81
|
+
subject << p
|
82
|
+
assert_equal p, subject.get(:poo)
|
83
|
+
assert_equal p, subject.get('poo')
|
84
|
+
assert_equal nil, subject.get(:ugh)
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
class TemplateSetTests < Assert::Context
|
92
|
+
desc "a TemplateSet"
|
93
|
+
before { @set = WorkbookElement::TemplateSet.new }
|
94
|
+
subject { @set }
|
95
|
+
|
96
|
+
should "be a PartialSet" do
|
97
|
+
assert_kind_of WorkbookElement::PartialSet, subject
|
98
|
+
end
|
99
|
+
|
100
|
+
should "verify set objs are templates" do
|
101
|
+
assert_raises ArgumentError do
|
102
|
+
subject.send(:verify, {})
|
103
|
+
end
|
104
|
+
assert_nothing_raised do
|
105
|
+
subject.send(:verify, Template.new(:row, :poo) {})
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
should "key templates using an array of their element and name" do
|
110
|
+
assert_equal ['row','poo'], subject.send(:key, :row, :poo)
|
111
|
+
end
|
112
|
+
|
113
|
+
should "key on templates objs" do
|
114
|
+
assert_equal ['row', 'poo'], subject.send(:template_key, Template.new(:row, :poo) {})
|
115
|
+
end
|
116
|
+
|
117
|
+
should "init the key in the set when verifying" do
|
118
|
+
key = subject.send(:verify, Template.new(:row, :poo) {})
|
119
|
+
assert_equal ['row', 'poo'], key
|
120
|
+
assert_equal({
|
121
|
+
key.first => { key.last => nil }
|
122
|
+
}, subject)
|
123
|
+
end
|
124
|
+
|
125
|
+
should "push templates onto the set" do
|
126
|
+
assert_nothing_raised do
|
127
|
+
subject << Template.new(:row, :poo) {}
|
128
|
+
subject << Template.new(:row, :not_poo) {}
|
129
|
+
subject << Template.new(:column, :awesome) {}
|
130
|
+
subject << Template.new(:column, :not_awesome) {}
|
131
|
+
end
|
132
|
+
|
133
|
+
assert_equal 2, subject.keys.size
|
134
|
+
assert subject["row"]
|
135
|
+
assert_equal 2, subject["row"].keys.size
|
136
|
+
assert subject["row"]["poo"]
|
137
|
+
assert_kind_of Template, subject["row"]["poo"]
|
138
|
+
assert subject["row"]["not_poo"]
|
139
|
+
assert_kind_of Template, subject["row"]["not_poo"]
|
140
|
+
assert subject["column"]
|
141
|
+
assert_equal 2, subject["column"].keys.size
|
142
|
+
assert subject["column"]["awesome"]
|
143
|
+
assert_kind_of Template, subject["column"]["awesome"]
|
144
|
+
assert subject["column"]["not_awesome"]
|
145
|
+
assert_kind_of Template, subject["column"]["not_awesome"]
|
146
|
+
end
|
147
|
+
|
148
|
+
should "lookup a template by element, name" do
|
149
|
+
t = Template.new(:row, :poo) {}
|
150
|
+
subject << t
|
151
|
+
assert_equal t, subject.get(:row, :poo)
|
152
|
+
assert_equal t, subject.get('row', 'poo')
|
153
|
+
|
154
|
+
assert_equal nil, subject.get(:row, :ugh)
|
155
|
+
assert_equal nil, subject.get(:col, :ugh)
|
156
|
+
end
|
157
|
+
|
158
|
+
end
|
159
|
+
|
160
|
+
|
161
|
+
|
162
|
+
class StyleSetTests < Assert::Context
|
163
|
+
desc "a StyleSet"
|
164
|
+
before { @set = WorkbookElement::StyleSet.new }
|
165
|
+
subject { @set }
|
166
|
+
|
167
|
+
should "be an Array" do
|
168
|
+
assert_kind_of ::Array, subject
|
169
|
+
end
|
170
|
+
|
171
|
+
should have_reader :for
|
172
|
+
|
173
|
+
should "verify Style objs" do
|
174
|
+
assert_raises ArgumentError do
|
175
|
+
subject.send(:verify, {})
|
176
|
+
end
|
177
|
+
assert_nothing_raised do
|
178
|
+
subject.send(:verify, Style.new('.awesome') {})
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
should "be able to lookup styles by class" do
|
183
|
+
subject << (a = Style.new('.awesome') {})
|
184
|
+
subject << (at = Style.new('.awesome.thing') {})
|
185
|
+
subject << (b = Style.new('.boring') {})
|
186
|
+
subject << (bt = Style.new('.boring.thing') {})
|
187
|
+
subject << (a_b = Style.new('.awesome', '.boring') {})
|
188
|
+
subject << (t = Style.new('.thing') {})
|
189
|
+
subject << (s = Style.new('.stupid') {})
|
190
|
+
|
191
|
+
{ 'awesome' => [a, a_b],
|
192
|
+
'boring' => [b, a_b],
|
193
|
+
'thing' => [t],
|
194
|
+
'awesome thing' => [a, at, a_b, t],
|
195
|
+
'thing awesome' => [a, at, a_b, t],
|
196
|
+
'other' => []
|
197
|
+
}.each do |style_class, styles_set|
|
198
|
+
assert_equal styles_set, subject.for(style_class)
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
should "return itself if calling for w/ no args" do
|
203
|
+
assert_equal subject, subject.for
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
|
208
|
+
|
209
|
+
|
210
|
+
class WorksheetSetTests < Assert::Context
|
211
|
+
desc "a WorksheetSet"
|
212
|
+
before { @set = WorkbookElement::WorksheetSet.new }
|
213
|
+
subject { @set }
|
214
|
+
|
215
|
+
should "be an Array" do
|
216
|
+
assert_kind_of ::Array, subject
|
217
|
+
end
|
218
|
+
|
219
|
+
should "verify Worksheet objs" do
|
220
|
+
assert_raises ArgumentError do
|
221
|
+
subject.send(:verify, {})
|
222
|
+
end
|
223
|
+
assert_nothing_raised do
|
224
|
+
subject.send(:verify, Worksheet.new {})
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
|
231
|
+
end
|
data/test/workbook_test.rb
CHANGED
@@ -1,105 +1,143 @@
|
|
1
1
|
require "assert"
|
2
|
+
require 'test/fixtures/mixins'
|
3
|
+
require 'test/fixtures/test_writer'
|
4
|
+
|
2
5
|
require 'osheet/workbook'
|
3
|
-
require 'test/mixins'
|
4
6
|
|
5
7
|
module Osheet
|
6
8
|
|
7
|
-
class
|
8
|
-
desc "
|
9
|
-
before
|
9
|
+
class WorkbookTests < Assert::Context
|
10
|
+
desc "a Workbook"
|
11
|
+
before do
|
12
|
+
@wkbk = Workbook.new
|
13
|
+
@test_writer = TestWriter.new
|
14
|
+
end
|
10
15
|
subject { @wkbk }
|
11
16
|
|
12
|
-
should
|
13
|
-
should have_instance_methods :
|
14
|
-
should have_instance_methods :
|
17
|
+
should have_instance_methods :writer, :element_stack
|
18
|
+
should have_instance_methods :use, :add
|
19
|
+
should have_instance_methods :to_s, :to_data, :to_file
|
20
|
+
|
21
|
+
should have_instance_methods :workbook_element, :workbook
|
22
|
+
should have_instance_methods :templates, :template
|
23
|
+
should have_instance_methods :partials, :partial
|
24
|
+
should have_instance_methods :styles, :style
|
25
|
+
should have_instance_methods :worksheets, :worksheet
|
26
|
+
should have_instance_methods :columns, :column
|
27
|
+
should have_instance_methods :rows, :row
|
28
|
+
should have_instance_methods :cells, :cell
|
15
29
|
|
16
|
-
|
30
|
+
should have_instance_methods :use, :add, :template, :partial
|
31
|
+
|
32
|
+
should have_instance_methods :align, :font, :bg, :border
|
33
|
+
should have_instance_methods :border_left, :border_top
|
34
|
+
should have_instance_methods :border_right, :border_bottom
|
35
|
+
|
36
|
+
should have_instance_methods :style_class, :format
|
37
|
+
should have_instance_methods :title, :meta, :name
|
38
|
+
should have_instance_methods :width, :height
|
39
|
+
should have_instance_methods :autofit, :autofit?, :hidden, :hidden?
|
40
|
+
should have_instance_methods :data, :href, :formula
|
41
|
+
should have_instance_methods :index, :rowspan, :colspan
|
17
42
|
|
18
43
|
should "set it's defaults" do
|
19
|
-
assert_equal nil, subject.
|
20
|
-
|
21
|
-
assert_equal
|
22
|
-
assert_equal
|
23
|
-
|
44
|
+
assert_equal nil, subject.workbook.title
|
45
|
+
|
46
|
+
assert_equal WorkbookElement.new, subject.workbook_element
|
47
|
+
assert_equal subject.workbook_element, subject.workbook
|
48
|
+
|
49
|
+
assert_kind_of Workbook::ElementStack, subject.element_stack
|
50
|
+
assert_equal 1, subject.element_stack.size
|
51
|
+
assert_equal subject.workbook_element, subject.element_stack.current
|
24
52
|
end
|
25
53
|
|
26
|
-
should "
|
27
|
-
|
28
|
-
|
29
|
-
assert subject.attributes.has_key?(a)
|
30
|
-
end
|
31
|
-
assert_equal "The Poo", subject.attributes[:title]
|
54
|
+
should "set its title, casting it to a string" do
|
55
|
+
wb = Workbook.new { title :fun }
|
56
|
+
assert_equal "fun", wb.workbook.title
|
32
57
|
end
|
33
58
|
|
34
59
|
end
|
35
60
|
|
36
|
-
class
|
37
|
-
desc "
|
38
|
-
before { @
|
61
|
+
class ElementStackTests < Assert::Context
|
62
|
+
desc "an ElementStack"
|
63
|
+
before { @s = Workbook::ElementStack.new }
|
64
|
+
subject { @s }
|
39
65
|
|
40
|
-
should "
|
41
|
-
|
66
|
+
should "be an Array" do
|
67
|
+
assert_kind_of ::Array, subject
|
42
68
|
end
|
43
69
|
|
44
|
-
should
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
70
|
+
should have_instance_method :push, :pop, :current, :size, :using
|
71
|
+
|
72
|
+
should "push objects onto the stack" do
|
73
|
+
assert_nothing_raised do
|
74
|
+
subject.push("something")
|
75
|
+
subject.push("something else")
|
76
|
+
end
|
77
|
+
|
78
|
+
assert_equal 2, subject.size
|
51
79
|
end
|
52
80
|
|
53
|
-
|
81
|
+
should "push objects onto the stack for the duration of a block" do
|
82
|
+
subject.push("something")
|
54
83
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
name "Poo!"
|
61
|
-
column
|
62
|
-
row {
|
63
|
-
cell {
|
64
|
-
format :number
|
65
|
-
data 1
|
66
|
-
}
|
67
|
-
}
|
68
|
-
}
|
69
|
-
}
|
84
|
+
assert_equal "something", subject.current
|
85
|
+
subject.using("using") do
|
86
|
+
assert_equal "using", subject.current
|
87
|
+
end
|
88
|
+
assert_equal "something", subject.current
|
70
89
|
end
|
71
90
|
|
72
|
-
should "
|
73
|
-
|
74
|
-
|
91
|
+
should "fetch the last item in the array with the current method" do
|
92
|
+
subject.push("something")
|
93
|
+
subject.push("something else")
|
94
|
+
|
95
|
+
assert_equal "something else", subject.current
|
75
96
|
end
|
76
97
|
|
77
|
-
should "
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
98
|
+
should "remove the last item in the array with the pop method" do
|
99
|
+
subject.push("something")
|
100
|
+
subject.push("something else")
|
101
|
+
|
102
|
+
assert_equal 2, subject.size
|
103
|
+
|
104
|
+
item = subject.pop
|
105
|
+
assert_equal "something else", item
|
106
|
+
assert_equal 1, subject.size
|
107
|
+
end
|
108
|
+
|
109
|
+
should "return nil if trying to pop on an empty stack" do
|
110
|
+
assert_equal 0, subject.size
|
111
|
+
|
84
112
|
assert_nothing_raised do
|
85
|
-
|
86
|
-
worksheet { name "awesome" }
|
87
|
-
worksheet { name "awesome1" }
|
88
|
-
}
|
113
|
+
subject.pop
|
89
114
|
end
|
115
|
+
|
116
|
+
assert_nil subject.pop
|
90
117
|
end
|
91
118
|
|
92
119
|
end
|
93
120
|
|
94
|
-
class
|
95
|
-
desc "
|
121
|
+
class WorkbookStyleTests < WorkbookTests
|
122
|
+
desc "that defines styles"
|
96
123
|
before do
|
97
|
-
@wkbk = Workbook.new {
|
124
|
+
@wkbk = Workbook.new(@test_writer) {
|
98
125
|
style('.test')
|
99
126
|
style('.test.awesome')
|
127
|
+
|
128
|
+
worksheet("styles") {
|
129
|
+
column { style_class "test awesome" }
|
130
|
+
}
|
100
131
|
}
|
101
132
|
end
|
102
133
|
|
134
|
+
should "return the style obj created" do
|
135
|
+
style = subject.style(".a.test.style")
|
136
|
+
|
137
|
+
assert_kind_of Style, style
|
138
|
+
assert_equal '.a.test.style', style.selectors.first
|
139
|
+
end
|
140
|
+
|
103
141
|
should "add them to it's styles" do
|
104
142
|
assert_equal 2, subject.styles.size
|
105
143
|
assert_equal 1, subject.styles.first.selectors.size
|
@@ -108,12 +146,104 @@ module Osheet
|
|
108
146
|
assert_equal '.test.awesome', subject.styles.last.selectors.first
|
109
147
|
end
|
110
148
|
|
149
|
+
should "write the style class on the element" do
|
150
|
+
assert_equal "test awesome", subject.worksheets.last.columns.last.style_class
|
151
|
+
end
|
152
|
+
|
111
153
|
end
|
112
154
|
|
113
|
-
class
|
114
|
-
desc "
|
155
|
+
class WorkbookWorksheetTests < WorkbookTests
|
156
|
+
desc "with worksheets"
|
115
157
|
before do
|
116
|
-
@wkbk = Workbook.new {
|
158
|
+
@wkbk = Workbook.new(@test_writer) {
|
159
|
+
worksheet {
|
160
|
+
name "one"
|
161
|
+
}
|
162
|
+
worksheet {
|
163
|
+
name "two"
|
164
|
+
meta :some_meta
|
165
|
+
}
|
166
|
+
}
|
167
|
+
end
|
168
|
+
|
169
|
+
should "return the worksheet obj created" do
|
170
|
+
assert_kind_of Worksheet, subject.worksheet("test")
|
171
|
+
end
|
172
|
+
|
173
|
+
should "add them to it's worksheets reader" do
|
174
|
+
assert_equal 2, subject.worksheets.size
|
175
|
+
assert_equal "one", subject.worksheets.first.name
|
176
|
+
assert_equal "two", subject.worksheets.last.name
|
177
|
+
assert_equal :some_meta, subject.worksheets.last.meta
|
178
|
+
end
|
179
|
+
|
180
|
+
should "return the last worksheet added if called with no args" do
|
181
|
+
assert_equal subject.worksheets.last, subject.worksheet
|
182
|
+
end
|
183
|
+
|
184
|
+
should "call the writer with the created worksheet obj" do
|
185
|
+
assert_equal subject.worksheets.last, subject.writer.worksheets.last
|
186
|
+
end
|
187
|
+
|
188
|
+
end
|
189
|
+
|
190
|
+
class WorkbookRowCellMetaTests < WorkbookTests
|
191
|
+
desc "with columns, meta, rows, and cells"
|
192
|
+
before do
|
193
|
+
@wkbk = Workbook.new(@test_writer) {
|
194
|
+
worksheet {
|
195
|
+
column(100) { meta(:label => 'One') }
|
196
|
+
column { meta(:label => 'Two') }
|
197
|
+
|
198
|
+
row {
|
199
|
+
columns.each do |column|
|
200
|
+
cell(column.meta[:label])
|
201
|
+
end
|
202
|
+
}
|
203
|
+
row(120) {
|
204
|
+
cell {
|
205
|
+
data 12234
|
206
|
+
format :currency
|
207
|
+
}
|
208
|
+
cell(Time.now) {
|
209
|
+
format :datetime, 'mm/dd/yyyy'
|
210
|
+
}
|
211
|
+
|
212
|
+
}
|
213
|
+
}
|
214
|
+
}
|
215
|
+
end
|
216
|
+
|
217
|
+
should "add the columns to it's columns reader" do
|
218
|
+
assert_equal 2, subject.columns.size
|
219
|
+
assert_equal 100, subject.columns.first.width
|
220
|
+
assert_equal nil, subject.columns.last.width
|
221
|
+
|
222
|
+
assert_equal subject.columns.last, subject.writer.columns.last
|
223
|
+
end
|
224
|
+
|
225
|
+
should "just keep the last row in its rows reader" do
|
226
|
+
assert_equal 1, subject.rows.size
|
227
|
+
assert_equal 120, subject.rows.first.height
|
228
|
+
|
229
|
+
assert_equal 2, subject.writer.rows.size
|
230
|
+
assert_equal subject.rows.first, subject.writer.rows.last
|
231
|
+
end
|
232
|
+
|
233
|
+
should "access the cells of its last row" do
|
234
|
+
assert_equal 2, subject.cells.size
|
235
|
+
assert_equal 12234, subject.cells.first.data
|
236
|
+
|
237
|
+
assert_equal 4, subject.writer.cells.size
|
238
|
+
assert_equal subject.cells.last, subject.writer.rows.last.cells.last
|
239
|
+
end
|
240
|
+
|
241
|
+
end
|
242
|
+
|
243
|
+
class WorkbookPartialTests < WorkbookTests
|
244
|
+
desc "that defines partials"
|
245
|
+
before do
|
246
|
+
@wkbk = Workbook.new(@test_writer) {
|
117
247
|
partial(:named_styles) { |name|
|
118
248
|
style(".#{name}")
|
119
249
|
style(".#{name}.awesome")
|
@@ -123,10 +253,10 @@ module Osheet
|
|
123
253
|
end
|
124
254
|
|
125
255
|
should "add them to it's partials" do
|
126
|
-
assert_equal 2, subject.partials.keys.size
|
127
|
-
assert subject.partials.has_key?('named_styles')
|
128
|
-
assert subject.partials.has_key?('stuff')
|
129
|
-
assert_kind_of Partial, subject.partials.get('stuff')
|
256
|
+
assert_equal 2, subject.workbook.partials.keys.size
|
257
|
+
assert subject.workbook.partials.has_key?('named_styles')
|
258
|
+
assert subject.workbook.partials.has_key?('stuff')
|
259
|
+
assert_kind_of Partial, subject.workbook.partials.get('stuff')
|
130
260
|
end
|
131
261
|
|
132
262
|
should "add it's partials to it's markup" do
|
@@ -138,10 +268,10 @@ module Osheet
|
|
138
268
|
|
139
269
|
end
|
140
270
|
|
141
|
-
class
|
142
|
-
desc "
|
271
|
+
class WorkbookTemplateTests < WorkbookTests
|
272
|
+
desc "that defines templates"
|
143
273
|
before do
|
144
|
-
@wkbk = Workbook.new {
|
274
|
+
@wkbk = Workbook.new(@test_writer) {
|
145
275
|
template(:column, :yo) { |color|
|
146
276
|
width 200
|
147
277
|
meta(:color => color)
|
@@ -158,7 +288,7 @@ module Osheet
|
|
158
288
|
|
159
289
|
should "add them to it's templates" do
|
160
290
|
assert subject.templates
|
161
|
-
assert_kind_of TemplateSet, subject.templates
|
291
|
+
assert_kind_of WorkbookElement::TemplateSet, subject.templates
|
162
292
|
assert_equal 3, subject.templates.keys.size
|
163
293
|
assert_kind_of Template, subject.templates.get('column', 'yo')
|
164
294
|
assert_kind_of Template, subject.templates.get('row', 'yo_yo')
|
@@ -169,32 +299,18 @@ module Osheet
|
|
169
299
|
subject.worksheet(:go)
|
170
300
|
assert_equal 1, subject.worksheets.size
|
171
301
|
assert_equal 'blue', subject.worksheets.first.columns.first.meta[:color]
|
172
|
-
assert_equal 500, subject.worksheets.first.rows.first.
|
302
|
+
assert_equal 500, subject.worksheets.first.rows.first.height
|
173
303
|
end
|
174
304
|
|
175
305
|
end
|
176
306
|
|
177
|
-
class
|
178
|
-
desc "
|
179
|
-
should "access instance vars from that block's binding" do
|
180
|
-
@test = 'test'
|
181
|
-
@workbook = Workbook.new { title @test }
|
182
|
-
|
183
|
-
assert !@workbook.send(:instance_variable_get, "@test").nil?
|
184
|
-
assert_equal @test, @workbook.send(:instance_variable_get, "@test")
|
185
|
-
assert_equal @test.object_id, @workbook.send(:instance_variable_get, "@test").object_id
|
186
|
-
assert_equal @test, @workbook.attributes[:title]
|
187
|
-
assert_equal @test.object_id, @workbook.attributes[:title].object_id
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
class WorkbookMixins < WorkbookTest
|
193
|
-
desc "a workbook w/ mixins"
|
307
|
+
class WorkbookMixinTests < WorkbookTests
|
308
|
+
desc "with mixins"
|
194
309
|
before do
|
195
|
-
@wkbk = Workbook.new {
|
310
|
+
@wkbk = Workbook.new(@test_writer) {
|
196
311
|
use StyledMixin
|
197
312
|
use TemplatedMixin
|
313
|
+
use PartialedMixin
|
198
314
|
}
|
199
315
|
end
|
200
316
|
|
@@ -204,39 +320,32 @@ module Osheet
|
|
204
320
|
assert_equal '.test', subject.styles.first.selectors.first
|
205
321
|
assert_equal 1, subject.styles.last.selectors.size
|
206
322
|
assert_equal '.test.awesome', subject.styles.last.selectors.first
|
323
|
+
assert_equal [:left], subject.styles.last.align
|
207
324
|
end
|
208
325
|
|
209
326
|
should "add the mixin templates to it's templates" do
|
210
|
-
assert subject.templates
|
211
|
-
assert_kind_of TemplateSet, subject.templates
|
212
|
-
assert_equal 3, subject.templates.keys.size
|
213
|
-
assert_kind_of Template, subject.templates.get('column', 'yo')
|
214
|
-
assert_kind_of Template, subject.templates.get('row', 'yo_yo')
|
215
|
-
assert_kind_of Template, subject.templates.get('worksheet', 'go')
|
216
|
-
|
217
327
|
subject.worksheet(:go)
|
328
|
+
|
218
329
|
assert_equal 1, subject.worksheets.size
|
219
330
|
assert_equal 'blue', subject.worksheets.first.columns.first.meta[:color]
|
220
|
-
assert_equal 500, subject.worksheets.first.rows.first.
|
331
|
+
assert_equal 500, subject.worksheets.first.rows.first.height
|
221
332
|
end
|
222
333
|
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
before do
|
228
|
-
@wkbk = Workbook.new {
|
229
|
-
style('.test')
|
230
|
-
style('.test.awesome')
|
334
|
+
should "add the mixin partials to it's partials" do
|
335
|
+
subject.worksheet {
|
336
|
+
subject.add(:three_empty_rows)
|
337
|
+
subject.add(:two_cells_in_a_row, "one", "two")
|
231
338
|
}
|
232
|
-
end
|
233
339
|
|
234
|
-
|
340
|
+
assert_equal 4, subject.writer.rows.size
|
341
|
+
|
342
|
+
assert_empty subject.writer.rows[0].cells
|
343
|
+
assert_empty subject.writer.rows[1].cells
|
344
|
+
assert_empty subject.writer.rows[2].cells
|
235
345
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
assert_kind_of XmlssWriter::Base, writer
|
346
|
+
assert_equal 2, subject.writer.rows.last.cells.size
|
347
|
+
assert_equal "one", subject.writer.rows.last.cells.first.data
|
348
|
+
assert_equal "two", subject.writer.rows.last.cells.last.data
|
240
349
|
end
|
241
350
|
|
242
351
|
end
|