class Fasterer::MethodCall

Attributes

arguments[R]
block_argument_names[R]
block_body[R]
call_element[R]
element[R]
method_name[R]
name[R]
receiver[R]

Public Class Methods

new(element) click to toggle source
# File lib/fasterer/method_call.rb, line 12
def initialize(element)
  @element = element
  set_call_element
  set_receiver
  set_method_name
  set_arguments
  set_block_presence
  set_block_body
  set_block_argument_names
end

Public Instance Methods

arguments_element() click to toggle source
# File lib/fasterer/method_call.rb, line 31
def arguments_element
  call_element.sexp_body(3) || []
end
has_block?() click to toggle source
# File lib/fasterer/method_call.rb, line 23
def has_block?
  @block_present || false
end
lambda_literal?() click to toggle source
# File lib/fasterer/method_call.rb, line 35
def lambda_literal?
  call_element.sexp_type == :lambda
end
receiver_element() click to toggle source
# File lib/fasterer/method_call.rb, line 27
def receiver_element
  call_element[1]
end

Private Instance Methods

set_arguments() click to toggle source
# File lib/fasterer/method_call.rb, line 60
def set_arguments
  @arguments = arguments_element.map { |argument| Argument.new(argument) }
end
set_block_argument_names() click to toggle source

TODO: write specs for lambdas and procs

# File lib/fasterer/method_call.rb, line 75
def set_block_argument_names
  @block_argument_names = if has_block? && element[2].is_a?(Sexp) # HACK: for lambdas
                            element[2].drop(1).map { |argument| argument }
                          end || []
end
set_block_body() click to toggle source
# File lib/fasterer/method_call.rb, line 70
def set_block_body
  @block_body = element[3] if has_block?
end
set_block_presence() click to toggle source
# File lib/fasterer/method_call.rb, line 64
def set_block_presence
  if element.sexp_type == :iter || (arguments.last && arguments.last.type == :block_pass)
    @block_present = true
  end
end
set_call_element() click to toggle source

TODO: explanation

# File lib/fasterer/method_call.rb, line 43
def set_call_element
  @call_element = case element.sexp_type
                  when :call
                    @element
                  when :iter
                    @element[1]
                  end
end
set_method_name() click to toggle source
# File lib/fasterer/method_call.rb, line 56
def set_method_name
  @method_name = call_element[2]
end
set_receiver() click to toggle source
# File lib/fasterer/method_call.rb, line 52
def set_receiver
  @receiver = ReceiverFactory.new(receiver_element)
end