class CountFormulaReferences
Attributes
current_sheet[RW]
dependencies[RW]
references[RW]
FIXME: Do we need these accessors
Public Class Methods
new(references = {}, dependencies = {})
click to toggle source
# File src/simplify/count_formula_references.rb, line 8 def initialize(references = {}, dependencies = {}) @references = references @dependencies = dependencies dependencies.default_proc = lambda do |hash,key| hash[key] = 0 end @current_sheet = [] end
Public Instance Methods
cell(ast)
click to toggle source
Format [:cell, reference]
# File src/simplify/count_formula_references.rb, line 52 def cell(ast) reference = ast[1] ref = reference.to_s.gsub('$','').to_sym @dependencies[[current_sheet.last, ref]] += 1 end
count(references)
click to toggle source
# File src/simplify/count_formula_references.rb, line 17 def count(references) # FIXME: Why do we have this references instance variable? @references = references references.each do |full_ref,ast| @dependencies[full_ref] ||= 0 count_dependencies_for(full_ref.first,full_ref.last,ast) end return dependencies end
count_dependencies_for(sheet,ref,ast)
click to toggle source
# File src/simplify/count_formula_references.rb, line 27 def count_dependencies_for(sheet,ref,ast) current_sheet.push(sheet) map(ast) current_sheet.pop end
map(ast)
click to toggle source
# File src/simplify/count_formula_references.rb, line 33 def map(ast) return ast unless ast.is_a?(Array) case ast[0] when :sheet_reference; sheet_reference(ast) when :cell; cell(ast) else; ast.each { |a| map(a) } end ast end
sheet_reference(ast)
click to toggle source
Format [:sheet_reference, sheet, reference]
# File src/simplify/count_formula_references.rb, line 44 def sheet_reference(ast) sheet = ast[1] reference = ast[2] ref = reference.last.to_s.gsub('$','').to_sym @dependencies[[sheet, ref]] += 1 end