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
@@ -1,372 +0,0 @@
1
- require 'assert'
2
-
3
- require 'xmlss/undies_writer'
4
- require 'xmlss/workbook'
5
-
6
- class Xmlss::UndiesWriter
7
-
8
- class BasicTests < Assert::Context
9
- desc "UndiesWriter"
10
- setup do
11
- @w = Xmlss::UndiesWriter.new
12
- end
13
- subject { @w }
14
-
15
- should have_class_methods :attributes, :classify, :coerce
16
- should have_readers :style_markup, :element_markup
17
- should have_instance_method :flush, :workbook
18
- should have_instance_methods :style, :alignment, :borders, :border
19
- should have_instance_methods :font, :interior, :number_format, :protection
20
- should have_instance_methods :worksheet, :column, :row, :data
21
-
22
- should "return itself when flushed" do
23
- assert_equal subject, subject.flush
24
- end
25
-
26
- end
27
-
28
- class HelpersTests < BasicTests
29
-
30
- should "coerce certain values for xml output" do
31
- assert_equal 1, Xmlss::UndiesWriter.coerce(true)
32
- assert_nil Xmlss::UndiesWriter.coerce(false)
33
- assert_nil Xmlss::UndiesWriter.coerce("")
34
- assert_equal "hi", Xmlss::UndiesWriter.coerce("hi")
35
- assert_equal 1, Xmlss::UndiesWriter.coerce(1)
36
- end
37
-
38
- should "classify underscored string" do
39
- assert_equal "Hi", Xmlss::UndiesWriter.classify("Hi")
40
- assert_equal "Hi", Xmlss::UndiesWriter.classify("hi")
41
- assert_equal "Hithere", Xmlss::UndiesWriter.classify("HiThere")
42
- assert_equal "Hithere", Xmlss::UndiesWriter.classify("hithere")
43
- assert_equal "HiThere", Xmlss::UndiesWriter.classify("Hi_There")
44
- assert_equal "HiThere", Xmlss::UndiesWriter.classify("Hi_there")
45
- assert_equal "HiThere", Xmlss::UndiesWriter.classify("hi_there")
46
- end
47
-
48
- should "convert a list of attributes for xml output" do
49
- class Thing
50
- def keys; [:thing, :other, 'some', 'hi', :hi_there]; end
51
-
52
- def thing; true; end
53
- def other; false; end
54
- def some; ""; end
55
- def hi; :there; end
56
- def hi_there; "you"; end
57
- end
58
- thing = Thing.new
59
- exp = {
60
- "ss:Hi" => "there",
61
- "ss:HiThere" => "you",
62
- "ss:Thing" => "1"
63
- }
64
-
65
- assert_equal exp, Xmlss::UndiesWriter.attributes(thing, thing.keys)
66
- end
67
-
68
- end
69
-
70
- class StyleWritingTests < BasicTests
71
- desc "writing style markup"
72
-
73
- should "write alignment markup" do
74
- subject.alignment(Xmlss::Style::Alignment.new({
75
- :wrap_text => true,
76
- :horizontal => :center,
77
- :vertical => :bottom,
78
- :rotate => 90
79
- }))
80
- subject.flush
81
-
82
- assert_equal(
83
- "<Alignment ss:Horizontal=\"Center\" ss:Rotate=\"90\" ss:Vertical=\"Bottom\" ss:WrapText=\"1\" />",
84
- subject.style_markup
85
- )
86
- end
87
-
88
- should "write border markup" do
89
- subject.border(Xmlss::Style::Border.new({
90
- :color => '#FF0000',
91
- :position => :top,
92
- :weight => :thick,
93
- :line_style => :dot
94
- }))
95
- subject.flush
96
-
97
- assert_equal(
98
- "<Border ss:Color=\"#FF0000\" ss:LineStyle=\"Dot\" ss:Position=\"Top\" ss:Weight=\"3\" />",
99
- subject.style_markup
100
- )
101
- end
102
-
103
- should "write border collection markup" do
104
- subject.borders {
105
- subject.border(Xmlss::Style::Border.new({
106
- :color => '#FF0000',
107
- :position => :top
108
- }))
109
- subject.border(Xmlss::Style::Border.new({
110
- :position => :left
111
- }))
112
- }
113
- subject.flush
114
-
115
- assert_equal(
116
- "<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>",
117
- subject.style_markup
118
- )
119
- end
120
-
121
- should "write font markup" do
122
- subject.font(Xmlss::Style::Font.new({
123
- :bold => true,
124
- :color => '#FF0000',
125
- :italic => true,
126
- :size => 10,
127
- :strike_through => true,
128
- :underline => :single,
129
- :alignment => :superscript,
130
- :name => 'Verdana'
131
- }))
132
- subject.flush
133
-
134
- assert_equal(
135
- "<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\" />",
136
- subject.style_markup
137
- )
138
- end
139
-
140
- should "write interior markup" do
141
- subject.interior(Xmlss::Style::Interior.new({
142
- :color => "#000000",
143
- :pattern => :solid,
144
- :pattern_color => "#FF0000"
145
- }))
146
- subject.flush
147
-
148
- assert_equal(
149
- "<Interior ss:Color=\"#000000\" ss:Pattern=\"Solid\" ss:PatternColor=\"#FF0000\" />",
150
- subject.style_markup
151
- )
152
- end
153
-
154
- should "write number format markup" do
155
- subject.number_format(Xmlss::Style::NumberFormat.new("General"))
156
- subject.flush
157
-
158
- assert_equal(
159
- "<NumberFormat ss:Format=\"General\" />",
160
- subject.style_markup
161
- )
162
- end
163
-
164
- should "write protection markup" do
165
- subject.protection(Xmlss::Style::Protection.new(true))
166
- subject.flush
167
-
168
- assert_equal(
169
- "<Protection ss:Protect=\"1\" />",
170
- subject.style_markup
171
- )
172
- end
173
-
174
- should "write full style markup" do
175
- subject.style(Xmlss::Style::Base.new(:write_markup_test)) {
176
- subject.alignment(Xmlss::Style::Alignment.new({
177
- :horizontal => :left,
178
- :vertical => :center,
179
- :wrap_text => true
180
- }))
181
- subject.borders {
182
- subject.border(Xmlss::Style::Border.new({:position => :left}))
183
- subject.border(Xmlss::Style::Border.new({:position => :right}))
184
- }
185
- subject.font(Xmlss::Style::Font.new({:bold => true}))
186
- subject.interior(Xmlss::Style::Interior.new({:color => "#000000"}))
187
- subject.number_format(Xmlss::Style::NumberFormat.new("General"))
188
- subject.protection(Xmlss::Style::Protection.new(true))
189
- }
190
- subject.flush
191
-
192
- assert_equal(
193
- "<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>",
194
- subject.style_markup
195
- )
196
- end
197
-
198
- end
199
-
200
-
201
- class WorksheetWritingTests < BasicTests
202
- desc "writing worksheet markup"
203
-
204
- should "write data markup" do
205
- subject.data(Xmlss::Element::Data.new("some data"))
206
- subject.flush
207
-
208
- assert_equal(
209
- "<Data ss:Type=\"String\">some data</Data>",
210
- subject.element_markup
211
- )
212
- end
213
-
214
- should "write data markup w/ \\n line breaks" do
215
- subject.data(Xmlss::Element::Data.new("line\nbreak", :type => :string))
216
- subject.flush
217
-
218
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
219
- end
220
-
221
- should "write data markup w/ \\r line breaks" do
222
- subject.data(Xmlss::Element::Data.new("line\rbreak", :type => :string))
223
- subject.flush
224
-
225
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
226
- end
227
-
228
- should "write data markup w/ \\r\\n line breaks" do
229
- subject.data(Xmlss::Element::Data.new("line\r\nbreak", :type => :string))
230
- subject.flush
231
-
232
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
233
- end
234
-
235
- should "write data markup w/ \\n\\r line breaks" do
236
- subject.data(Xmlss::Element::Data.new("line\n\rbreak", :type => :string))
237
- subject.flush
238
-
239
- assert_equal "<Data ss:Type=\"String\">line#{Xmlss::UndiesWriter::LB}break</Data>", subject.element_markup
240
- end
241
-
242
- should "write data markup w/ line breaks and leading space" do
243
- subject.data(Xmlss::Element::Data.new(%s{
244
- Should
245
- honor
246
- this}, :type => :string))
247
- subject.flush
248
-
249
- assert_equal(
250
- "<Data ss:Type=\"String\">#{Xmlss::UndiesWriter::LB}Should#{Xmlss::UndiesWriter::LB} honor#{Xmlss::UndiesWriter::LB} this</Data>",
251
- subject.element_markup
252
- )
253
- end
254
-
255
- should "write data markup w/ escaped values" do
256
- subject.data(Xmlss::Element::Data.new("some\n&<>'\"/\ndata"))
257
- subject.flush
258
-
259
- assert_equal(
260
- "<Data ss:Type=\"String\">some&#13;&#10;&amp;&lt;&gt;&#x27;&quot;&#x2F;&#13;&#10;data</Data>",
261
- subject.element_markup
262
- )
263
- end
264
-
265
- should "write cell markup" do
266
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
267
- subject.data(Xmlss::Element::Data.new("some data"))
268
- }
269
- subject.flush
270
-
271
- assert_equal(
272
- "<Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell>",
273
- subject.element_markup
274
- )
275
- end
276
-
277
- should "write row markup" do
278
- subject.row(Xmlss::Element::Row.new({:hidden => true})) {
279
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
280
- subject.data(Xmlss::Element::Data.new("some data"))
281
- }
282
- }
283
- subject.flush
284
-
285
- assert_equal(
286
- "<Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row>",
287
- subject.element_markup
288
- )
289
- end
290
-
291
- should "write column markup" do
292
- subject.column(Xmlss::Element::Column.new({:hidden => true}))
293
- subject.flush
294
-
295
- assert_equal(
296
- "<Column ss:Hidden=\"1\" />",
297
- subject.element_markup
298
- )
299
- end
300
-
301
- should "write worksheet markup" do
302
- subject.worksheet(Xmlss::Element::Worksheet.new('test')) {
303
- subject.row(Xmlss::Element::Row.new({:hidden => true})) {
304
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
305
- subject.data(Xmlss::Element::Data.new("some data"))
306
- }
307
- }
308
- }
309
- subject.flush
310
-
311
- assert_equal(
312
- "<Worksheet ss:Name=\"test\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet>",
313
- subject.element_markup
314
- )
315
- end
316
-
317
- should "return workbook markup" do
318
- subject.style(Xmlss::Style::Base.new(:some_font)) {
319
- subject.font(Xmlss::Style::Font.new({:bold => true}))
320
- }
321
-
322
- subject.style(Xmlss::Style::Base.new(:some_numformat)) {
323
- subject.number_format(Xmlss::Style::NumberFormat.new("General"))
324
- }
325
-
326
- subject.worksheet(Xmlss::Element::Worksheet.new('test')) {
327
- subject.row(Xmlss::Element::Row.new({:hidden => true})) {
328
- subject.cell(Xmlss::Element::Cell.new({:index => 2})) {
329
- subject.data(Xmlss::Element::Data.new("some data"))
330
- }
331
- }
332
- }
333
-
334
- subject.flush
335
-
336
- assert_equal(
337
- "<?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=\"some_font\"><Font ss:Bold=\"1\" /></Style><Style ss:ID=\"some_numformat\"><NumberFormat ss:Format=\"General\" /></Style></Styles><Worksheet ss:Name=\"test\"><Table><Row ss:Hidden=\"1\"><Cell ss:Index=\"2\"><Data ss:Type=\"String\">some data</Data></Cell></Row></Table></Worksheet></Workbook>",
338
- subject.workbook
339
- )
340
- end
341
-
342
- should "return pretty workbook markup" do
343
- writer = Xmlss::UndiesWriter.new(:pp => 2)
344
- writer.style(Xmlss::Style::Base.new(:some_font)) {
345
- writer.font(Xmlss::Style::Font.new({:bold => true}))
346
- }
347
-
348
- writer.style(Xmlss::Style::Base.new(:some_numformat)) {
349
- writer.number_format(Xmlss::Style::NumberFormat.new("General"))
350
- }
351
-
352
- writer.worksheet(Xmlss::Element::Worksheet.new('test')) {
353
- writer.row(Xmlss::Element::Row.new({:hidden => true})) {
354
- writer.cell(Xmlss::Element::Cell.new({:index => 2})) {
355
- writer.data(Xmlss::Element::Data.new("some data"))
356
- }
357
- }
358
- }
359
-
360
- writer.flush
361
-
362
- assert_equal(
363
- "<?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=\"test\">\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>",
364
- writer.workbook
365
- )
366
- end
367
-
368
-
369
-
370
- end
371
-
372
- end