class ReplaceCellAddressesWithReferencesAst

Attributes

count_replaced[RW]
replacement_made[RW]

Public Class Methods

new() click to toggle source
# File src/simplify/replace_cell_addresses_with_references.rb, line 6
def initialize
  @count_replaced = 0
end

Public Instance Methods

function(ast) click to toggle source
# File src/simplify/replace_cell_addresses_with_references.rb, line 23
def function(ast)
  _, name, info, ref = *ast
  return unless name == :CELL
  return unless info.first == :string
  return unless info.last.downcase == "address"
  replace_with_reference(ast, ref)
end
map(ast) click to toggle source
# File src/simplify/replace_cell_addresses_with_references.rb, line 16
def map(ast)
  return ast unless ast.is_a?(Array)
  function(ast) if ast[0] == :function
  ast.each { |a| map(a) }
  ast
end
replace(ast) click to toggle source
# File src/simplify/replace_cell_addresses_with_references.rb, line 10
def replace(ast)
  @replacement_made = false
  map(ast)
  @replacement_made
end
replace_with_reference(ast, ref) click to toggle source
# File src/simplify/replace_cell_addresses_with_references.rb, line 31
def replace_with_reference(ast, ref)
  case ref.first
  when :cell
    ast.replace([:cell, Reference.for(ref.last).unfix])
  when :sheet_reference
    replace_with_reference(ref.last, ref.last)
    ast.replace(ref)
  when :area
    ast.replace([:cell, Reference.for(ref[1]).unfix])
  else
    ast.replace([:error, "#VALUE!"])
  end
end