rubyexcel 0.1.5 → 0.1.6

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.
@@ -32,7 +32,6 @@ module RubyExcel
32
32
  #
33
33
 
34
34
  def initialize( sheet, addr )
35
- fail ArgumentError, "Invalid range: #{ addr }" unless addr =~ /\A[A-Z]{1,3}\d+:[A-Z]{1,3}\d+\z|\A[A-Z]{1,3}\d+\z|\A[A-Z]{1,3}:[A-Z]{1,3}\z|\A\d+:\d+\z/
36
35
  @sheet = sheet
37
36
  @data = sheet.data
38
37
  @address = addr
@@ -63,7 +62,7 @@ module RubyExcel
63
62
 
64
63
  def each_cell
65
64
  return to_enum( :each_cell ) unless block_given?
66
- expand( address ).flatten.each { |addr| yield Element.new( sheet, addr ) }
65
+ expand( address ).flatten.each { |addr| yield Cell.new( sheet, addr ) }
67
66
  end
68
67
 
69
68
  #
@@ -77,11 +76,11 @@ module RubyExcel
77
76
  #
78
77
  # Return the first cell in the Range
79
78
  #
80
- # @return [RubyExcel::Element]
79
+ # @return [RubyExcel::Cell]
81
80
  #
82
81
 
83
82
  def first_cell
84
- Element.new( sheet, expand( address ).flatten.first )
83
+ Cell.new( sheet, expand( address ).flatten.first )
85
84
  end
86
85
 
87
86
  #
@@ -89,17 +88,17 @@ module RubyExcel
89
88
  #
90
89
 
91
90
  def inspect
92
- "#{ self.class }:0x#{ '%x' % ( object_id << 1 ) }: #{ address }"
91
+ "#{ self.class }:0x#{ '%x' % ( object_id << 1 ) }: '#{ address }'"
93
92
  end
94
93
 
95
94
  #
96
95
  # Return the last cell in the Range
97
96
  #
98
- # @return [RubyExcel::Element]
97
+ # @return [RubyExcel::Cell]
99
98
  #
100
99
 
101
100
  def last_cell
102
- Element.new( sheet, expand( address ).flatten.last )
101
+ Cell.new( sheet, expand( address ).flatten.last )
103
102
  end
104
103
 
105
104
  #
@@ -111,58 +110,105 @@ module RubyExcel
111
110
  expand( address ).flatten.each { |addr| data[ addr ] = yield data[ addr ] }
112
111
  end
113
112
 
113
+ end
114
+
115
+ #
116
+ # A single Cell
117
+ #
118
+
119
+ class Cell < Element
120
+
121
+ def initialize( sheet, addr )
122
+ fail ArgumentError, "Invalid Cell address: #{ addr }" unless addr =~ /\A[A-Z]{1,3}\d+\z/
123
+ super
124
+ end
125
+
114
126
  #
115
- # Return the value at this Element's address
127
+ # Return the value at this Cell's address
116
128
  #
117
- # @return [Object, Array<Object>] the Object or Array of Objects within the data, referenced by the address
129
+ # @return [Object ] the Object within the data, referenced by the address
118
130
  #
119
131
 
120
132
  def value
121
- address.include?( ':' ) ? expand( address ).map { |ar| ar.map { |addr| data[ addr ] } } : data[ address ]
133
+ data[ address ]
122
134
  end
123
135
 
124
136
  #
125
- # Set the value at this Element's address
137
+ # Set the value at this Cell's address
138
+ #
139
+ # @param [Object] val the Object to write into the data
140
+ #
141
+
142
+ def value=( val )
143
+ data[ address ] = val
144
+ end
145
+
146
+ #
147
+ # The data at address as a String
148
+ #
149
+
150
+ def to_s
151
+ val.to_s
152
+ end
153
+
154
+ end
155
+
156
+ #
157
+ # A Range of Cells
158
+ #
159
+
160
+ class Range < Element
161
+
162
+ def initialize( sheet, addr )
163
+ fail ArgumentError, "Invalid Range address: #{ addr }" unless addr =~ /\A[A-Z]{1,3}\d+:[A-Z]{1,3}\d+\z|\A[A-Z]{1,3}:[A-Z]{1,3}\z|\A\d+:\d+\z/
164
+ super
165
+ end
166
+
167
+ #
168
+ # Return the value at this Range's address
169
+ #
170
+ # @return [Array<Object>] the Array of Objects within the data, referenced by the address
171
+ #
172
+
173
+ def value
174
+ expand( address ).map { |ar| ar.map { |addr| data[ addr ] } }
175
+ end
176
+
177
+ #
178
+ # Set the value at this Range's address
126
179
  #
127
180
  # @param [Object, Array<Object>] val the Object or Array of Objects to write into the data
128
181
  #
129
182
 
130
183
  def value=( val )
131
184
 
132
- #Range
133
- if address.include? ':'
185
+ addresses = expand( address )
186
+
187
+ # 2D Array of Values
188
+ if multi_array?( val ) && addresses.length > 1
134
189
 
135
- addresses = expand( address )
190
+ # Check the dimensions
191
+ val_rows, val_cols, range_rows, range_cols = val.length, val.max_by(&:length).length, addresses.length, addresses.max_by(&:length).length
192
+ 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 }"
136
193
 
137
- # 2D Array of Values
138
- if multi_array?( val ) && addresses.length > 1
194
+ # Write the values in order
195
+ addresses.each_with_index { |row,idx| row.each_with_index { |el,i| data[el] = val[idx][i] } }
139
196
 
140
- #Check the dimensions
141
- val_rows, val_cols, range_rows, range_cols = val.length, val.max_by(&:length).length, addresses.length, addresses.max_by(&:length).length
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 }"
143
-
144
- #Write the values in order
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] }
151
-
152
- # Single Value
153
- else
197
+ # Array of Values
198
+ elsif val.is_a?( Array )
154
199
 
155
- #Write the same value to every cell in the Range
156
- addresses.each { |ar| ar.each { |addr| data[ addr ] = val } }
157
-
158
- end
159
-
160
- #Cell
200
+ # Write the values in order
201
+ addresses.flatten.each_with_index { |addr, i| data[addr] = val[i] }
202
+
203
+ # Single Value
161
204
  else
162
- data[ address ] = val
163
- end
164
205
 
165
- self
206
+ # Write the same value to every cell in the Range
207
+ addresses.each { |ar| ar.each { |addr| data[ addr ] = val } }
208
+
209
+ end
210
+
211
+ val
166
212
  end
167
213
 
168
214
  #
@@ -170,9 +216,11 @@ module RubyExcel
170
216
  #
171
217
 
172
218
  def to_s
173
- value.is_a?( Array ) ? value.map { |ar| ar.join "\t" }.join($/) : value.to_s
219
+ value.map { |ar| ar.join "\t" }.join($/)
174
220
  end
175
221
 
222
+
176
223
  end
224
+
225
+ end
177
226
 
178
- end
@@ -43,7 +43,7 @@ module RubyExcel
43
43
  #
44
44
 
45
45
  def cell( ref )
46
- Element.new( sheet, translate_address( ref ) )
46
+ Cell.new( sheet, translate_address( ref ) )
47
47
  end
48
48
 
49
49
  #
@@ -79,7 +79,7 @@ module RubyExcel
79
79
 
80
80
  def each_cell
81
81
  return to_enum( :each_cell ) unless block_given?
82
- each_address { |addr| yield Element.new( sheet, addr ) }
82
+ each_address { |addr| yield Cell.new( sheet, addr ) }
83
83
  end
84
84
 
85
85
  #
@@ -88,7 +88,7 @@ module RubyExcel
88
88
 
89
89
  def each_cell_without_headers
90
90
  return to_enum( :each_cell_without_headers ) unless block_given?
91
- each_address( false ) { |addr| yield Element.new( sheet, addr ) }
91
+ each_address( false ) { |addr| yield Cell.new( sheet, addr ) }
92
92
  end
93
93
  alias each_cell_wh each_cell_without_headers
94
94
 
@@ -123,11 +123,11 @@ module RubyExcel
123
123
  #
124
124
  # Return the last cell
125
125
  #
126
- # @return [RubyExcel::Element]
126
+ # @return [RubyExcel::Cell]
127
127
  #
128
128
 
129
129
  def last_cell
130
- Element.new( sheet, each_address.to_a.last )
130
+ Cell.new( sheet, each_address.to_a.last )
131
131
  end
132
132
 
133
133
  #
@@ -215,10 +215,10 @@ module RubyExcel
215
215
  end
216
216
 
217
217
  #
218
- # Access a cell by its header
218
+ # Access a Cell by its header
219
219
  #
220
220
  # @param [String] header the header to search for
221
- # @return [RubyExcel::Element] the cell
221
+ # @return [RubyExcel::Cell] the cell
222
222
  #
223
223
 
224
224
  def cell_by_header( header )
@@ -133,16 +133,16 @@ module RubyExcel
133
133
  end
134
134
 
135
135
  #
136
- # Access an Element by indices.
136
+ # Access an Cell by indices.
137
137
  #
138
138
  # @param [Fixnum] row the row index
139
139
  # @param [Fixnum] col the column index
140
- # @return [RubyExcel::Element]
140
+ # @return [RubyExcel::Cell]
141
141
  # @note Indexing is 1-based like Excel VBA
142
142
  #
143
143
 
144
144
  def cell( row, col )
145
- Element.new( self, indices_to_address( row, col ) )
145
+ Cell.new( self, indices_to_address( row, col ) )
146
146
  end
147
147
  alias cells cell
148
148
 
@@ -397,11 +397,11 @@ module RubyExcel
397
397
  end
398
398
 
399
399
  #
400
- # Access an Element by address.
400
+ # Access a Range by address.
401
401
  #
402
- # @param [String, Element] first_cell the first Cell or Address in the Range
403
- # @param [String, Element] last_cell the last Cell or Address in the Range
404
- # @return [RubyExcel::Element]
402
+ # @param [String, Cell, Range] first_cell the first Cell or Address in the Range
403
+ # @param [String, Cell, Range] last_cell the last Cell or Address in the Range
404
+ # @return [RubyExcel::Range]
405
405
  # @note These are all valid arguments:
406
406
  # ('A1')
407
407
  # ('A1:B2')
@@ -413,7 +413,8 @@ module RubyExcel
413
413
  #
414
414
 
415
415
  def range( first_cell, last_cell=nil )
416
- Element.new( self, to_range_address( first_cell, last_cell ) )
416
+ addr = to_range_address( first_cell, last_cell )
417
+ addr.include?(':') ? Range.new( self, addr ) : Cell.new( self, addr )
417
418
  end
418
419
 
419
420
  #
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.5
4
+ version: 0.1.6
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-10 00:00:00.000000000 Z
12
+ date: 2013-05-14 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: A tabular data structure in Ruby, with header-based helper methods and
15
15
  some of Excel's API style. Designed for Windows + Excel.