excel_to_code 0.2.22 → 0.2.23

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3ccdb199882da15b8172e1714f446a6bf0327d9e
4
- data.tar.gz: 1a6a3be2a554c829a9654a0d567f385f8f8fca92
3
+ metadata.gz: 98a30a4502c1cb0068615b80e1b05cd68f4e1dee
4
+ data.tar.gz: 27283677b8603cbcbb40f7995a71de4713ae17dd
5
5
  SHA512:
6
- metadata.gz: e2653de86cca389d7865e7fe853fa1253255b3399953764c3746ed968432ab0c6f6a3fc4cb10bd10de4b7beeefa06d563f85463b697e385b783f19c07b5cc7a3
7
- data.tar.gz: 7040c57720a1bfb389106405ac2c6d17e8f2f0602d944456b8cffd3b5ad2033f5104850af57cb2d7a022e06697af9fe1a03689f53fc8c05d25390612c89e7259
6
+ metadata.gz: 2e8e0cb3094aea477cb3e8af859a6005b9a44ae693d3869ef35a2ac4a2065c58c7f143d3700cb119dccef87bf940f40ac7fde0c5351bf31203b39c44079361d3
7
+ data.tar.gz: 063a30d831f861cb7f7faa403c4a49b4da2248b32e6c3aa3c74661d58c3020f1864fc85b15915711446c48336d4072f2683346406f5dfcd7e05ac0fbd43f65c9
@@ -41,7 +41,11 @@ module ExcelFunctions
41
41
  when String
42
42
  check_value.downcase == required_value.downcase
43
43
  when Numeric
44
- check_value.to_f == required_value.to_f
44
+ begin
45
+ Float(check_value) == required_value.to_f
46
+ rescue ArgumentError
47
+ false
48
+ end
45
49
  else
46
50
  check_value.downcase == required_value.to_s.downcase
47
51
  end
data/src/excel_to_code.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  class ExcelToCode
2
- def self.version() "0.2.22" end
2
+ def self.version() "0.2.23" end
3
3
  end
4
4
 
5
5
  require_relative 'commands'
@@ -176,10 +176,20 @@ class AstExpandArrayFormulae
176
176
  end
177
177
 
178
178
  def array?(*args)
179
- args.any? { |a| a.first == :array }
179
+ args.any? { |a| a.first == :array || function_that_returns_an_array?(a) }
180
+ end
181
+
182
+ def function_that_returns_an_array?(ast)
183
+ return false unless ast[0] == :function
184
+ return false unless ast[1] == :INDEX
185
+ return false if ast.length < 4
186
+ return false if (ast[3][0] == :number && ast[3][1].to_f != 0.0) && (ast[4][0] == :number && ast[4][1].to_f != 0.0)
187
+ # Might contain a zero or null for the row or column number
188
+ true
180
189
  end
181
190
 
182
191
  def array_ast_to_ruby_array(array_ast)
192
+ return function_to_ruby_array(array_ast) if function_that_returns_an_array?(array_ast)
183
193
  return [[array_ast]] unless array_ast.first == :array
184
194
  array_ast[1..-1].map do |row_ast|
185
195
  row_ast[1..-1].map do |cell|
@@ -187,5 +197,20 @@ class AstExpandArrayFormulae
187
197
  end
188
198
  end
189
199
  end
200
+
201
+ # This handles the special case of INDEX which might return an array
202
+ def function_to_ruby_array(ast)
203
+ return [[ast]] unless ast[0] == :function && ast[1] == :INDEX
204
+ return [[ast]] unless ast[2][0] == :array
205
+ rows = ast[2].length - 1
206
+ columns = ast[2][1].length - 1
207
+ array = Array.new(rows) { Array.new(columns) }
208
+ 1.upto(rows).each do |row|
209
+ 1.upto(columns).each do |column|
210
+ array[row-1][column-1] = [:function, :INDEX, ast, [:number, row], [:number, column]]
211
+ end
212
+ end
213
+ array
214
+ end
190
215
 
191
216
  end
@@ -202,6 +202,8 @@ class MapFormulaeToValues
202
202
  indexes = @calculator._filtered_range_indexes(sum_range, *values)
203
203
  if indexes.is_a?(Symbol)
204
204
  new_ast = value(filtered_range)
205
+ elsif indexes.empty?
206
+ new_ast = [:number, 0]
205
207
  else
206
208
  new_ast = [:function, :SUM, *sum_range.values_at(*indexes)]
207
209
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: excel_to_code
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.22
4
+ version: 0.2.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas Counsell, Green on Black Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-27 00:00:00.000000000 Z
11
+ date: 2014-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubypeg