class Railroader::ModelProcessor

Processes models. Puts results in tracker.models

Public Class Methods

new(tracker) click to toggle source
Calls superclass method Railroader::BaseProcessor::new
# File lib/railroader/processors/model_processor.rb, line 9
def initialize tracker
  super
  @current_class = nil
  @current_method = nil
  @current_module = nil
  @visibility = :public
  @file_name = nil
end

Public Instance Methods

process_call(exp) click to toggle source

Handle calls outside of methods, such as include, attr_accessible, private, etc.

# File lib/railroader/processors/model_processor.rb, line 45
def process_call exp
  return exp unless @current_class
  return exp if process_call_defn? exp

  target = exp.target
  if sexp? target
    target = process target
  end

  method = exp.method
  first_arg = exp.first_arg

  # Methods called inside class definition
  # like attr_* and other settings
  if @current_method.nil? and target.nil?
    if first_arg.nil?
      case method
      when :private, :protected, :public
        @visibility = method
      when :attr_accessible
        @current_class.set_attr_accessible
      else
        # ??
      end
    else
      case method
      when :include
        @current_class.add_include class_name(first_arg) if @current_class
      when :attr_accessible
        @current_class.set_attr_accessible exp
      when :attr_protected
        @current_class.set_attr_protected exp
      else
        if @current_class
          @current_class.add_option method, exp
        end
      end
    end

    exp
  else
    call = make_call target, method, process_all!(exp.args)
    call.line(exp.line)
    call
  end
end
process_class(exp) click to toggle source

s(:class, NAME, PARENT, BODY)

# File lib/railroader/processors/model_processor.rb, line 25
def process_class exp
  name = class_name(exp.class_name)
  parent = class_name(exp.parent_name)

  # If inside an inner class we treat it as a library.
  if @current_class
    Railroader.debug "[Notice] Treating inner class as library: #{name}"
    Railroader::LibraryProcessor.new(@tracker).process_library exp, @file_name
    return exp
  end

  handle_class exp, @tracker.models, Railroader::Model
end
process_model(src, file_name = nil) click to toggle source

Process model source

# File lib/railroader/processors/model_processor.rb, line 19
def process_model src, file_name = nil
  @file_name = file_name
  process src
end
process_module(exp) click to toggle source
# File lib/railroader/processors/model_processor.rb, line 39
def process_module exp
  handle_module exp, Railroader::Model
end