class Stepper::ControllerResource

Public Class Methods

add_before_filter(controller_class, *args) click to toggle source

Sets up before filter in controller_class for create, update, new and next_step actions. First argument can be name of resource. For example we have CompaniesController and want to load or build resource to +@my_company+ variable:

add_before_filter CompanyController, :my_company

First argument it isn't required:

add_before_filter CompanyController

In this case resource will be loaded or built into +@company+ variable

# File lib/stepper/controllers/controller_resource.rb, line 12
def self.add_before_filter(controller_class, *args)
  resource_name = args.first if args.first.is_a?(Symbol) or args.first.is_a?(String)
  options = args.extract_options!
  controller_class.send(:before_filter, :only => [:create, :update, :new, :next_step]) do |controller|
    controller.instance_variable_set :@_stepper_redirect_to, options[:redirect_to] || {}
    controller_resource = controller.class.stepper_resource_class.new(controller, resource_name)
    controller.instance_variable_set :@_stepper_resource_instance, controller_resource.load_resource
    controller.instance_variable_set :@_stepper_name, controller_resource.name
  end
end
new(controller, *args) click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 23
def initialize(controller, *args)
  @controller = controller
  @params = controller.params
  @name = args.first
end

Public Instance Methods

load_resource() click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 29
def load_resource
  self.resource_instance ||= load_resource_instance
  self.resource_instance.attributes = @params[name] unless @params[name].blank?
  self.resource_instance
end
load_resource_instance() click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 35
def load_resource_instance
  if ['create', 'new'].include? @params[:action]
    resource = resource_class.new(@params[name] || {})
  else
    resource = unless @params[:id].blank?
      resource_class.find(@params[:id])
    else
      resource_class.new
    end
  end
  resource
end
name() click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 56
def name
  @name || name_from_controller
end
name_from_controller() click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 52
def name_from_controller
  @params[:controller].sub("Controller", "").underscore.split('/').last.singularize
end
resource_class() click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 48
def resource_class
  name.camelize.constantize
end
resource_instance() click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 64
def resource_instance
  @controller.instance_variable_get "@#{name}"
end
resource_instance=(object) click to toggle source
# File lib/stepper/controllers/controller_resource.rb, line 60
def resource_instance=(object)
  @controller.instance_variable_set "@#{name}", object
end