class FormulaDSL::Transformer
Public Instance Methods
apply( ast )
click to toggle source
# File lib/formula_dsl/transformer.rb, line 5 def apply( ast ) expression = parse(ast) expression end
Private Instance Methods
extract_operation_side( side )
click to toggle source
# File lib/formula_dsl/transformer.rb, line 50 def extract_operation_side( side ) if side.respond_to?(:keys) parse( side ) else if (/"(?<value>.)"/ =~ side.to_str) "'#{value}'" elsif (/(?<value>\d+)/ =~ side.str) value.to_i else side.to_str end end end
is_function?(key)
click to toggle source
# File lib/formula_dsl/transformer.rb, line 35 def is_function?(key) :function == key end
is_operator?( key )
click to toggle source
# File lib/formula_dsl/transformer.rb, line 31 def is_operator?( key ) [:+, :-, :*, :/].include?(key) end
parse( hash )
click to toggle source
# File lib/formula_dsl/transformer.rb, line 12 def parse( hash ) if hash.keys.size == 1 parse_single_key_hash( hash ) else puts "como faz o parse de um hash com mais de 1 chave???" end end
parse_function( hash = {name:'', args:''} )
click to toggle source
# File lib/formula_dsl/transformer.rb, line 46 def parse_function( hash = {name:'', args:''} ) FunctionExpression.new(hash[:name].to_str, hash[:args].to_str) end
parse_operation(operator, values={left: '', right: ''})
click to toggle source
# File lib/formula_dsl/transformer.rb, line 39 def parse_operation(operator, values={left: '', right: ''}) left_side = extract_operation_side(values[:left]) right_side = extract_operation_side(values[:right]) BinaryExpression.new(operator, left_side, right_side) end
parse_single_key_hash( hash )
click to toggle source
# File lib/formula_dsl/transformer.rb, line 20 def parse_single_key_hash( hash ) key = hash.keys.first if is_operator? key parse_operation key, hash[key] elsif is_function? key parse_function hash[key] else puts "como faz o parse de um hash com chave = #{key}???" end end