class GraphQL::Upgrader::ProcToClassMethodTransform::NamedProcProcessor

Attributes

proc_arg_names[R]
proc_body_end[R]
proc_body_start[R]
proc_defn_end[R]
proc_defn_indent[R]
proc_defn_start[R]

Public Class Methods

new(proc_name) click to toggle source
# File lib/graphql/upgrader/member.rb, line 300
def initialize(proc_name)
  @proc_name_sym = proc_name.to_sym
  @proc_arg_names = nil
  # Beginning of the `#{proc_name} -> {...}` call
  @proc_defn_start = nil
  # End of the last `end/}`
  @proc_defn_end = nil
  # Amount of whitespace to insert to the rewritten body
  @proc_defn_indent = nil
  # First statement of the proc
  @proc_body_start = nil
  # End of last statement in the proc
  @proc_body_end = nil
  # Used for identifying the proper block
  @inside_proc = false
end

Public Instance Methods

on_block(node) click to toggle source
Calls superclass method
# File lib/graphql/upgrader/member.rb, line 331
def on_block(node)
  send_node, args_node, body_node = node.children
  _receiver, method_name, _send_args_node = *send_node
  if method_name == :lambda && @inside_proc
    source_exp = body_node.loc.expression
    @proc_arg_names = args_node.children.map { |arg_node| arg_node.children[0].to_s }
    @proc_body_start = source_exp.begin.begin_pos
    @proc_body_end = source_exp.end.end_pos
  end
  super(node)
end
on_send(node) click to toggle source
Calls superclass method
# File lib/graphql/upgrader/member.rb, line 317
def on_send(node)
  receiver, method_name, _args = *node
  if method_name == @proc_name_sym && receiver.nil?
    source_exp = node.loc.expression
    @proc_defn_start = source_exp.begin.begin_pos
    @proc_defn_end = source_exp.end.end_pos
    @proc_defn_indent = source_exp.column
    @inside_proc = true
  end
  res = super(node)
  @inside_proc = false
  res
end