xmlss 0.4.1 → 1.0.0.rc.1

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.
Files changed (41) hide show
  1. data/Gemfile.lock +3 -3
  2. data/README.rdoc +4 -4
  3. data/bench/profiler_runner.rb +1 -1
  4. data/examples/example_workbook.rb +1 -1
  5. data/examples/simple.rb +18 -1
  6. data/examples/simple.xml +22 -0
  7. data/lib/xmlss/element/cell.rb +52 -1
  8. data/lib/xmlss/element/column.rb +2 -0
  9. data/lib/xmlss/element/row.rb +2 -0
  10. data/lib/xmlss/element/worksheet.rb +14 -6
  11. data/lib/xmlss/element_stack.rb +69 -0
  12. data/lib/xmlss/style/alignment.rb +2 -0
  13. data/lib/xmlss/style/base.rb +2 -0
  14. data/lib/xmlss/style/border.rb +10 -0
  15. data/lib/xmlss/style/font.rb +2 -0
  16. data/lib/xmlss/style/interior.rb +2 -0
  17. data/lib/xmlss/style/number_format.rb +2 -0
  18. data/lib/xmlss/style/protection.rb +2 -0
  19. data/lib/xmlss/version.rb +1 -1
  20. data/lib/xmlss/workbook.rb +75 -58
  21. data/lib/xmlss/writer.rb +244 -0
  22. data/test/element/cell_test.rb +60 -1
  23. data/test/element/column_test.rb +5 -0
  24. data/test/element/row_test.rb +5 -0
  25. data/test/element/worksheet_test.rb +9 -4
  26. data/test/element_stack_test.rb +117 -0
  27. data/test/style/alignment_test.rb +5 -0
  28. data/test/style/base_test.rb +5 -0
  29. data/test/style/border_test.rb +26 -2
  30. data/test/style/font_test.rb +5 -0
  31. data/test/style/interior_test.rb +5 -0
  32. data/test/style/number_format_test.rb +5 -0
  33. data/test/style/protection_test.rb +6 -1
  34. data/test/workbook_test.rb +29 -13
  35. data/test/writer_test.rb +413 -0
  36. data/xmlss.gemspec +1 -1
  37. metadata +30 -25
  38. data/lib/xmlss/element/data.rb +0 -58
  39. data/lib/xmlss/undies_writer.rb +0 -175
  40. data/test/element/data_test.rb +0 -67
  41. data/test/undies_writer_test.rb +0 -372
@@ -5,20 +5,28 @@ module Xmlss::Worbook
5
5
 
6
6
  class BasicTests < Assert::Context
7
7
  desc "Xmlss::Workbook"
8
- before { @wkbk = Xmlss::Workbook.new }
8
+ before { @wkbk = Xmlss::Workbook.new(Xmlss::Writer.new) }
9
9
  subject { @wkbk }
10
10
 
11
+ should have_class_method :writer, :styles_stack, :worksheets_stack
11
12
  should have_instance_methods :to_s, :to_file
12
- should have_instance_methods :worksheet, :column, :row, :cell, :data
13
+
13
14
  should have_instance_methods :style, :alignment, :borders, :border
14
15
  should have_instance_methods :font, :interior, :number_format, :protection
15
16
 
17
+ should have_instance_methods :worksheet, :column, :row, :cell
18
+
19
+ should have_instance_methods :data, :type
20
+ should have_instance_methods :index, :style_id, :formula, :href
21
+ should have_instance_methods :merge_across, :merge_down, :height
22
+ should have_instance_methods :auto_fit_height, :hidden, :width
23
+ should have_instance_methods :auto_fit_width, :name
24
+
16
25
  should "return element objs when calling its element methods" do
17
26
  assert_kind_of Xmlss::Element::Worksheet, subject.worksheet('test')
18
27
  assert_kind_of Xmlss::Element::Column, subject.column
19
28
  assert_kind_of Xmlss::Element::Row, subject.row
20
29
  assert_kind_of Xmlss::Element::Cell, subject.cell
21
- assert_kind_of Xmlss::Element::Data, subject.data('test')
22
30
  end
23
31
 
24
32
  should "return style objs when calling its style methods" do
@@ -31,6 +39,13 @@ module Xmlss::Worbook
31
39
  assert_kind_of Xmlss::Style::Protection, subject.protection
32
40
  end
33
41
 
42
+ should "not complain if setting an attribute when there's no current element" do
43
+ # it should just do nothing and go on
44
+ assert_nothing_raised do
45
+ subject.index(1)
46
+ end
47
+ end
48
+
34
49
  should "return workbook markup string" do
35
50
  assert_match /<Workbook /, subject.to_s
36
51
  end
@@ -46,7 +61,7 @@ module Xmlss::Worbook
46
61
  end
47
62
 
48
63
  should "maintain the workbook's scope throughout content blocks" do
49
- wkbk = Xmlss::Workbook.new do
64
+ wkbk = Xmlss::Workbook.new(Xmlss::Writer.new) do
50
65
  style('test') {
51
66
  alignment
52
67
  borders {
@@ -57,7 +72,8 @@ module Xmlss::Worbook
57
72
  number_format
58
73
  protection
59
74
  }
60
- worksheet('test') {
75
+ worksheet {
76
+ name 'test'
61
77
  column
62
78
 
63
79
  row {
@@ -67,7 +83,7 @@ module Xmlss::Worbook
67
83
  end
68
84
 
69
85
  assert_equal(
70
- "<?xml version=\"1.0\" encoding=\"UTF-8\"?><Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"test\"><Alignment /><Borders><Border ss:LineStyle=\"Continuous\" ss:Weight=\"1\" /></Borders><Font /><Interior /><NumberFormat /><Protection /></Style></Styles><Worksheet ss:Name=\"test\"><Table><Column /><Row><Cell><Data ss:Type=\"Number\">#{wkbk.object_id}</Data></Cell></Row></Table></Worksheet></Workbook>",
86
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"test\"><Alignment /><Borders><Border ss:LineStyle=\"Continuous\" ss:Weight=\"1\" /></Borders><Font /><Interior /><NumberFormat /><Protection /></Style></Styles><Worksheet ss:Name=\"test\"><Table><Column /><Row><Cell><Data ss:Type=\"Number\">#{wkbk.object_id}</Data></Cell></Row></Table></Worksheet></Workbook>",
71
87
  wkbk.to_s
72
88
  )
73
89
  end
@@ -78,31 +94,31 @@ module Xmlss::Worbook
78
94
 
79
95
  should "bork if non hash-like data is provided" do
80
96
  assert_raises NoMethodError do
81
- Xmlss::Workbook.new(:data => "some data")
97
+ Xmlss::Workbook.new(Xmlss::Writer.new, "some data")
82
98
  end
83
99
  assert_respond_to(
84
100
  :some,
85
- Xmlss::Workbook.new(:data => {:some => 'data'})
101
+ Xmlss::Workbook.new(Xmlss::Writer.new, :some => 'data')
86
102
  )
87
103
  end
88
104
 
89
105
  should "complain if trying to set data that conflict with public methods" do
90
106
  assert_raises ArgumentError do
91
- Xmlss::Workbook.new(:data => {:worksheet => "yay!"})
107
+ Xmlss::Workbook.new(Xmlss::Writer.new, :worksheet => "yay!")
92
108
  end
93
109
  end
94
110
 
95
111
  should "respond to each data key with its value" do
96
- wkbk = Xmlss::Workbook.new(:data => {:some => 'data'})
112
+ wkbk = Xmlss::Workbook.new(Xmlss::Writer.new, :some => 'data')
97
113
  assert_equal "data", wkbk.some
98
114
  end
99
115
 
100
116
  should "be able to access its data in the workbook definition" do
101
- wkbk = Xmlss::Workbook.new(:data => {:name => "awesome"}) do
102
- worksheet name
117
+ wkbk = Xmlss::Workbook.new(Xmlss::Writer.new, :worksheet_name => "awesome") do
118
+ worksheet worksheet_name
103
119
  end
104
120
  assert_equal(
105
- "<?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=\"awesome\"><Table /></Worksheet></Workbook>",
121
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles></Styles><Worksheet ss:Name=\"awesome\"><Table /></Worksheet></Workbook>",
106
122
  wkbk.to_s
107
123
  )
108
124
  end
@@ -0,0 +1,413 @@
1
+ require 'assert'
2
+
3
+ require 'xmlss/writer'
4
+ require 'xmlss/workbook'
5
+
6
+ module Xmlss
7
+
8
+
9
+
10
+ class BasicTests < Assert::Context
11
+ desc "UndiesWriter"
12
+ setup do
13
+ @w = Writer.new
14
+ end
15
+ subject { @w }
16
+
17
+ should have_class_methods :attributes, :classify, :coerce
18
+ should have_readers :styles_markup, :worksheets_markup
19
+ should have_instance_methods :write, :push, :pop, :flush, :workbook
20
+
21
+ should have_instance_methods :style, :alignment, :borders, :border
22
+ should have_instance_methods :font, :interior, :number_format, :protection
23
+
24
+ should have_instance_methods :worksheet, :column, :row, :cell
25
+
26
+ should "have empty markup by default" do
27
+ assert_empty subject.worksheets_markup
28
+ assert_empty subject.styles_markup
29
+ end
30
+
31
+ should "return itself when flushed" do
32
+ assert_equal subject, subject.flush
33
+ end
34
+
35
+ end
36
+
37
+
38
+
39
+ class HelpersTests < BasicTests
40
+
41
+ should "coerce certain values for xml output" do
42
+ assert_equal 1, Writer.coerce(true)
43
+ assert_nil Writer.coerce(false)
44
+ assert_nil Writer.coerce("")
45
+ assert_equal "hi", Writer.coerce("hi")
46
+ assert_equal 1, Writer.coerce(1)
47
+ end
48
+
49
+ should "classify underscored string" do
50
+ assert_equal "Hi", Writer.classify("Hi")
51
+ assert_equal "Hi", Writer.classify("hi")
52
+ assert_equal "Hithere", Writer.classify("HiThere")
53
+ assert_equal "Hithere", Writer.classify("hithere")
54
+ assert_equal "HiThere", Writer.classify("Hi_There")
55
+ assert_equal "HiThere", Writer.classify("Hi_there")
56
+ assert_equal "HiThere", Writer.classify("hi_there")
57
+ end
58
+
59
+ should "convert a list of attributes for xml output" do
60
+ class Thing
61
+ def keys; [:thing, :other, 'some', 'hi', :hi_there]; end
62
+
63
+ def thing; true; end
64
+ def other; false; end
65
+ def some; ""; end
66
+ def hi; :there; end
67
+ def hi_there; "you"; end
68
+ end
69
+ thing = Thing.new
70
+ exp = {
71
+ "ss:Hi" => "there",
72
+ "ss:HiThere" => "you",
73
+ "ss:Thing" => "1"
74
+ }
75
+
76
+ assert_equal exp, Writer.attributes(thing, thing.keys)
77
+ end
78
+
79
+ end
80
+
81
+
82
+
83
+ class StyleWritingTests < BasicTests
84
+
85
+ should "write alignment markup" do
86
+ subject.write(Xmlss::Style::Alignment.new({
87
+ :wrap_text => true,
88
+ :horizontal => :center,
89
+ :vertical => :bottom,
90
+ :rotate => 90
91
+ }))
92
+ subject.flush
93
+
94
+ assert_equal(
95
+ "<Alignment ss:Horizontal=\"Center\" ss:Rotate=\"90\" ss:Vertical=\"Bottom\" ss:WrapText=\"1\" />",
96
+ subject.styles_markup.to_s
97
+ )
98
+ end
99
+
100
+ should "write border markup" do
101
+ subject.write(Xmlss::Style::Border.new({
102
+ :color => '#FF0000',
103
+ :position => :top,
104
+ :weight => :thick,
105
+ :line_style => :dot
106
+ }))
107
+ subject.flush
108
+
109
+ assert_equal(
110
+ "<Border ss:Color=\"#FF0000\" ss:LineStyle=\"Dot\" ss:Position=\"Top\" ss:Weight=\"3\" />",
111
+ subject.styles_markup.to_s
112
+ )
113
+ end
114
+
115
+ should "write border collection markup" do
116
+ subject.write(Xmlss::Style::Borders.new)
117
+ subject.push(:styles)
118
+
119
+ subject.write(Xmlss::Style::Border.new({
120
+ :color => '#FF0000',
121
+ :position => :top
122
+ }))
123
+
124
+ subject.write(Xmlss::Style::Border.new({
125
+ :position => :left
126
+ }))
127
+
128
+ subject.flush
129
+
130
+ assert_equal(
131
+ "<Borders><Border ss:Color=\"#FF0000\" ss:LineStyle=\"Continuous\" ss:Position=\"Top\" ss:Weight=\"1\" /><Border ss:LineStyle=\"Continuous\" ss:Position=\"Left\" ss:Weight=\"1\" /></Borders>",
132
+ subject.styles_markup.to_s
133
+ )
134
+ end
135
+
136
+ should "write font markup" do
137
+ subject.write(Xmlss::Style::Font.new({
138
+ :bold => true,
139
+ :color => '#FF0000',
140
+ :italic => true,
141
+ :size => 10,
142
+ :strike_through => true,
143
+ :underline => :single,
144
+ :alignment => :superscript,
145
+ :name => 'Verdana'
146
+ }))
147
+ subject.flush
148
+
149
+ assert_equal(
150
+ "<Font ss:Bold=\"1\" ss:Color=\"#FF0000\" ss:FontName=\"Verdana\" ss:Italic=\"1\" ss:Size=\"10\" ss:StrikeThrough=\"1\" ss:Underline=\"Single\" ss:VerticalAlign=\"Superscript\" />",
151
+ subject.styles_markup.to_s
152
+ )
153
+ end
154
+
155
+ should "write interior markup" do
156
+ subject.write(Xmlss::Style::Interior.new({
157
+ :color => "#000000",
158
+ :pattern => :solid,
159
+ :pattern_color => "#FF0000"
160
+ }))
161
+ subject.flush
162
+
163
+ assert_equal(
164
+ "<Interior ss:Color=\"#000000\" ss:Pattern=\"Solid\" ss:PatternColor=\"#FF0000\" />",
165
+ subject.styles_markup.to_s
166
+ )
167
+ end
168
+
169
+ should "write number format markup" do
170
+ subject.write(Xmlss::Style::NumberFormat.new("General"))
171
+ subject.flush
172
+
173
+ assert_equal(
174
+ "<NumberFormat ss:Format=\"General\" />",
175
+ subject.styles_markup.to_s
176
+ )
177
+ end
178
+
179
+ should "write protection markup" do
180
+ subject.write(Xmlss::Style::Protection.new(true))
181
+ subject.flush
182
+
183
+ assert_equal(
184
+ "<Protection ss:Protect=\"1\" />",
185
+ subject.styles_markup.to_s
186
+ )
187
+ end
188
+
189
+ should "write full style markup" do
190
+ subject.write(Xmlss::Style::Base.new(:write_markup_test))
191
+ subject.push(:styles)
192
+
193
+ subject.write(Xmlss::Style::Alignment.new({
194
+ :horizontal => :left,
195
+ :vertical => :center,
196
+ :wrap_text => true
197
+ }))
198
+
199
+ subject.write(Xmlss::Style::Borders.new)
200
+ subject.push(:styles)
201
+
202
+ subject.write(Xmlss::Style::Border.new({:position => :left}))
203
+ subject.write(Xmlss::Style::Border.new({:position => :right}))
204
+
205
+ subject.pop(:styles)
206
+ subject.write(Xmlss::Style::Font.new({:bold => true}))
207
+ subject.write(Xmlss::Style::Interior.new({:color => "#000000"}))
208
+ subject.write(Xmlss::Style::NumberFormat.new("General"))
209
+ subject.write(Xmlss::Style::Protection.new(true))
210
+
211
+ subject.flush
212
+
213
+ assert_equal(
214
+ "<Style ss:ID=\"write_markup_test\"><Alignment ss:Horizontal=\"Left\" ss:Vertical=\"Center\" ss:WrapText=\"1\" /><Borders><Border ss:LineStyle=\"Continuous\" ss:Position=\"Left\" ss:Weight=\"1\" /><Border ss:LineStyle=\"Continuous\" ss:Position=\"Right\" ss:Weight=\"1\" /></Borders><Font ss:Bold=\"1\" /><Interior ss:Color=\"#000000\" /><NumberFormat ss:Format=\"General\" /><Protection ss:Protect=\"1\" /></Style>",
215
+ subject.styles_markup.to_s
216
+ )
217
+ end
218
+
219
+ end
220
+
221
+
222
+
223
+ class WorksheetWritingTests < BasicTests
224
+ desc "writing worksheet markup"
225
+
226
+ should "write cell data markup" do
227
+ subject.write(Xmlss::Element::Cell.new("some data"))
228
+ subject.flush
229
+
230
+ assert_equal(
231
+ "<Cell><Data ss:Type=\"String\">some data</Data></Cell>",
232
+ subject.worksheets_markup.to_s
233
+ )
234
+ end
235
+
236
+ should "write cell data markup w/ \\n line breaks" do
237
+ subject.write(Xmlss::Element::Cell.new("line\nbreak", :type => :string))
238
+ subject.flush
239
+
240
+ assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
241
+ end
242
+
243
+ should "write cell data markup w/ \\r line breaks" do
244
+ subject.write(Xmlss::Element::Cell.new("line\rbreak", :type => :string))
245
+ subject.flush
246
+
247
+ assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
248
+ end
249
+
250
+ should "write cell data markup w/ \\r\\n line breaks" do
251
+ subject.write(Xmlss::Element::Cell.new("line\r\nbreak", :type => :string))
252
+ subject.flush
253
+
254
+ assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
255
+ end
256
+
257
+ should "write cell data markup w/ \\n\\r line breaks" do
258
+ subject.write(Xmlss::Element::Cell.new("line\n\rbreak", :type => :string))
259
+ subject.flush
260
+
261
+ assert_equal "<Cell><Data ss:Type=\"String\">line#{Writer::LB}break</Data></Cell>", subject.worksheets_markup.to_s
262
+ end
263
+
264
+ should "write cell data markup w/ line breaks and leading space" do
265
+ subject.write(Xmlss::Element::Cell.new(%s{
266
+ Should
267
+ honor
268
+ this}, :type => :string))
269
+ subject.flush
270
+
271
+ assert_equal(
272
+ "<Cell><Data ss:Type=\"String\">#{Writer::LB}Should#{Writer::LB} honor#{Writer::LB} this</Data></Cell>",
273
+ subject.worksheets_markup.to_s
274
+ )
275
+ end
276
+
277
+ should "write cell data markup w/ escaped values" do
278
+ subject.write(Xmlss::Element::Cell.new("some\n&<>'\"/\ndata"))
279
+ subject.flush
280
+
281
+ assert_equal(
282
+ "<Cell><Data ss:Type=\"String\">some&#13;&#10;&amp;&lt;&gt;&#x27;&quot;&#x2F;&#13;&#10;data</Data></Cell>",
283
+ subject.worksheets_markup.to_s
284
+ )
285
+ end
286
+
287
+ should "write worksheet element markup" do
288
+ subject.write(Xmlss::Element::Worksheet.new('awesome'))
289
+ subject.push(:worksheets)
290
+
291
+ subject.write(Xmlss::Element::Column.new({
292
+ :width => 120,
293
+ :style_id => 'narrowcolumn'
294
+ }))
295
+
296
+ subject.write(Xmlss::Element::Row.new({
297
+ :hidden => true,
298
+ :height => 120,
299
+ :style_id => 'awesome'
300
+ }))
301
+ subject.push(:worksheets)
302
+
303
+ subject.write(Xmlss::Element::Cell.new({
304
+ :index => 2,
305
+ :data => "100",
306
+ :type => :number,
307
+ :href => "http://www.google.com"
308
+ }))
309
+
310
+ subject.flush
311
+
312
+ assert_equal(
313
+ "<Worksheet ss:Name=\"awesome\"><Table><Column ss:StyleID=\"narrowcolumn\" ss:Width=\"120\" /><Row ss:Height=\"120\" ss:Hidden=\"1\" ss:StyleID=\"awesome\"><Cell ss:HRef=\"http://www.google.com\" ss:Index=\"2\"><Data ss:Type=\"Number\">100</Data></Cell></Row></Table></Worksheet>",
314
+ subject.worksheets_markup.to_s
315
+ )
316
+ end
317
+
318
+ should "write multiple cells with data in a row" do
319
+ subject.write(Xmlss::Element::Row.new)
320
+ subject.push(:worksheets)
321
+
322
+ 2.times { subject.write(Xmlss::Element::Cell.new("100")) }
323
+ subject.pop(:worksheets)
324
+
325
+ subject.flush
326
+
327
+ assert_equal(
328
+ "<Row><Cell><Data ss:Type=\"String\">100</Data></Cell><Cell><Data ss:Type=\"String\">100</Data></Cell></Row>",
329
+ subject.worksheets_markup.to_s
330
+ )
331
+ end
332
+
333
+ should "write multiple rows with cells in a worksheet" do
334
+ subject.write(Xmlss::Element::Worksheet.new('two rows'))
335
+ subject.push(:worksheets)
336
+
337
+ subject.write(Xmlss::Element::Row.new)
338
+ subject.push(:worksheets)
339
+ subject.write(Xmlss::Element::Cell.new("row1"))
340
+ subject.pop(:worksheets)
341
+
342
+ subject.write(Xmlss::Element::Row.new)
343
+ subject.push(:worksheets)
344
+ subject.write(Xmlss::Element::Cell.new("row2"))
345
+ subject.pop(:worksheets)
346
+
347
+ subject.pop(:worksheets)
348
+ subject.flush
349
+
350
+ assert_equal(
351
+ "<Worksheet ss:Name=\"two rows\"><Table><Row><Cell><Data ss:Type=\"String\">row1</Data></Cell></Row><Row><Cell><Data ss:Type=\"String\">row2</Data></Cell></Row></Table></Worksheet>",
352
+ subject.worksheets_markup.to_s
353
+ )
354
+ end
355
+
356
+ end
357
+
358
+
359
+
360
+ class WorkbookWritingTests < BasicTests
361
+
362
+ def build_workbook(writer)
363
+ writer.write(Xmlss::Style::Base.new(:some_font))
364
+ writer.push(:styles)
365
+ writer.write(Xmlss::Style::Font.new({:bold => true}))
366
+ writer.pop(:styles)
367
+
368
+ writer.write(Xmlss::Style::Base.new(:some_numformat))
369
+ writer.push(:styles)
370
+ writer.write(Xmlss::Style::NumberFormat.new("General"))
371
+ writer.pop(:styles)
372
+
373
+ writer.write(Xmlss::Element::Worksheet.new('test1'))
374
+ writer.push(:worksheets)
375
+ writer.write(Xmlss::Element::Row.new({:hidden => true}))
376
+ writer.push(:worksheets)
377
+ writer.write(Xmlss::Element::Cell.new("some data", {:index => 2}))
378
+ writer.pop(:worksheets)
379
+ writer.pop(:worksheets)
380
+
381
+ writer.write(Xmlss::Element::Worksheet.new('test2'))
382
+ writer.push(:worksheets)
383
+ writer.write(Xmlss::Element::Row.new({:hidden => true}))
384
+ writer.push(:worksheets)
385
+ writer.write(Xmlss::Element::Cell.new("some data", {:index => 2}))
386
+ writer.pop(:worksheets)
387
+ writer.pop(:worksheets)
388
+
389
+ writer.flush
390
+ end
391
+
392
+ should "return workbook markup" do
393
+ build_workbook(subject)
394
+ assert_equal(
395
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\"><Styles><Style ss:ID=\"some_font\"><Font ss:Bold=\"1\" /></Style><Style ss:ID=\"some_numformat\"><NumberFormat ss:Format=\"General\" /></Style></Styles><Worksheet ss:Name=\"test1\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet><Worksheet ss:Name=\"test2\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet></Workbook>",
396
+ subject.workbook
397
+ )
398
+ end
399
+
400
+ should "return pretty workbook markup" do
401
+ writer = Writer.new(:pp => 2)
402
+ build_workbook(writer)
403
+ assert_equal(
404
+ "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">\n <Styles>\n <Style ss:ID=\"some_font\">\n <Font ss:Bold=\"1\" />\n </Style>\n <Style ss:ID=\"some_numformat\">\n <NumberFormat ss:Format=\"General\" />\n </Style>\n </Styles>\n <Worksheet ss:Name=\"test1\">\n <Table>\n <Row ss:Hidden=\"1\">\n <Cell ss:Index=\"2\">\n <Data ss:Type=\"String\">some data</Data>\n </Cell>\n </Row>\n </Table>\n </Worksheet>\n <Worksheet ss:Name=\"test2\">\n <Table>\n <Row ss:Hidden=\"1\">\n <Cell ss:Index=\"2\">\n <Data ss:Type=\"String\">some data</Data>\n </Cell>\n </Row>\n </Table>\n </Worksheet>\n</Workbook>",
405
+ writer.workbook
406
+ )
407
+ end
408
+
409
+
410
+
411
+ end
412
+
413
+ end
data/xmlss.gemspec CHANGED
@@ -19,6 +19,6 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_development_dependency("bundler", ["~> 1.0"])
21
21
  s.add_development_dependency("assert", ["~> 0.6"])
22
- s.add_dependency("undies", ["~> 2.2"])
22
+ s.add_dependency("undies", ["~> 2.2.1"])
23
23
  s.add_dependency("enumeration", ["~> 1.3"])
24
24
  end