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.
Files changed (56) hide show
  1. data/.gitignore +1 -2
  2. data/Gemfile +1 -0
  3. data/Gemfile.lock +12 -11
  4. data/README.rdoc +141 -107
  5. data/Rakefile +24 -1
  6. data/bench/profiler.rb +6 -0
  7. data/bench/profiler_runner.rb +43 -0
  8. data/examples/example_workbook.rb +8 -12
  9. data/examples/layout.rb +34 -60
  10. data/examples/layout.xml +66 -0
  11. data/examples/simple.rb +16 -21
  12. data/examples/simple.xml +32 -0
  13. data/examples/styles.rb +52 -56
  14. data/examples/styles.xml +50 -0
  15. data/examples/text.rb +18 -28
  16. data/examples/text.xml +20 -0
  17. data/lib/xmlss/{cell.rb → element/cell.rb} +4 -14
  18. data/lib/xmlss/{column.rb → element/column.rb} +2 -7
  19. data/lib/xmlss/{data.rb → element/data.rb} +7 -12
  20. data/lib/xmlss/{row.rb → element/row.rb} +2 -13
  21. data/lib/xmlss/{worksheet.rb → element/worksheet.rb} +7 -18
  22. data/lib/xmlss/style/alignment.rb +3 -10
  23. data/lib/xmlss/style/base.rb +6 -45
  24. data/lib/xmlss/style/border.rb +5 -5
  25. data/lib/xmlss/style/font.rb +2 -9
  26. data/lib/xmlss/style/interior.rb +2 -5
  27. data/lib/xmlss/style/number_format.rb +4 -7
  28. data/lib/xmlss/style/protection.rb +4 -7
  29. data/lib/xmlss/undies_writer.rb +172 -0
  30. data/lib/xmlss/version.rb +1 -1
  31. data/lib/xmlss/workbook.rb +97 -31
  32. data/lib/xmlss.rb +1 -28
  33. data/test/{cell_test.rb → element/cell_test.rb} +11 -35
  34. data/test/{column_test.rb → element/column_test.rb} +6 -12
  35. data/test/{data_test.rb → element/data_test.rb} +15 -10
  36. data/test/{row_test.rb → element/row_test.rb} +5 -35
  37. data/test/{worksheet_test.rb → element/worksheet_test.rb} +4 -30
  38. data/test/helper.rb +13 -30
  39. data/test/style/alignment_test.rb +13 -45
  40. data/test/style/base_test.rb +1 -106
  41. data/test/style/border_test.rb +12 -32
  42. data/test/style/font_test.rb +11 -43
  43. data/test/style/interior_test.rb +7 -27
  44. data/test/style/number_format_test.rb +5 -21
  45. data/test/style/protection_test.rb +2 -12
  46. data/test/undies_writer_test.rb +333 -0
  47. data/test/workbook_test.rb +89 -44
  48. data/xmlss.gemspec +2 -2
  49. metadata +37 -39
  50. data/lib/xmlss/item_set.rb +0 -17
  51. data/lib/xmlss/table.rb +0 -22
  52. data/lib/xmlss/xml.rb +0 -60
  53. data/test/item_set_test.rb +0 -27
  54. data/test/table_test.rb +0 -56
  55. data/test/xml_test.rb +0 -81
  56. data/test/xmlss_test.rb +0 -31
data/lib/xmlss/table.rb DELETED
@@ -1,22 +0,0 @@
1
- require 'xmlss/item_set'
2
- require 'xmlss/column'
3
- require 'xmlss/row'
4
-
5
- module Xmlss
6
- class Table
7
-
8
- include Xmlss::Xml
9
- def xml
10
- { :node => :table,
11
- :children => [:columns, :rows] }
12
- end
13
-
14
- attr_accessor :columns, :rows
15
-
16
- def initialize(attrs={})
17
- self.columns = Xmlss::ItemSet.new(nil, attrs[:columns] || [])
18
- self.rows = Xmlss::ItemSet.new(nil, attrs[:rows] || [])
19
- end
20
-
21
- end
22
- end
data/lib/xmlss/xml.rb DELETED
@@ -1,60 +0,0 @@
1
- require 'nokogiri'
2
-
3
- # common methods used for generating XML
4
- module Xmlss
5
- XML_NS = "xmlns"
6
- SHEET_NS = "ss"
7
- NS_URI = "urn:schemas-microsoft-com:office:spreadsheet"
8
-
9
- module Xml
10
-
11
- def xml_builder
12
- ::Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |builder|
13
- yield(builder) if block_given?
14
- end
15
- end
16
-
17
- def build_node(builder, attrs={})
18
- unless xml && xml.kind_of?(::Hash)
19
- raise ArgumentError, "no xml config provided"
20
- end
21
- if xml[:node] && !xml[:node].to_s.empty?
22
- if xml[:value] && (v = self.send(xml[:value]).to_s)
23
- builder.send(Xmlss.classify(xml[:node]), v, build_attributes(attrs))
24
- else
25
- builder.send(Xmlss.classify(xml[:node]), build_attributes(attrs)) do
26
- build_children(builder)
27
- end
28
- end
29
- else
30
- build_children(builder)
31
- end
32
- end
33
-
34
- def xml_save_with(*options)
35
- ::Nokogiri::XML::Node::SaveOptions::AS_XML |
36
- (options.include?(:format) ? ::Nokogiri::XML::Node::SaveOptions::FORMAT : 0)
37
- end
38
-
39
- def build_attributes(attrs={})
40
- (xml[:attributes] || []).inject({}) do |xattrs, a|
41
- xattrs.merge(if !(xv = Xmlss.xmlify(self.send(a))).nil?
42
- {"#{Xmlss::SHEET_NS}:#{Xmlss.classify(a)}" => xv}
43
- else
44
- {}
45
- end)
46
- end.merge(attrs)
47
- end
48
- private :build_attributes
49
-
50
- def build_children(builder)
51
- (xml[:children] || []).each do |c|
52
- if (child = c.kind_of?(::Symbol) ? self.send(c) : c)
53
- child.build_node(builder) if child.respond_to?(:build_node)
54
- end
55
- end
56
- end
57
- private :build_children
58
-
59
- end
60
- end
@@ -1,27 +0,0 @@
1
- require "assert"
2
- require 'xmlss/item_set'
3
-
4
- module Xmlss
5
- class ItemSetTest < Assert::Context
6
- desc "Xmlss::ItemSet"
7
- subject { ItemSet.new(:test) }
8
-
9
- should have_reader :name
10
-
11
- should "be an Array" do
12
- assert_kind_of ::Array, subject
13
- assert_respond_to :each, subject
14
- assert_empty subject
15
- end
16
-
17
- end
18
-
19
- class ItemSetXmlTest < ItemSetTest
20
- desc "for generating XML"
21
-
22
- should have_reader :xml
23
- should_build_node
24
- should_build_no_attributes_by_default(ItemSet)
25
- end
26
-
27
- end
data/test/table_test.rb DELETED
@@ -1,56 +0,0 @@
1
- require "assert"
2
- require 'xmlss/table'
3
-
4
- module Xmlss
5
- class TableTest < Assert::Context
6
- desc "Xmlss::Table"
7
- before { @tbl = Table.new }
8
- subject { @tbl }
9
-
10
- should have_accessor :columns, :rows
11
-
12
- should "set it's defaults" do
13
- assert_equal [], subject.columns
14
- assert_equal [], subject.rows
15
- end
16
-
17
- should "allow defining a rows/columns at init" do
18
- tbl = Table.new({
19
- :columns => [Column.new],
20
- :rows => [Row.new]
21
- })
22
-
23
- assert_equal 1, tbl.columns.size
24
- assert_kind_of Column, tbl.columns.first
25
- assert_equal 1, tbl.rows.size
26
- assert_kind_of Row, tbl.rows.first
27
- end
28
-
29
- end
30
-
31
- class TableXmlTest < TableTest
32
- desc "for generating XML"
33
- should have_reader :xml
34
- should_build_node
35
-
36
- end
37
-
38
- class TableRowsColsTest < TableTest
39
- desc "when using rows/columns"
40
- before do
41
- subject.columns << Column.new
42
- r = Row.new
43
- r.cells << Cell.new
44
- subject.rows << r
45
- end
46
-
47
- should "should build a table object" do
48
- assert_equal 1, subject.columns.size
49
- assert_kind_of Column, subject.columns.first
50
- assert_equal 1, subject.rows.size
51
- assert_kind_of Row, subject.rows.first
52
- end
53
-
54
- end
55
-
56
- end
data/test/xml_test.rb DELETED
@@ -1,81 +0,0 @@
1
- require "assert"
2
- require 'test/thing'
3
-
4
- module Xmlss
5
- class XmlTest < Assert::Context
6
- desc "Xmlss::Xml"
7
- before { @thing = Thing.new }
8
- subject { @thing }
9
-
10
- should "should provide proper namespace constants" do
11
- assert_equal "xmlns", Xmlss::XML_NS
12
- assert_equal "ss", Xmlss::SHEET_NS
13
- assert_equal "urn:schemas-microsoft-com:office:spreadsheet", Xmlss::NS_URI
14
- end
15
-
16
- should "bark if you use xml generation without configuring" do
17
- assert_raises ArgumentError do
18
- ::Nokogiri::XML::Builder.new do |builder|
19
- subject.build_node(builder)
20
- end
21
- end
22
- end
23
-
24
- end
25
-
26
- class XmlConfigTest < XmlTest
27
- desc "with config"
28
- before do
29
- subject.xml = {
30
- :node => :thing,
31
- :attributes => [:one, :two, :three],
32
- :children => [:child_nodes]
33
- }
34
- subject.one = true
35
- subject.two = "two"
36
- subject.three = ""
37
- end
38
-
39
- should "build it's node" do
40
- assert_nothing_raised do
41
- ::Nokogiri::XML::Builder.new do |builder|
42
- subject.build_node(builder)
43
- end
44
- end
45
- end
46
-
47
- should "build with no whitespace formatting by default" do
48
- assert_equal(
49
- "<?xml version=\"1.0\"?>\n<Thing ss:One=\"1\" ss:Two=\"two\"><Nodes/></Thing>\n",
50
- ::Nokogiri::XML::Builder.new do |builder|
51
- subject.build_node(builder)
52
- end.to_xml({:save_with => subject.xml_save_with})
53
- )
54
- end
55
-
56
- should "build with whitespace formatting if specified" do
57
- assert_equal(
58
- "<?xml version=\"1.0\"?>\n<Thing ss:One=\"1\" ss:Two=\"two\">\n <Nodes/>\n</Thing>\n",
59
- ::Nokogiri::XML::Builder.new do |builder|
60
- subject.build_node(builder)
61
- end.to_xml({:save_with => subject.xml_save_with(:format)})
62
- )
63
- end
64
-
65
- should "generate build attributes based on it's own attributes" do
66
- assert_nothing_raised do
67
- subject.send :build_attributes
68
- end
69
- attrs = subject.send :build_attributes
70
-
71
- assert_kind_of ::Hash, attrs
72
- assert attrs.has_key?("#{Xmlss::SHEET_NS}:One")
73
- assert_equal 1, attrs["#{Xmlss::SHEET_NS}:One"]
74
- assert attrs.has_key?("#{Xmlss::SHEET_NS}:Two")
75
- assert_equal 'two', attrs["#{Xmlss::SHEET_NS}:Two"]
76
- assert !attrs.has_key?("#{Xmlss::SHEET_NS}:Three")
77
- end
78
-
79
- end
80
-
81
- end
data/test/xmlss_test.rb DELETED
@@ -1,31 +0,0 @@
1
- require "assert"
2
-
3
- class XmlssTest < Assert::Context
4
- desc "Xmlss helpers"
5
- subject { Xmlss }
6
-
7
- should "be provided" do
8
- assert_respond_to :classify, subject
9
- assert_respond_to :xmlify, subject
10
- end
11
-
12
- should "classify underscored strings" do
13
- assert_nothing_raised do
14
- subject.send(:classify, 'poo')
15
- end
16
- assert_equal "Poo", subject.send(:classify, 'poo')
17
- assert_equal "MorePoo", subject.send(:classify, 'more_poo')
18
- end
19
-
20
- should "filter values for use in XML" do
21
- assert_nothing_raised do
22
- subject.send(:xmlify, 'poo')
23
- end
24
-
25
- assert_equal 1, subject.send(:xmlify, true)
26
- assert_equal nil, subject.send(:xmlify, false)
27
- assert_equal nil, subject.send(:xmlify, "")
28
- assert_equal "poo", subject.send(:xmlify, 'poo')
29
- end
30
-
31
- end