Class: Stepper::ControllerResource

Inherits:
Object
  • Object
show all
Defined in:
lib/stepper/controllers/controller_resource.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(controller, *args) ⇒ ControllerResource

Returns a new instance of ControllerResource.



23
24
25
26
27
# File 'lib/stepper/controllers/controller_resource.rb', line 23

def initialize(controller, *args)
  @controller = controller
  @params = controller.params
  @name = args.first
end

Class Method Details

.add_before_filter(controller_class, *args) ⇒ Object

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



12
13
14
15
16
17
18
19
20
21
# 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

Instance Method Details

#load_resourceObject



29
30
31
32
33
# 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_instanceObject



35
36
37
38
39
40
41
42
43
44
45
46
# 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

#nameObject



56
57
58
# File 'lib/stepper/controllers/controller_resource.rb', line 56

def name
  @name || name_from_controller
end

#name_from_controllerObject



52
53
54
# File 'lib/stepper/controllers/controller_resource.rb', line 52

def name_from_controller
  @params[:controller].sub("Controller", "").underscore.split('/').last.singularize
end

#resource_classObject



48
49
50
# File 'lib/stepper/controllers/controller_resource.rb', line 48

def resource_class
  name.camelize.constantize
end

#resource_instanceObject



64
65
66
# File 'lib/stepper/controllers/controller_resource.rb', line 64

def resource_instance
  @controller.instance_variable_get "@#{name}"
end

#resource_instance=(object) ⇒ Object



60
61
62
# File 'lib/stepper/controllers/controller_resource.rb', line 60

def resource_instance=(object)
  @controller.instance_variable_set "@#{name}", object
end