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