module Railroader::ProcessorHelper

Contains a couple shared methods for Processors.

Public Instance Methods

current_file_name() click to toggle source
# File lib/railroader/processors/lib/processor_helper.rb, line 76
def current_file_name
  case
  when @file_name
    @file_name
  when @current_class.is_a?(Railroader::Collection)
    @current_class.file
  when @current_module.is_a?(Railroader::Collection)
    @current_module.file
  else
    nil
  end
end
process_all(exp) click to toggle source
# File lib/railroader/processors/lib/processor_helper.rb, line 3
def process_all exp
  exp.each_sexp do |e|
    process e
  end
  exp
end
process_all!(exp) click to toggle source
# File lib/railroader/processors/lib/processor_helper.rb, line 10
def process_all! exp
  exp.map! do |e|
    if sexp? e
      process e
    else
      e
    end
  end

  exp
end
process_call_args(exp) click to toggle source

Process the arguments of a method call. Does not store results.

This method is used because Sexp#args and Sexp#arglist create new objects.

# File lib/railroader/processors/lib/processor_helper.rb, line 25
def process_call_args exp
  exp.each_arg do |a|
    process a if sexp? a
  end

  exp
end
process_call_defn?(exp) click to toggle source

e.g. private defn

# File lib/railroader/processors/lib/processor_helper.rb, line 64
def process_call_defn? exp
  if call? exp and exp.target.nil? and node_type? exp.first_arg, :defn, :defs and [:private, :public, :protected].include? exp.method
    prev_visibility = @visibility
    @visibility = exp.method
    process exp.first_arg
    @visibility = prev_visibility
    exp
  else
    false
  end
end
process_class(exp) click to toggle source
# File lib/railroader/processors/lib/processor_helper.rb, line 33
def process_class exp
  current_class = @current_class
  @current_class = class_name exp[1]
  process_all exp.body
  @current_class = current_class
  exp
end
process_module(exp) { || ... } click to toggle source

Sets the current module.

# File lib/railroader/processors/lib/processor_helper.rb, line 42
def process_module exp
  module_name = class_name(exp.class_name).to_s
  prev_module = @current_module

  if prev_module
    @current_module = "#{prev_module}::#{module_name}"
  else
    @current_module = module_name
  end

  if block_given?
    yield
  else
    process_all exp.body
  end

  @current_module = prev_module

  exp
end