Module: Orbacle::Builder::OperatorAssignmentProcessors
- Included in:
- Orbacle::Builder
- Defined in:
- lib/orbacle/builder/operator_assignment_processors.rb
Instance Method Summary collapse
- #build_accessor_based_on_assignment(assignment_ast) ⇒ Object
- #complete_assignment(partial_assignment_ast, full_rhs_ast) ⇒ Object
- #handle_and_asgn(ast, context) ⇒ Object
- #handle_op_asgn(ast, context) ⇒ Object
- #handle_or_asgn(ast, context) ⇒ Object
Instance Method Details
#build_accessor_based_on_assignment(assignment_ast) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/orbacle/builder/operator_assignment_processors.rb', line 43 def build_accessor_based_on_assignment(assignment_ast) case assignment_ast.type when :lvasgn var_name = assignment_ast.children[0] Parser::AST::Node.new(:lvar, [var_name]) when :ivasgn var_name = assignment_ast.children[0] Parser::AST::Node.new(:ivar, [var_name]) when :cvasgn var_name = assignment_ast.children[0] Parser::AST::Node.new(:cvar, [var_name]) when :casgn scope = assignment_ast.children[0] var_name = assignment_ast.children[1] Parser::AST::Node.new(:const, [scope, var_name]) when :send send_obj = assignment_ast.children[0] asgn_method_name = assignment_ast.children[1] args = assignment_ast.children[2..-1] Parser::AST::Node.new(:send, [send_obj, asgn_method_name, *args]) when :gvasgn var_name = assignment_ast.children[0] Parser::AST::Node.new(:gvar, [var_name]) else raise ArgumentError end end |
#complete_assignment(partial_assignment_ast, full_rhs_ast) ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/orbacle/builder/operator_assignment_processors.rb', line 70 def complete_assignment(partial_assignment_ast, full_rhs_ast) if partial_assignment_ast.type == :send send_obj_ast, accessor_method_name, _ = partial_assignment_ast.children partial_assignment_ast.updated(nil, [send_obj_ast, :"#{accessor_method_name}=", full_rhs_ast]) elsif [:lvasgn, :ivasgn, :cvasgn, :casgn, :gvasgn].include?(partial_assignment_ast.type) partial_assignment_ast.append(full_rhs_ast) end end |
#handle_and_asgn(ast, context) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/orbacle/builder/operator_assignment_processors.rb', line 31 def handle_and_asgn(ast, context) partial_assignment_ast, argument_ast = ast.children return process( complete_assignment( partial_assignment_ast, Parser::AST::Node.new(:and, [ build_accessor_based_on_assignment(partial_assignment_ast), argument_ast])), context) end |
#handle_op_asgn(ast, context) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/orbacle/builder/operator_assignment_processors.rb', line 6 def handle_op_asgn(ast, context) partial_assignment_ast, operator_name, argument_ast = ast.children return process( complete_assignment( partial_assignment_ast, Parser::AST::Node.new(:send, [ build_accessor_based_on_assignment(partial_assignment_ast), operator_name, argument_ast])), context) end |
#handle_or_asgn(ast, context) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/orbacle/builder/operator_assignment_processors.rb', line 19 def handle_or_asgn(ast, context) partial_assignment_ast, argument_ast = ast.children return process( complete_assignment( partial_assignment_ast, Parser::AST::Node.new(:or, [ build_accessor_based_on_assignment(partial_assignment_ast), argument_ast])), context) end |