osheet 0.10.0 → 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 (75) hide show
  1. data/Gemfile +0 -1
  2. data/Gemfile.lock +9 -6
  3. data/Rakefile +35 -19
  4. data/bench/bench_runner.rb +91 -0
  5. data/bench/profiler_runner.rb +1 -0
  6. data/examples/basic.rb +1 -1
  7. data/examples/basic.xls +2 -1
  8. data/examples/basic_with_templates.rb +2 -2
  9. data/examples/basic_with_templates.xls +3 -3
  10. data/examples/formats.rb +2 -2
  11. data/examples/formats.xls +46 -46
  12. data/examples/formula.rb +2 -2
  13. data/examples/styles.rb +2 -2
  14. data/examples/styles.xls +5 -5
  15. data/examples/trivial.rb +2 -2
  16. data/lib/osheet/cell.rb +48 -46
  17. data/lib/osheet/column.rb +23 -29
  18. data/lib/osheet/format.rb +3 -3
  19. data/lib/osheet/meta_element.rb +2 -1
  20. data/lib/osheet/mixin.rb +21 -9
  21. data/lib/osheet/partial.rb +5 -9
  22. data/lib/osheet/row.rb +28 -32
  23. data/lib/osheet/style.rb +11 -25
  24. data/lib/osheet/styled_element.rb +9 -1
  25. data/lib/osheet/template.rb +3 -8
  26. data/lib/osheet/version.rb +1 -1
  27. data/lib/osheet/workbook.rb +135 -43
  28. data/lib/osheet/workbook_api.rb +208 -0
  29. data/lib/osheet/workbook_element.rb +225 -8
  30. data/lib/osheet/worksheet.rb +22 -28
  31. data/lib/osheet/xmlss_writer/style_cache.rb +64 -0
  32. data/lib/osheet/xmlss_writer/style_settings.rb +148 -0
  33. data/lib/osheet/xmlss_writer.rb +143 -1
  34. data/lib/osheet.rb +3 -29
  35. data/osheet.gemspec +4 -1
  36. data/test/cell_test.rb +33 -98
  37. data/test/column_test.rb +20 -88
  38. data/test/{mixins.rb → fixtures/mixins.rb} +6 -4
  39. data/test/fixtures/test_writer.rb +68 -0
  40. data/test/format_test.rb +2 -2
  41. data/test/helper.rb +34 -68
  42. data/test/mixin_test.rb +37 -43
  43. data/test/partial_test.rb +3 -26
  44. data/test/row_test.rb +32 -85
  45. data/test/style_test.rb +9 -26
  46. data/test/template_test.rb +5 -6
  47. data/test/workbook_element_test.rb +231 -0
  48. data/test/workbook_test.rb +225 -116
  49. data/test/worksheet_test.rb +51 -98
  50. data/test/xmlss_writer/api_test.rb +139 -0
  51. data/test/xmlss_writer/style_cache_test.rb +65 -0
  52. data/test/xmlss_writer/style_settings_test.rb +263 -0
  53. data/test/xmlss_writer/styles_test.rb +121 -153
  54. data/test/xmlss_writer_test.rb +91 -0
  55. metadata +75 -50
  56. data/lib/osheet/associations.rb +0 -58
  57. data/lib/osheet/instance.rb +0 -30
  58. data/lib/osheet/markup_element.rb +0 -22
  59. data/lib/osheet/partial_set.rb +0 -57
  60. data/lib/osheet/railtie.rb +0 -9
  61. data/lib/osheet/style_set.rb +0 -39
  62. data/lib/osheet/template_set.rb +0 -51
  63. data/lib/osheet/view_handler/rails.rb +0 -44
  64. data/lib/osheet/view_handler/tilt.rb +0 -42
  65. data/lib/osheet/view_handler.rb +0 -2
  66. data/lib/osheet/worksheet_element.rb +0 -17
  67. data/lib/osheet/xmlss_writer/base.rb +0 -49
  68. data/lib/osheet/xmlss_writer/elements.rb +0 -56
  69. data/lib/osheet/xmlss_writer/styles.rb +0 -216
  70. data/test/osheet_test.rb +0 -13
  71. data/test/partial_set_test.rb +0 -64
  72. data/test/style_set_test.rb +0 -47
  73. data/test/template_set_test.rb +0 -74
  74. data/test/xmlss_writer/base_test.rb +0 -103
  75. data/test/xmlss_writer/elements_test.rb +0 -172
@@ -0,0 +1,148 @@
1
+ require 'osheet/style'
2
+ require 'osheet/xmlss_writer'
3
+
4
+ class Osheet::XmlssWriter
5
+ class StyleSettings
6
+
7
+ attr_reader :styles, :value
8
+
9
+ def initialize(styles)
10
+ @styles = styles
11
+ @value = @styles.inject({}) do |value, style|
12
+ merged_settings(value, style_settings(style))
13
+ end
14
+ end
15
+
16
+ def [](setting); @value[setting]; end
17
+
18
+ # call the given block passing it the setting if that setting
19
+ # exists and is not empty
20
+ def setting(s, &block)
21
+ block.call if self.value[s] && !self.value[s].empty?
22
+ end
23
+
24
+ protected
25
+
26
+ def merged_settings(current, add)
27
+ # concat values for keys in both sets
28
+ current.keys.each do |k|
29
+ current[k].merge!(add.delete(k) || {})
30
+ end
31
+ # merge keys for anything not in the current
32
+ current.merge(add)
33
+ end
34
+
35
+ def style_settings(osheet_style_obj)
36
+ settings = {}
37
+ Osheet::Style::SETTINGS.each do |setting|
38
+ if !(v = osheet_style_obj.send(setting)).empty?
39
+ settings[setting] = self.send("#{setting}_settings", v)
40
+ end
41
+ end
42
+ settings
43
+ end
44
+
45
+ def align_settings(osheet_align_directives)
46
+ osheet_align_directives.inject({}) do |settings, directive|
47
+ case directive
48
+ when :left, :center, :right
49
+ settings[:horizontal] = directive
50
+ when :top, :bottom
51
+ settings[:vertical] = directive
52
+ when :middle
53
+ settings[:vertical] = :center
54
+ when :wrap
55
+ settings[:wrap_text] = true
56
+ when ::Fixnum
57
+ settings[:rotate] = directive
58
+ end
59
+ settings
60
+ end
61
+ end
62
+
63
+ def font_settings(osheet_font_directives)
64
+ osheet_font_directives.inject({}) do |settings, directive|
65
+ case directive
66
+ when ::Fixnum
67
+ settings[:size] = directive
68
+ when ::String
69
+ if directive =~ /^#/
70
+ settings[:color] = directive
71
+ else
72
+ settings[:name] = directive
73
+ end
74
+ when :bold, :italic, :shadow
75
+ settings[directive] = true
76
+ when :subscript, :superscript
77
+ settings[:alignment] = directive
78
+ when :strikethrough
79
+ settings[:strike_through] = true
80
+ when :underline
81
+ settings[:underline] = :single
82
+ when :double_underline
83
+ settings[:underline] = :double
84
+ when :accounting_underline
85
+ settings[:underline] = :single_accounting
86
+ when :double_accounting_underline
87
+ settings[:underline] = :double_accounting
88
+ end
89
+ settings
90
+ end
91
+ end
92
+
93
+ def bg_settings(osheet_bg_directives)
94
+ osheet_bg_directives.inject({}) do |settings, directive|
95
+ case directive
96
+ when ::String
97
+ if directive =~ /^#/
98
+ settings[:color] = directive
99
+ end
100
+ when ::Symbol
101
+ if ::Xmlss::Style::Interior.pattern_set.include?(directive)
102
+ settings[:pattern] = directive
103
+ end
104
+ when ::Hash
105
+ directive.each do |pattern, color|
106
+ if ::Xmlss::Style::Interior.pattern_set.include?(pattern) && color =~ /^#/
107
+ settings[:pattern] = pattern
108
+ settings[:pattern_color] = color
109
+ end
110
+ end
111
+ end
112
+
113
+ if !settings[:color].nil? && settings[:pattern].nil?
114
+ settings[:pattern] = :solid
115
+ end
116
+
117
+ settings
118
+ end
119
+ end
120
+
121
+ def border_settings(osheet_border_directives)
122
+ osheet_border_directives.inject({}) do |settings, directive|
123
+ case directive
124
+ when ::String
125
+ if directive =~ /^#/
126
+ settings[:color] = directive
127
+ end
128
+ when ::Symbol
129
+ if ::Xmlss::Style::Border.position_set.include?(directive)
130
+ settings[:position] = directive
131
+ elsif ::Xmlss::Style::Border.weight_set.include?(directive)
132
+ settings[:weight] = directive
133
+ elsif ::Xmlss::Style::Border.line_style_set.include?(directive)
134
+ settings[:line_style] = directive
135
+ end
136
+ end
137
+ settings
138
+ end
139
+ end
140
+
141
+ ::Osheet::Style::BORDER_POSITIONS.each do |p|
142
+ define_method("border_#{p}_settings") do |cmds|
143
+ border_settings(cmds+[p])
144
+ end
145
+ end
146
+
147
+ end
148
+ end
@@ -1 +1,143 @@
1
- require 'osheet/xmlss_writer/base'
1
+ require 'osheet'
2
+ require 'xmlss'
3
+
4
+ require 'osheet/xmlss_writer/style_cache'
5
+
6
+ module Osheet
7
+ class XmlssWriter
8
+
9
+ # The Osheet::XmlssWriter provides the logic/translation needed to drive
10
+ # an xmlss workbook using the Osheet API. The writer creates an xmlss
11
+ # workbook and uses the builder approach to drive the workbook creation.
12
+
13
+ # The writer maintains a set of used xmlss styles and handles creating
14
+ # xmlss style objects as needed and manages style keys
15
+
16
+ attr_reader :style_cache, :xmlss_workbook
17
+
18
+ def initialize(*args, &block)
19
+ @xmlss_workbook = Xmlss::Workbook.new(Xmlss::Writer.new(*args, &block))
20
+ @osheet_workbook = nil
21
+ @osheet_worksheet_names = []
22
+ @style_cache = nil
23
+ end
24
+
25
+ def bind(osheet_workbook)
26
+ @osheet_workbook = osheet_workbook
27
+ @style_cache = StyleCache.new(@osheet_workbook, @xmlss_workbook)
28
+ end
29
+
30
+ def to_s
31
+ @xmlss_workbook.to_s
32
+ end
33
+ alias_method :to_data, :to_s
34
+
35
+ def to_file(file_path)
36
+ @xmlss_workbook.to_file(file_path)
37
+ end
38
+
39
+ # Element writers
40
+
41
+ def worksheet(worksheet, &build)
42
+ if @osheet_workbook && @osheet_worksheet_names.include?(worksheet.name.to_s)
43
+ raise ArgumentError, "you can't write two worksheets with the same name ('#{worksheet.name}')"
44
+ end
45
+ @osheet_worksheet_names << worksheet.name.to_s
46
+ @xmlss_workbook.worksheet(worksheet.name, &build)
47
+ end
48
+
49
+ def column(column, &build)
50
+ attrs = {
51
+ :width => column.width,
52
+ :auto_fit_width => column.autofit,
53
+ :hidden => column.hidden
54
+ }
55
+ if s = @style_cache.get(column.style_class, column.format)
56
+ attrs[:style_id] = s.id
57
+ end
58
+ @xmlss_workbook.column(attrs, &build)
59
+ end
60
+
61
+ def row(row, &build)
62
+ attrs = {
63
+ :height => row.height,
64
+ :auto_fit_height => row.autofit,
65
+ :hidden => row.hidden
66
+ }
67
+ if s = @style_cache.get(row.style_class, row.format)
68
+ attrs[:style_id] = s.id
69
+ end
70
+ @xmlss_workbook.row(attrs, &build)
71
+ end
72
+
73
+ def cell(cell, &build)
74
+ attrs = {
75
+ :href => cell.href,
76
+ :index => cell.index,
77
+ :merge_across => cell_merge(cell.colspan),
78
+ :merge_down => cell_merge(cell.rowspan),
79
+ :formula => cell.formula
80
+ }
81
+ if s = @style_cache.get(cell.style_class, cell.format)
82
+ attrs[:style_id] = s.id
83
+ end
84
+ @xmlss_workbook.cell(cell.data, attrs, &build)
85
+ end
86
+
87
+ # Element style writers
88
+
89
+ # given an elements style_class or format attributes:
90
+ # 1) write a new xmlss style object and
91
+ # 2) set the current element's style_id attribute
92
+
93
+ def style(style_class, format=nil)
94
+ @style_cache.get(
95
+ style_class,
96
+ format || Osheet::Format.new(:general)
97
+ ).tap do |xmlss_style|
98
+ @xmlss_workbook.style_id(xmlss_style.id)
99
+ end
100
+ end
101
+
102
+ def colspan(count)
103
+ @xmlss_workbook.merge_across(cell_merge(count))
104
+ end
105
+
106
+ def rowspan(count)
107
+ @xmlss_workbook.merge_down(cell_merge(count))
108
+ end
109
+
110
+ def name(value)
111
+ @osheet_worksheet_names.pop
112
+ @osheet_worksheet_names << value
113
+ @xmlss_workbook.name(value)
114
+ end
115
+
116
+ # Element attribute writers
117
+
118
+ [ :width, # column
119
+ :height, # row
120
+ :autofit, # column, row
121
+ :autofit?, # column, row
122
+ :hidden, # column, row
123
+ :hidden?, # column, row
124
+ :data, # cell
125
+ :format, # cell
126
+ :href, # cell
127
+ :formula, # cell
128
+ :index # cell
129
+ ].each do |meth|
130
+ define_method(meth) do |*args, &block|
131
+ @xmlss_workbook.send(meth, *args, &block)
132
+ end
133
+ end
134
+
135
+ protected
136
+
137
+ # convert osheet col/row span value to xmlss merge value
138
+ def cell_merge(span)
139
+ span.kind_of?(::Fixnum) && span > 1 ? span-1 : 0
140
+ end
141
+
142
+ end
143
+ end
data/lib/osheet.rb CHANGED
@@ -1,31 +1,5 @@
1
- module Osheet
2
-
3
- MIME_TYPE = "application/vnd.ms-excel"
4
-
5
- class << self
6
- # used to register an appropriate view handler
7
- # and register a mime type if necessary
8
- def register
9
- ::Mime::Type.register MIME_TYPE, :xls if defined? ::Mime::Type
10
- require 'osheet/view_handler'
11
- end
12
- end
13
-
14
- end
15
-
16
- require 'osheet/instance'
17
- require 'osheet/partial'
18
- require 'osheet/associations'
19
- require 'osheet/mixin'
20
-
21
- require 'osheet/markup_element'
22
- require 'osheet/styled_element'
23
- require 'osheet/meta_element'
24
- require 'osheet/workbook_element'
25
- require 'osheet/worksheet_element'
26
-
27
- if defined? Rails::Railtie
28
- require 'osheet/railtie'
29
- end
1
+ module Osheet; end
30
2
 
31
3
  require 'osheet/workbook'
4
+ require 'osheet/xmlss_writer'
5
+
data/osheet.gemspec CHANGED
@@ -19,7 +19,10 @@ Gem::Specification.new do |s|
19
19
 
20
20
  s.add_development_dependency("bundler", ["~> 1.0"])
21
21
  s.add_development_dependency("assert", ["~> 0.3"])
22
+ s.add_development_dependency("whysoslow", ["~> 0.0"])
23
+ s.add_development_dependency("ruby-prof")
24
+
22
25
  s.add_dependency("enumeration", ["~> 1.3"])
23
- s.add_dependency("xmlss", ["~> 0.4"])
26
+ s.add_dependency("xmlss", ["~> 1.0.0.rc"])
24
27
 
25
28
  end
data/test/cell_test.rb CHANGED
@@ -3,133 +3,68 @@ require 'osheet/cell'
3
3
 
4
4
  module Osheet
5
5
 
6
- class CellTest < Assert::Context
7
- desc "Osheet::Cell"
6
+ class CellTests < Assert::Context
7
+ desc "a Cell"
8
8
  before { @c = Cell.new }
9
9
  subject { @c }
10
10
 
11
- should_be_a_styled_element(Cell)
12
- should_be_a_worksheet_element(Cell)
13
- should_be_a_workbook_element(Cell)
11
+ should be_a_styled_element
12
+ should be_a_meta_element
14
13
 
15
- should have_instance_methods :data, :format, :colspan, :rowspan, :href, :index
14
+ should have_instance_methods :data, :format, :href, :index
15
+ should have_instance_methods :colspan, :rowspan
16
16
 
17
17
  should "set it's defaults" do
18
- assert_equal nil, subject.send(:get_ivar, "data")
19
- assert_kind_of Format::General, subject.send(:get_ivar, "format")
20
- assert_equal 1, subject.send(:get_ivar, "colspan")
21
- assert_equal 1, subject.send(:get_ivar, "rowspan")
22
- assert_equal nil, subject.send(:get_ivar, "href")
23
- assert_equal nil, subject.send(:get_ivar, "index")
24
- assert_equal nil, subject.send(:get_ivar, "formula")
18
+ assert_equal nil, subject.data
19
+ assert_equal 1, subject.colspan
20
+ assert_equal 1, subject.rowspan
21
+ assert_equal nil, subject.href
22
+ assert_equal nil, subject.index
23
+ assert_equal nil, subject.formula
24
+ assert_kind_of Format::General, subject.format
25
+ end
26
+
27
+ should "set its data from an init arg" do
28
+ assert_equal "something", Cell.new("something").data
25
29
  end
26
30
 
27
31
  should "type cast data strings/symbols" do
28
32
  ['a string', :symbol].each do |thing|
29
- cell = Cell.new{data thing}
30
- assert_kind_of ::String, cell.send(:get_ivar, "data")
33
+ subject.data thing
34
+ assert_kind_of ::String, subject.data
35
+ assert_kind_of ::String, Cell.new(thing).data
31
36
  end
32
37
  end
33
38
 
34
39
  should "type cast data dates" do
35
- cell = Cell.new{data Date.today}
36
- assert_kind_of ::Date, cell.send(:get_ivar, "data")
40
+ subject.data Date.today
41
+ assert_kind_of ::Date, subject.data
42
+ assert_kind_of ::Date, Cell.new(Date.today).data
37
43
  end
38
44
 
39
45
  should "type cast data numerics" do
40
46
  [1, 1.0].each do |thing|
41
- cell = Cell.new{data thing}
42
- assert_kind_of ::Numeric, cell.send(:get_ivar, "data")
47
+ subject.data thing
48
+ assert_kind_of ::Numeric, subject.data
49
+ assert_kind_of ::Numeric, Cell.new(thing).data
43
50
  end
44
51
  end
45
52
 
46
53
  should "type cast all other data to string" do
47
54
  [Osheet, [:a, 'Aye'], {:a => 'Aye'}].each do |thing|
48
- cell = Cell.new{data thing}
49
- assert_kind_of ::String, cell.send(:get_ivar, "data")
50
- end
51
- end
52
-
53
- end
54
-
55
- class CellAttributeTest < CellTest
56
- desc "a celll that has attributes"
57
- before do
58
- @c = Cell.new do
59
- style_class 'more poo'
60
- data "Poo"
61
- format :number
62
- colspan 4
63
- rowspan 2
64
- index 3
65
- formula "=R1C1"
66
- href "http://www.google.com"
67
- end
68
- end
69
-
70
- should "should set them correctly" do
71
- assert_equal "Poo", subject.send(:get_ivar, "data")
72
- assert_kind_of Format::Number, subject.send(:get_ivar, "format")
73
- assert_equal 4, subject.send(:get_ivar, "colspan")
74
- assert_equal 2, subject.send(:get_ivar, "rowspan")
75
- assert_equal 3, subject.send(:get_ivar, "index")
76
- assert_equal "=R1C1", subject.send(:get_ivar, "formula")
77
- assert_equal "http://www.google.com", subject.send(:get_ivar, "href")
78
- end
79
-
80
- should "know it's attribute(s)" do
81
- [:style_class, :data, :format, :rowspan, :colspan, :index, :href].each do |a|
82
- assert subject.attributes.has_key?(a)
55
+ subject.data thing
56
+ assert_kind_of ::String, subject.data
57
+ assert_kind_of ::String, Cell.new(thing).data
83
58
  end
84
-
85
- assert_equal "more poo", subject.attributes[:style_class]
86
- assert_equal "Poo", subject.attributes[:data]
87
- assert_kind_of Format::Number, subject.attributes[:format]
88
- assert_equal 4, subject.attributes[:colspan]
89
- assert_equal 2, subject.attributes[:rowspan]
90
- assert_equal 3, subject.attributes[:index]
91
- assert_equal "=R1C1", subject.attributes[:formula]
92
- assert_equal "http://www.google.com", subject.attributes[:href]
93
59
  end
94
60
 
95
- end
96
-
97
- class CellPartialTest < Assert::Context
98
- desc "A workbook that defines column partials"
99
- before do
100
- @wkbk = Workbook.new {
101
- partial(:cell_stuff) {
102
- style_class 'more poo'
103
- data "Poo"
104
- }
105
-
106
- worksheet { row { cell {
107
- add :cell_stuff
108
- } } }
109
- }
110
- end
111
- subject { @wkbk }
61
+ should "format data explicitly" do
62
+ subject.data Time.now
63
+ subject.format :datetime, 'mm/dd/yyyy'
112
64
 
113
- should "add it's partials to it's markup" do
114
- assert_equal 'more poo', subject.worksheets.first.rows.first.cells.first.attributes[:style_class]
115
- assert_equal 'Poo', subject.worksheets.first.rows.first.cells.first.attributes[:data]
65
+ assert_kind_of Format::Datetime, subject.format
116
66
  end
117
67
 
118
68
  end
119
69
 
120
- class CellBindingTest < Assert::Context
121
- desc "a cell defined w/ a block"
122
-
123
- should "access instance vars from that block's binding" do
124
- @test = 'test'
125
- @cell = Cell.new { data @test}
126
-
127
- assert !@cell.send(:instance_variable_get, "@test").nil?
128
- assert_equal @test, @cell.send(:instance_variable_get, "@test")
129
- assert_equal @test.object_id, @cell.send(:instance_variable_get, "@test").object_id
130
- assert_equal @test, @cell.attributes[:data]
131
- assert_equal @test.object_id, @cell.attributes[:data].object_id
132
- end
133
- end
134
-
135
70
  end
data/test/column_test.rb CHANGED
@@ -1,119 +1,51 @@
1
1
  require "assert"
2
+
2
3
  require "osheet/column"
3
4
 
4
5
  module Osheet
5
6
 
6
- class ColumnTest < Assert::Context
7
- desc "Osheet::Column"
7
+ class ColumnTests < Assert::Context
8
+ desc "a Column"
8
9
  before { @c = Column.new }
9
10
  subject { @c }
10
11
 
11
- should_be_a_styled_element(Column)
12
- should_be_a_worksheet_element(Column)
13
- should_be_a_workbook_element(Column)
12
+ should be_a_styled_element
13
+ should be_a_meta_element
14
14
 
15
- should have_instance_method :width
15
+ should have_reader :format
16
+ should have_instance_methods :width
16
17
  should have_instance_methods :autofit, :autofit?
17
18
  should have_instance_methods :hidden, :hidden?
18
- should have_instance_method :meta
19
19
 
20
20
  should "set it's defaults" do
21
- assert_equal nil, subject.send(:get_ivar, "width")
22
- assert_equal false, subject.send(:get_ivar, "autofit")
21
+ assert_equal nil, subject.width
22
+ assert_equal false, subject.autofit
23
23
  assert !subject.autofit?
24
- assert_equal false, subject.send(:get_ivar, "hidden")
24
+ assert_equal false, subject.hidden
25
25
  assert !subject.hidden?
26
-
27
- assert_equal nil, subject.meta
26
+ assert_kind_of Format::General, subject.format
28
27
  end
29
28
 
30
29
  should "set it's width" do
31
30
  subject.width(false)
32
31
  assert_equal false, subject.width
32
+
33
33
  subject.width(180)
34
34
  assert_equal 180, subject.width
35
+
35
36
  subject.width(nil)
36
37
  assert_equal 180, subject.width
37
- end
38
38
 
39
- should "cast autofit and hidden to bool" do
40
- col = Column.new { autofit :true; hidden 'false'}
41
- assert_kind_of ::TrueClass, col.send(:get_ivar, "autofit")
42
- assert_kind_of ::TrueClass, col.send(:get_ivar, "hidden")
39
+ assert_equal 200, Column.new(200).width
43
40
  end
44
41
 
45
- end
46
-
47
- class ColumnAttributesTest < ColumnTest
48
- desc "that has attributes"
49
- before do
50
- @c = Column.new do
51
- style_class "more poo"
52
- width 100
53
- autofit true
54
- hidden true
55
- meta(
56
- {}
57
- )
58
- end
59
- end
60
-
61
- should "should set them correctly" do
62
- assert_equal 100, subject.send(:get_ivar, "width")
63
- assert_equal true, subject.send(:get_ivar, "autofit")
64
- assert subject.autofit?
65
- assert_equal true, subject.send(:get_ivar, "hidden")
66
- assert subject.hidden?
67
- assert_equal({}, subject.meta)
68
- end
69
-
70
- should "know it's attribute(s)" do
71
- [:style_class, :width, :autofit, :hidden].each do |a|
72
- assert subject.attributes.has_key?(a)
73
- end
74
- assert_equal 'more poo', subject.attributes[:style_class]
75
- assert_equal 100, subject.attributes[:width]
76
- assert_equal true, subject.attributes[:autofit]
77
- assert_equal true, subject.attributes[:hidden]
78
- end
79
-
80
- end
81
-
82
- class ColumnPartialTest < Assert::Context
83
- desc "A workbook that defines column partials"
84
- before do
85
- @wkbk = Workbook.new {
86
- partial(:column_stuff) {
87
- width 200
88
- meta(:label => 'awesome')
89
- }
90
-
91
- worksheet { column {
92
- add :column_stuff
93
- } }
94
- }
95
- end
96
- subject { @wkbk }
97
-
98
- should "add it's partials to it's markup" do
99
- assert_equal 200, subject.worksheets.first.columns.first.width
100
- assert_equal({:label => 'awesome'}, subject.worksheets.first.columns.first.meta)
101
- end
102
-
103
- end
104
-
105
- class ColumnBindingTest < Assert::Context
106
- desc "a column defined w/ a block"
107
-
108
- should "access instance vars from that block's binding" do
109
- @test = 50
110
- @col = Column.new { width @test }
42
+ should "cast autofit and hidden to bool" do
43
+ col = Column.new
44
+ col.autofit :true
45
+ col.hidden 'false'
111
46
 
112
- assert !@col.send(:instance_variable_get, "@test").nil?
113
- assert_equal @test, @col.send(:instance_variable_get, "@test")
114
- assert_equal @test.object_id, @col.send(:instance_variable_get, "@test").object_id
115
- assert_equal @test, @col.attributes[:width]
116
- assert_equal @test.object_id, @col.attributes[:width].object_id
47
+ assert_equal true, col.autofit
48
+ assert_equal true, col.hidden
117
49
  end
118
50
 
119
51
  end
@@ -9,7 +9,9 @@ class StyledMixin
9
9
  include Osheet::Mixin
10
10
 
11
11
  style('.test')
12
- style('.test.awesome')
12
+ style('.test.awesome') {
13
+ align :left
14
+ }
13
15
 
14
16
  end
15
17
 
@@ -39,10 +41,10 @@ class PartialedMixin
39
41
  row { }
40
42
  }
41
43
 
42
- partial(:two_cells_in_a_row) {
44
+ partial(:two_cells_in_a_row) { |data_one, data_two|
43
45
  row {
44
- cell { data "one" }
45
- cell { data "two" }
46
+ cell { data data_one.to_s }
47
+ cell { data data_two.to_s }
46
48
  }
47
49
  }
48
50
  end