class CompileToRuby

Attributes

defaults[RW]
settable[RW]
worksheet[RW]

Public Class Methods

rewrite(*args) click to toggle source
# File src/compile/ruby/compile_to_ruby.rb, line 9
def self.rewrite(*args)
  self.new.rewrite(*args)
end

Public Instance Methods

rewrite(input, sheet_names, output) click to toggle source
# File src/compile/ruby/compile_to_ruby.rb, line 13
def rewrite(input, sheet_names, output)
  self.settable ||= lambda { |ref| false }
  self.defaults ||= []
  mapper = MapFormulaeToRuby.new
  mapper.sheet_names = sheet_names
  input.each do |ref, ast|
    begin
      worksheet = ref.first.to_s
      cell = ref.last
      mapper.worksheet = worksheet
      worksheet_c_name = mapper.sheet_names[worksheet] || worksheet.to_s
      name = worksheet_c_name.length > 0 ? "#{worksheet_c_name}_#{cell.downcase}" : cell.downcase
      if settable.call(ref)
        output.puts "  attr_accessor :#{name} # Default: #{mapper.map(ast)}"
        defaults << "    @#{name} = #{mapper.map(ast)}"
      else
        output.puts "  def #{name}; @#{name} ||= #{mapper.map(ast)}; end"
      end
    rescue Exception => e
      puts "Exception at #{ref} => #{ast}"
      raise
    end      
  end
end