xmlss 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
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