rubyexcel 0.1.0 → 0.1.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.
data/lib/README.md CHANGED
@@ -10,9 +10,10 @@ A Data-analysis tool for Ruby, with an Excel-style API.
10
10
 
11
11
  You can find the gem [here](https://rubygems.org/gems/rubyexcel "Rubygems").
12
12
 
13
- Main Documentation is [here](rubydoc.info/gems/rubyexcel "Rubydoc")
13
+ Main documentation is [here](http://rubydoc.info/gems/rubyexcel "Rubydoc")
14
14
 
15
- For any requests, comments, etc. I keep an eye on [This forum](http://www.ruby-forum.com/forum/ruby "Ruby Mailing List"). If you have "RubyExcel" in the title I should see it.
15
+ For any requests, comments, etc. I keep an eye on [this forum](http://www.ruby-forum.com/forum/ruby "Ruby Mailing List").
16
+ If you put "RubyExcel" in the subject title I should see it.
16
17
 
17
18
  Please feel free to log any bugs you find [here](https://github.com/VirtuosoJoel/RubyExcel/issues "Bug Tracker").
18
19
 
@@ -92,6 +93,9 @@ wb = s.parent
92
93
  ```
93
94
 
94
95
  Using the Mechanize gem to get data
96
+
97
+ This example is for context, there are many potential data sources
98
+
95
99
  --------
96
100
 
97
101
  ```ruby
@@ -132,6 +136,20 @@ Some Examples
132
136
 
133
137
  This list may be removed in favour of the gem's documentation on rubydoc.
134
138
 
139
+ Common Operations
140
+ --------
141
+
142
+ ```ruby
143
+ #Append a Column by adding a header
144
+ s << 'Numbers'
145
+ x = 1
146
+ #Iterate through the rest of the rows while appending data
147
+ s.rows(2) { |row| row << x; x+=1 }
148
+
149
+
150
+
151
+ ```
152
+
135
153
  Workbook
136
154
  --------
137
155
 
@@ -273,6 +291,10 @@ s.sort_by! { |r| r['A'] }
273
291
  s.sumif( 'Part', 'Cost' ) { |part| part == 'Type1' } #=> 169.15
274
292
  s.sumif( 'Part', 'Cost', &/Type1/ ) #=> 169.15
275
293
 
294
+ #Summarise a column by header into a Hash.
295
+ s.summarise( 'Part' )
296
+ #=> {"Type1"=>3, "Type2"=>2, "Type3"=>1, "Type4"=>1}
297
+
276
298
  #Convert the data into various formats:
277
299
  s.to_a #=> 2D Array
278
300
  s.to_excel #=> WIN32OLE Excel Workbook (Contains only the current sheet)
@@ -417,8 +439,8 @@ Importing a Hash
417
439
  ```ruby
418
440
  #Import a nested Hash (useful if you're summarising data before handing it to RubyExcel)
419
441
 
420
- #Here's an example Hash
421
- h = {
442
+ #Here's an example Hash (built into the gem as RubyExcel.sample_hash)
443
+ h = {
422
444
  Part1: {
423
445
  Type1: {
424
446
  SubType1: 1, SubType2: 2, SubType3: 3
@@ -190,7 +190,7 @@ require_relative 'address.rb'
190
190
  #
191
191
 
192
192
  def empty?
193
- no_headers.empty?
193
+ no_headers.empty? rescue true
194
194
  end
195
195
 
196
196
  #
@@ -383,7 +383,7 @@ require_relative 'address.rb'
383
383
  row_idx, col_idx = address_to_indices( addr )
384
384
  ( row_idx - rows ).times { @data << [] }
385
385
  @data[ row_idx-1 ][ col_idx-1 ] = val
386
- calc_dimensions
386
+ calc_dimensions if row_idx > rows || col_idx > cols
387
387
  val
388
388
  end
389
389
  alias []= write
@@ -48,6 +48,69 @@ module RubyExcel
48
48
  data.delete( self ); self
49
49
  end
50
50
 
51
+ #
52
+ # Yields each value in the data referenced by the address
53
+ #
54
+
55
+ def each
56
+ return to_enum( :each ) unless block_given?
57
+ expand( address ).flatten.each { |addr| yield data[ addr ] }
58
+ end
59
+
60
+ #
61
+ # Yields each Element referenced by the address
62
+ #
63
+
64
+ def each_cell
65
+ return to_enum( :each_cell ) unless block_given?
66
+ expand( address ).flatten.each { |addr| yield Element.new( sheet, addr ) }
67
+ end
68
+
69
+ #
70
+ # Checks whether the data referenced by the address is empty
71
+ #
72
+
73
+ def empty?
74
+ all? { |v| v.to_s.empty? }
75
+ end
76
+
77
+ #
78
+ # Return the first cell in the Range
79
+ #
80
+ # @return [RubyExcel::Element]
81
+ #
82
+
83
+ def first_cell
84
+ Element.new( sheet, expand( address ).flatten.first )
85
+ end
86
+
87
+ #
88
+ # View the object for debugging
89
+ #
90
+
91
+ def inspect
92
+ "#{ self.class }:0x#{ '%x' % ( object_id << 1 ) }: #{ address }"
93
+ end
94
+
95
+ #
96
+ # Return the last cell in the Range
97
+ #
98
+ # @return [RubyExcel::Element]
99
+ #
100
+
101
+ def last_cell
102
+ Element.new( sheet, expand( address ).flatten.last )
103
+ end
104
+
105
+ #
106
+ # Replaces each value with the result of the block
107
+ #
108
+
109
+ def map!
110
+ return to_enum( :map! ) unless block_given?
111
+ expand( address ).flatten.each { |addr| data[ addr ] = yield data[ addr ] }
112
+ end
113
+
51
114
  #
52
115
  # Return the value at this Element's address
53
116
  #
@@ -72,14 +135,19 @@ module RubyExcel
72
135
  addresses = expand( address )
73
136
 
74
137
  # 2D Array of Values
75
- if multi_array?( val )
138
+ if multi_array?( val ) && addresses.length > 1
76
139
 
77
140
  #Check the dimensions
78
141
  val_rows, val_cols, range_rows, range_cols = val.length, val.max_by(&:length).length, addresses.length, addresses.max_by(&:length).length
79
- val_rows == range_rows && val_cols == range_cols or fail ArgumentError, "Dimension mismatch! Value rows, columns: #{ val_rows }, #{ val_cols }. Range rows, columns: #{ range_rows }, #{ range_cols }"
142
+ val_rows == range_rows && val_cols == range_cols or fail ArgumentError, "Dimension mismatch! Value - rows: #{val_rows}, columns: #{ val_cols }. Range - rows: #{ range_rows }, columns: #{ range_cols }"
80
143
 
81
144
  #Write the values in order
82
- addresses.each_with_index { |row,idx| row.each_with_index { |el,i| data[ el ] = val[idx][i] } }
145
+ addresses.each_with_index { |row,idx| row.each_with_index { |el,i| data[el] = val[idx][i] } }
146
+
147
+ # Array of Values
148
+ elsif val.is_a?( Array )
149
+
150
+ addresses.flatten.each_with_index { |addr, i| data[addr] = val[i] }
83
151
 
84
152
  # Single Value
85
153
  else
@@ -104,49 +172,6 @@ module RubyExcel
104
172
  def to_s
105
173
  value.is_a?( Array ) ? value.map { |ar| ar.join "\t" }.join($/) : value.to_s
106
174
  end
107
-
108
- #
109
- # View the object for debugging
110
- #
111
-
112
- def inspect
113
- "#{ self.class }:0x#{ '%x' % ( object_id << 1 ) }: #{ address }"
114
- end
115
-
116
- #
117
- # Yields each value in the data referenced by the address
118
- #
119
-
120
- def each
121
- return to_enum( :each ) unless block_given?
122
- expand( address ).flatten.each { |addr| yield data[ addr ] }
123
- end
124
-
125
- #
126
- # Yields each Element referenced by the address
127
- #
128
-
129
- def each_cell
130
- return to_enum( :each_cell ) unless block_given?
131
- expand( address ).flatten.each { |addr| yield Element.new( sheet, addr ) }
132
- end
133
-
134
- #
135
- # Checks whether the data referenced by the address is empty
136
- #
137
-
138
- def empty?
139
- all? { |v| v.to_s.empty? }
140
- end
141
-
142
- #
143
- # Replaces each value with the result of the block
144
- #
145
-
146
- def map!
147
- return to_enum( :map! ) unless block_given?
148
- expand( address ).flatten.each { |addr| data[ addr ] = yield data[ addr ] }
149
- end
150
175
 
151
176
  end
152
177
 
@@ -40,7 +40,7 @@ module RubyExcel
40
40
  def dump_to_sheet( data, sheet=nil )
41
41
  data.is_a?( Array ) or fail ArgumentError, "Invalid data type: #{ data.class }"
42
42
  sheet ||= get_workbook.sheets(1)
43
- sheet.range( sheet.cells( 1, 1 ), sheet.cells( data.length, data[0].length ) ).value = data
43
+ sheet.range( sheet.cells( 1, 1 ), sheet.cells( data.length, data.max_by(&:length).length ) ).value = data
44
44
  sheet
45
45
  end
46
46
 
@@ -125,7 +125,7 @@ module RubyExcel
125
125
  self.each do |s|
126
126
  sht = ( first_time ? wb.sheets(1) : wb.sheets.add( { 'after' => wb.sheets( wb.sheets.count ) } ) ); first_time = false
127
127
  sht.name = s.name
128
- make_sheet_pretty( dump_to_sheet( s.data.all, sht ) )
128
+ make_sheet_pretty( dump_to_sheet( s.to_a, sht ) )
129
129
  end
130
130
  wb.sheets(1).select
131
131
  wb.application.visible = true unless invisible
@@ -23,6 +23,10 @@ module RubyExcel
23
23
 
24
24
  end
25
25
 
26
+ #
27
+ # Example hash to demonstrate imports
28
+ #
29
+
26
30
  def self.sample_hash
27
31
 
28
32
  {
@@ -124,6 +124,16 @@ module RubyExcel
124
124
  "#{ self.class }:0x#{ '%x' % (object_id << 1) }: #{ idx }"
125
125
  end
126
126
 
127
+ #
128
+ # Return the last cell
129
+ #
130
+ # @return [RubyExcel::Element]
131
+ #
132
+
133
+ def last_cell
134
+ Element.new( sheet, each_address.to_a.last )
135
+ end
136
+
127
137
  #
128
138
  # Replaces each value with the result of the block
129
139
  #
@@ -258,6 +268,7 @@ module RubyExcel
258
268
  private
259
269
 
260
270
  def each_address
271
+ return to_enum( :each_address ) unless block_given?
261
272
  ( 'A'..col_letter( data.cols ) ).each { |col_id| yield "#{col_id}#{idx}" }
262
273
  end
263
274
  alias each_address_without_headers each_address
@@ -294,10 +305,12 @@ module RubyExcel
294
305
  private
295
306
 
296
307
  def each_address
308
+ return to_enum( :each_address ) unless block_given?
297
309
  ( 1..data.rows ).each { |row_id| yield idx + row_id.to_s }
298
310
  end
299
311
 
300
312
  def each_address_without_headers
313
+ return to_enum( :each_address_without_headers ) unless block_given?
301
314
  ( sheet.header_rows+1 ).upto( data.rows ) { |row_id| yield idx + row_id.to_s }
302
315
  end
303
316
 
data/lib/rubyexcel.rb CHANGED
@@ -262,6 +262,7 @@ module RubyExcel
262
262
  #
263
263
  # @param [Array<Array>, Hash<Hash>, RubyExcel::Sheet] other the data to add
264
264
  # @return [RubyExcel::Sheet] returns a new Sheet
265
+ # @note When adding another Sheet it won't import the headers unless this Sheet is empty.
265
266
  #
266
267
 
267
268
  def +( other )
@@ -288,14 +289,16 @@ module RubyExcel
288
289
  #
289
290
  # @param [Array<Array>, Hash<Hash>, RubyExcel::Sheet] other the data to append
290
291
  # @return [self]
292
+ # @note When adding another Sheet it won't import the headers unless this Sheet is empty.
293
+ # @note Anything other than an an Array, Hash, or Sheet will be appended to the first row
291
294
  #
292
295
 
293
296
  def <<( other )
294
297
  case other
295
298
  when Array ; load( data.all + other, header_rows )
296
299
  when Hash ; load( data.all + _convert_hash( other ), header_rows )
297
- when Sheet ; load( data.all + other.data.no_headers, header_rows )
298
- else ; fail ArgumentError, "Unsupported class: #{ other.class }"
300
+ when Sheet ; empty? ? load( other.to_a, other.header_rows ) : load( data.all + other.data.no_headers, header_rows )
301
+ else ; row(1) << other
299
302
  end
300
303
  self
301
304
  end
@@ -698,6 +701,17 @@ module RubyExcel
698
701
  find_col.each_cell.inject(0) { |sum,ce| yield( ce.value ) && ce.row > header_rows ? sum + sum_col[ ce.row ] : sum }
699
702
  end
700
703
 
704
+ #
705
+ # Summarise the values of a Column into a Hash
706
+ #
707
+ # @param [String] header the header of the Column to summarise
708
+ # @return [Hash]
709
+ #
710
+
711
+ def summarise( header )
712
+ ch( header ).summarise
713
+ end
714
+
701
715
  #
702
716
  # The Sheet as a 2D Array
703
717
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubyexcel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-05-01 00:00:00.000000000 Z
12
+ date: 2013-05-02 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A tabular data structure, mixing Ruby with some of Excel's API style.
15
15
  email: VirtuosoJoel@gmail.com
@@ -24,12 +24,6 @@ files:
24
24
  - lib/rubyexcel/rubyexcel_components.rb
25
25
  - lib/rubyexcel/section.rb
26
26
  - lib/rubyexcel.rb
27
- - lib/test/rubyexcel/tc_address.rb
28
- - lib/test/rubyexcel/tc_data.rb
29
- - lib/test/rubyexcel/tc_element.rb
30
- - lib/test/rubyexcel/tc_section.rb
31
- - lib/test/tc_rubyexcel.rb
32
- - lib/test/test_all.rb
33
27
  - lib/README.md
34
28
  homepage: https://github.com/VirtuosoJoel
35
29
  licenses: []
@@ -1,81 +0,0 @@
1
- require_relative '../../rubyexcel'
2
- require 'test/unit'
3
-
4
-
5
- class TestAddress < Test::Unit::TestCase
6
-
7
- def setup
8
- @s = RubyExcel.sample_sheet
9
- end
10
-
11
- def teardown
12
- @s = nil
13
- end
14
-
15
- def test_address_to_col_index
16
-
17
- assert( @s.address_to_col_index( 'A1' ) == 1 )
18
-
19
- end
20
-
21
- def test_address_to_indices
22
-
23
- assert_equal( [ 1, 1 ], @s.address_to_indices( 'A1' ) )
24
-
25
- end
26
-
27
- def test_col_index
28
-
29
- assert_equal( 1, @s.col_index( 'A' ) )
30
-
31
- end
32
-
33
- def test_col_letter
34
-
35
- assert_equal( 'A', @s.col_letter( 1 ) )
36
-
37
- end
38
-
39
- def test_column_id
40
-
41
- assert_equal( 'A', @s.column_id( 'A1' ) )
42
-
43
- end
44
-
45
- def test_expand
46
-
47
- assert_equal( [['A1','B1'],['A2', 'B2']], @s.expand( 'A1:B2' ) )
48
-
49
- end
50
-
51
- def test_indices_to_address
52
-
53
- assert_equal( 'A1', @s.indices_to_address( 1, 1 ) )
54
-
55
- end
56
-
57
- def test_multi_array?
58
-
59
- assert( @s.multi_array? RubyExcel.sample_data )
60
-
61
- end
62
-
63
- def test_offset
64
-
65
- assert_equal( 'B2', @s.offset( 'A1', 1, 1 ) )
66
-
67
- end
68
-
69
- def test_to_range_address
70
-
71
- assert_equal( 'A1:B2', @s.to_range_address( @s.cell(1,1), @s.cell(2,2) ) )
72
-
73
- end
74
-
75
- def test_row_id
76
-
77
- assert_equal( 2, @s.row_id( 'A2' ) )
78
-
79
- end
80
-
81
- end
@@ -1,153 +0,0 @@
1
- require_relative '../../rubyexcel'
2
- require 'test/unit'
3
-
4
- class TestData < Test::Unit::TestCase
5
-
6
- def setup
7
- @s = RubyExcel.sample_sheet
8
- end
9
-
10
- def teardown
11
- @s = nil
12
- end
13
-
14
- def test_advanced_filter!
15
-
16
- assert_equal( 3, @s.data.advanced_filter!( 'Part', :=~, /Type[13]/, 'Qty', :>, 1 ).rows )
17
-
18
- end
19
-
20
- def test_colref_by_header
21
-
22
- assert_equal( 'B', @s.data.colref_by_header( 'Ref1' ) )
23
-
24
- end
25
-
26
- def test_compact
27
-
28
- @s << [[1,2,3], [4,5,6]]
29
- assert( @s.data.cols == 5 && @s.data.rows == 10 )
30
-
31
- @s.rows( 9 ) { |r| r.map! { nil } }
32
- @s.data.compact!
33
- assert_equal( 8, @s.data.rows )
34
-
35
- end
36
-
37
- def test_delete
38
-
39
- @s.data.delete( @s.row(1) )
40
- assert_equal( 7, @s.data.rows )
41
-
42
- @s.data.delete( @s.column(1) )
43
- assert_equal( 4, @s.data.cols )
44
-
45
- @s.data.delete( @s.range('A:A') )
46
- assert_equal( 3, @s.data.cols )
47
-
48
- assert_raise( NoMethodError ) { @s.data.delete( [[]] ) }
49
-
50
- end
51
-
52
- def test_each
53
-
54
- assert_equal( 8, @s.data.each.count )
55
-
56
- end
57
-
58
- def test_filter!
59
-
60
- assert_equal( 3, @s.data.filter!( 'Part', &/Type2/ ).rows )
61
-
62
- end
63
-
64
- def test_get_columns!
65
-
66
- assert_equal( [ 'Ref2', 'Part' ], @s.data.get_columns!( 'Ref2', 'Part' ).sheet.row(1).to_a )
67
-
68
- end
69
-
70
- def test_headers
71
-
72
- assert_equal( 1, @s.data.headers.length )
73
-
74
- @s.headers = 0
75
- assert_equal( nil, @s.data.headers )
76
-
77
- end
78
-
79
- def test_index_by_header
80
-
81
- assert_equal( 1, @s.data.index_by_header( 'Part' ) )
82
-
83
- @s.headers = 0
84
- assert_raise( NoMethodError ) { @s.data.index_by_header( 'Part' ) }
85
-
86
- end
87
-
88
- def test_insert
89
-
90
- @s.data.insert_columns( 'A', 2 )
91
- assert_equal( 7, @s.maxcol )
92
- assert_equal( nil, @s['B2'] )
93
-
94
- @s.data.insert_rows( 2, 2 )
95
- assert_equal( 10, @s.maxrow )
96
- assert_equal( nil, @s['B4'] )
97
-
98
- end
99
-
100
- def test_no_headers
101
-
102
- assert_equal( 7, @s.data.no_headers.length )
103
-
104
- end
105
-
106
- def test_partition
107
-
108
- ar1, ar2 = @s.data.partition( 'Part', &/Type[13]/ )
109
- assert_equal( 5, ar1.length )
110
- assert_equal( 'Type1', ar1[1][0] )
111
- assert_equal( 4, ar2.length )
112
-
113
- end
114
-
115
- def test_read_write
116
-
117
- assert_equal( '123', @s.data.read( 'C3' ) )
118
-
119
- @s.data.write( 'C3', '321' )
120
- assert_equal( '321', @s.data.read( 'C3' ) )
121
-
122
- end
123
-
124
- def test_reverse
125
-
126
- @s.data.reverse_columns!
127
- assert_equal( 'Cost', @s.A1 )
128
-
129
- @s.data.reverse_rows!
130
- assert_equal( 'QT1', @s.d8 )
131
-
132
- @s.headers = 0
133
- @s.data.reverse_rows!
134
- assert_equal( 'Ref1', @s.d8 )
135
-
136
- end
137
-
138
- def test_skip_headers
139
-
140
- @s.load( @s.data.skip_headers { |data| data.map { |row| row.map { nil } } } )
141
- assert_equal( 'Part', @s.a1 )
142
- assert_equal( nil, @s.a2 )
143
-
144
- end
145
-
146
- def test_uniq!
147
-
148
- @s.data.uniq!( 'Part' )
149
- assert_equal( 5, @s.maxrow )
150
-
151
- end
152
-
153
- end
@@ -1,42 +0,0 @@
1
- require_relative '../../rubyexcel'
2
- require 'test/unit'
3
-
4
- class TestElement < Test::Unit::TestCase
5
-
6
- def setup
7
- @s = RubyExcel.sample_sheet
8
- end
9
-
10
- def teardown
11
- @s = nil
12
- end
13
-
14
- def test_initialize
15
-
16
- r = @s.range( 'A1:B2' )
17
- assert_equal( @s, r.sheet )
18
- assert_equal( 'A1:B2', r.address )
19
- assert_equal( 'A', r.column )
20
- assert_equal( 1, r.row )
21
-
22
- end
23
-
24
- def test_value
25
-
26
- r = @s.range( 'A1' )
27
- assert_equal( 'Part', r.value )
28
-
29
- r = @s.range( 'A1:B2' )
30
- assert_equal( [['Part', 'Ref1'], ['Type1', 'QT1']], r.value )
31
-
32
- assert_raise( ArgumentError ) { r.value = [[1, 2]] }
33
-
34
- end
35
-
36
- def test_each
37
-
38
- assert_equal( 6, @s.range( 'A1:C2' ).each.count )
39
-
40
- end
41
-
42
- end
@@ -1,59 +0,0 @@
1
- require_relative '../../rubyexcel'
2
- require 'test/unit'
3
-
4
- class TestRowColumn < Test::Unit::TestCase
5
-
6
- def setup
7
- @s = RubyExcel.sample_sheet
8
- @r = @s.row(2)
9
- @c = @s.column(2)
10
- end
11
-
12
- def teardown
13
- @s = nil
14
- @r = nil
15
- end
16
-
17
- def test_shovel
18
-
19
- @r << 1
20
- assert_equal( 5, @r.length )
21
-
22
- @r = @s.row(1)
23
- @r << 1
24
- assert_equal( 6, @r.length )
25
-
26
- end
27
-
28
- def test_cell
29
-
30
- assert_equal( @r.cell(2).address, @c.cell(2).address )
31
-
32
- end
33
-
34
- def test_find
35
-
36
- assert_equal( 'B2', @r.find( &/QT1/ ) )
37
-
38
- end
39
-
40
- def test_summarise
41
-
42
- h = { 'Type1' => 3, 'Type2' => 2, 'Type3' => 1, 'Type4' => 1 }
43
- assert_equal( h, @s.column(1).summarise )
44
-
45
- end
46
-
47
- def test_getref
48
-
49
- assert_equal( 'A', @r.getref( 'Part' ) )
50
-
51
- end
52
-
53
- def test_value_by_header
54
-
55
- assert_equal( 'Type1', @r.val( 'Part' ) )
56
-
57
- end
58
-
59
- end
@@ -1,272 +0,0 @@
1
- require_relative '../rubyexcel'
2
- require 'test/unit'
3
-
4
- class TestRegexp < Test::Unit::TestCase
5
-
6
- def test_to_proc
7
- assert_equal(0, /a/.to_proc.call('a') )
8
- end
9
-
10
- end
11
-
12
- class TestWorkbook < Test::Unit::TestCase
13
-
14
- def setup
15
- @wb = RubyExcel::Workbook.new
16
- 3.times { @wb.add.load RubyExcel.sample_data }
17
- end
18
-
19
- def teardown
20
- @wb = nil
21
- end
22
-
23
- def test_shovel
24
-
25
- @wb << @wb.dup
26
- assert_equal( 6, @wb.sheets.count )
27
-
28
- @wb << @wb.sheets(1)
29
- assert_equal( 7, @wb.sheets.count )
30
-
31
- @wb << @wb.sheets(1).data.all
32
- assert_equal( 8, @wb.sheets.count )
33
-
34
- end
35
-
36
- def test_add
37
-
38
- @wb.add 'Sheet4'
39
- assert_equal( 4, @wb.sheets.count )
40
-
41
- @wb.add
42
- assert_equal( 5, @wb.sheets.count )
43
-
44
- @wb.add @wb.sheets(1)
45
- assert_equal( 6, @wb.sheets.count )
46
-
47
- assert_raise( TypeError ) { @wb.add 1 }
48
-
49
- end
50
-
51
- def test_clear_all
52
-
53
- assert_equal( 0, @wb.clear_all.sheets.count )
54
-
55
- end
56
-
57
- def test_delete
58
-
59
- assert_equal( 2, @wb.delete(1).sheets.count )
60
-
61
- assert_equal( 1, @wb.delete( 'Sheet2' ).sheets.count )
62
-
63
- assert_equal( 0, @wb.delete( /Sheet/ ).sheets.count )
64
-
65
- assert_equal( 0, @wb.delete( @wb.add ).sheets.count )
66
-
67
- end
68
-
69
- def test_dup
70
-
71
- dup_wb = @wb.dup
72
-
73
- assert_equal( @wb.sheets(1).to_a, dup_wb.sheets(1).to_a )
74
-
75
- assert_not_equal( @wb.object_id, dup_wb.object_id )
76
-
77
- end
78
-
79
- def test_empty?
80
-
81
- assert( !@wb.empty? )
82
-
83
- assert( @wb.clear_all.empty? )
84
-
85
- end
86
-
87
- def test_load
88
-
89
- assert( @wb.load( [[]] ).class == RubyExcel::Sheet )
90
-
91
- assert( @wb.load( RubyExcel.sample_data )['A1'] == 'Part' )
92
-
93
- end
94
-
95
- def test_sheets
96
-
97
- assert( @wb.sheets.class == Enumerator )
98
-
99
- assert( @wb.sheets(2) == @wb.sheets('Sheet2') )
100
-
101
- end
102
-
103
- end
104
-
105
- class TestSheet < Test::Unit::TestCase
106
-
107
- def setup
108
- @s = RubyExcel.sample_sheet
109
- end
110
-
111
- def teardown
112
- @s = nil
113
- end
114
-
115
- def test_basics
116
-
117
- assert( @s['A1'] == @s.A1 )
118
-
119
- @s << RubyExcel.sample_hash
120
- assert( @s.maxrow == 20 && @s.maxcol == 5 )
121
-
122
- @s << RubyExcel.sample_data
123
- assert( @s.maxrow == 28 && @s.maxcol == 5 )
124
-
125
- @s << @s
126
- assert( @s.maxrow == 55 && @s.maxcol == 5 )
127
-
128
- end
129
-
130
- def test_advanced_filter
131
-
132
- @s.advanced_filter!( 'Part', :=~, /Type[13]/, 'Qty', :>, 1 )
133
- assert( @s.maxrow == 3 )
134
-
135
- setup
136
- @s.advanced_filter!( 'Part', :==, 'Type1', 'Ref1', :include?, 'X' )
137
- assert( @s.maxrow == 2 )
138
-
139
- end
140
-
141
- def test_cell
142
-
143
- assert( @s.cell(1,1).value == 'Part' && @s.cell(1,1).address == 'A1' )
144
-
145
- end
146
-
147
- def test_column
148
-
149
- assert( @s.column('A')[1] == 'Part' )
150
-
151
- end
152
-
153
- def test_column_by_header
154
-
155
- assert( @s.ch( 'Part' )[1] == @s.ch( @s.column(1) )[1] )
156
-
157
- end
158
-
159
- def test_columns
160
-
161
- assert( @s.columns.class == Enumerator )
162
-
163
- assert( @s.columns( 'B' ).count == 4 )
164
-
165
- assert( @s.columns( 'B', 'D' ).to_a[0][1] == 'Ref1' )
166
-
167
- end
168
-
169
- def test_filter
170
-
171
- assert( @s.filter( 'Part', &/Type[13]/ ).maxrow == 5 )
172
-
173
- end
174
-
175
- def test_get_columns
176
-
177
- assert_equal( @s.get_columns( 'Ref2', 'Part' ).row(1).to_a, [ 'Ref2', 'Part' ] )
178
-
179
- end
180
-
181
- def test_insert_columns
182
-
183
- assert( @s.insert_columns( 2, 2 ).columns.count == 7 )
184
-
185
- end
186
-
187
- def test_insert_rows
188
-
189
- assert( @s.insert_rows( 2, 2 ).rows.count == 10 )
190
-
191
- end
192
-
193
- def test_match
194
-
195
- assert( @s.match( 'Part', &/Type2/ ) == 3 )
196
-
197
- end
198
-
199
- def test_method_missing
200
-
201
- assert( @s.a1 == 'Part' )
202
-
203
- assert_raise( NoMethodError ) { @s.abcd123 }
204
-
205
- end
206
-
207
- def test_respond_to?
208
-
209
- assert( @s.respond_to?(:A1) )
210
-
211
- end
212
-
213
- def test_partition
214
-
215
- s1, s2 = @s.partition( 'Qty' ) { |v| v > 1 }
216
- assert_equal( s1.maxrow + 1, s2.maxrow )
217
-
218
- end
219
-
220
- def test_range
221
-
222
- assert( @s.range( 'A1:A1' ).value == @s.range( @s.cell(1,1), @s.cell( 1,1 ) ).value )
223
-
224
- assert( @s.range( 'A1' ).value == @s.range( @s.cell(1,1) ).value )
225
-
226
- end
227
-
228
- def test_reverse
229
-
230
- assert( @s.reverse_columns!['A1'] == 'Cost' )
231
-
232
- assert( @s.reverse_rows!['A2'] == 104 )
233
-
234
- end
235
-
236
- def test_row
237
-
238
- assert( @s.row(1)['A'] == 'Part' )
239
-
240
- end
241
-
242
- def test_rows
243
-
244
- assert( @s.rows.class == Enumerator )
245
-
246
- assert( @s.rows( 2 ).count == 7 )
247
-
248
- assert( @s.rows( 2, 4 ).to_a[0]['A'] == 'Type1' )
249
-
250
- end
251
-
252
- def test_sumif
253
-
254
- assert( @s.sumif( 'Part', 'Cost', &/Type1/ ) == 169.15 )
255
-
256
- end
257
-
258
- def test_uniq
259
-
260
- assert( @s.uniq( 'Part' ).maxrow == 5 )
261
-
262
- end
263
-
264
- def test_
265
-
266
- assert( @s.vlookup( 'Part', 'Ref2', &/Type1/ ) == '231' )
267
-
268
- end
269
-
270
-
271
-
272
- end
data/lib/test/test_all.rb DELETED
@@ -1,5 +0,0 @@
1
- require_relative 'tc_rubyexcel'
2
- require_relative 'rubyexcel/tc_address'
3
- require_relative 'rubyexcel/tc_data'
4
- require_relative 'rubyexcel/tc_element'
5
- require_relative 'rubyexcel/tc_section'