lib/resourcelogic/actions.rb in resourcelogic-0.9.0 vs lib/resourcelogic/actions.rb in resourcelogic-0.10.0
- old
+ new
@@ -1,50 +1,28 @@
module Resourcelogic
module Actions
ACTIONS = [:index, :show, :new_action, :create, :edit, :update, :destroy].freeze
- FAILABLE_ACTIONS = ACTIONS - [:index, :new_action, :edit].freeze
+ FAILABLE_ACTIONS = ACTIONS - [:index, :new_action, :edit, :destroy].freeze
def self.included(klass)
klass.class_eval do
- extend Config
ACTIONS.each do |action|
class_scoping_reader action, FAILABLE_ACTIONS.include?(action) ? FailableActionOptions.new : ActionOptions.new
end
+ class_scoping_reader :context, ContextOptions.new
add_acts_as_resource_module(Methods)
end
end
- module Config
- def actions(*opts)
- config = {}
- config.merge!(opts.pop) if opts.last.is_a?(Hash)
-
- all_actions = (false && singleton? ? Resourcelogic::SINGLETON_ACTIONS : Resourcelogic::Actions::ACTIONS) - [:new_action] + [:new]
-
- actions_to_remove = []
- if opts.first == :none
- actions_to_remove = all_actions
- else
- actions_to_remove += all_actions - opts unless opts.first == :all
- actions_to_remove += [*config[:except]] if config[:except]
- actions_to_remove.uniq!
- end
-
- actions_to_remove.each { |action| undef_method(action) if method_defined?(action) }
- end
- end
-
module Methods
def new
- build_object
load_object
before :new_action
response_for :new_action
end
-
+
def create
- build_object
load_object
before :create
if object.save
after :create
set_flash :create
@@ -53,20 +31,20 @@
after :create_fails
set_flash :create_fails
response_for :create_fails
end
end
-
+
def edit
load_object
before :edit
response_for :edit
end
-
+
def update
load_object
- object.attributes = object_params
+ object.attributes = attributes
before :update
if object.save
after :update
set_flash :update
response_for :update
@@ -74,32 +52,28 @@
after :update_fails
set_flash :update_fails
response_for :update_fails
end
end
-
+
def destroy
load_object
before :destroy
object.destroy
after :destroy
set_flash :destroy
response_for :destroy
- rescue DestroyNotAllowed
- after :destroy_fails
- set_flash :destroy_fails
- response_for :destroy_fails
end
-
+
def show
load_object
before :show
response_for :show
rescue ActiveRecord::RecordNotFound
response_for :show_fails
end
-
+
def index
load_collection
before :index
response_for :index
end
@@ -119,84 +93,77 @@
end
end
rescue ActionController::DoubleRenderError
end
end
-
+
# Calls the after callbacks for the action, if one is present.
#
def after(action)
invoke_callbacks *options_for(action).after
end
-
+
# Calls the before block for the action, if one is present.
#
def before(action)
invoke_callbacks *self.class.send(action).before
end
-
+
# Sets the flash and flash_now for the action, if it is present.
#
def set_flash(action)
set_normal_flash(action)
set_flash_now(action)
end
-
+
# Sets the regular flash (i.e. flash[:notice] = '...')
#
def set_normal_flash(action)
if f = options_for(action).flash
flash[:notice] = f.is_a?(Proc) ? instance_eval(&f) : options_for(action).flash
end
end
-
+
# Sets the flash.now (i.e. flash.now[:notice] = '...')
#
def set_flash_now(action)
if f = options_for(action).flash_now
flash.now[:notice] = f.is_a?(Proc) ? instance_eval(&f) : options_for(action).flash_now
end
end
-
+
# Returns the options for an action, which is a symbol.
#
# Manages splitting things like :create_fails.
#
def options_for(action)
action = action == :new_action ? [action] : "#{action}".split('_').map(&:to_sym)
options = self.class.send(action.first)
options = options.send(action.last == :fails ? :fails : :success) if Resourcelogic::Actions::FAILABLE_ACTIONS.include? action.first
-
+
options
end
-
+
def invoke_callbacks(*callbacks)
unless callbacks.empty?
callbacks.select { |callback| callback.is_a? Symbol }.each { |symbol| send(symbol) }
-
+
block = callbacks.detect { |callback| callback.is_a? Proc }
instance_eval &block unless block.nil?
end
end
def load_parent
instance_variable_set "@#{parent_model_name}", parent_object if parent?
end
- def build_object
- return @object if @object
- @object = end_of_association_chain.send parent? ? :build : :new
- @object.attributes = object_params
- @object
- end
-
# Used internally to load the member object in to an instance variable @#{model_name} (i.e. @post)
#
def load_object
load_parent
instance_variable_set "@#{object_name}", object
end
-
+
# Used internally to load the collection in to an instance variable @#{model_name.pluralize} (i.e. @posts)
#
def load_collection
load_parent
instance_variable_set "@#{object_name.to_s.pluralize}", collection