class Rescue::Controller::Action
Public Class Methods
define(object, names, args = {})
click to toggle source
# File lib/rescue/controllers/action.rb, line 30 def self.define object, names, args = {} names.each do |name| options = args[name]||{} type = options[:type]||name raise RuntimeError, "`#{name}` is already defined." if object.method_defined?(name) case type when :show, :edit object.send(:define_method, name) do send(:find_call) instance_exec(&options[:render]) if options[:render] end when :new object.send(:define_method, name) do params = options[:params] ? send(options[:params]) : {} send(:new_call, params) instance_exec(&options[:render]) if options[:render] end when :create, :update, :destroy object.send(:define_method, name) do begin params = send(options[:params]||:"#{name}_params") rescue_respond(:"#{type}_call", params, options) rescue NoMethodError => e raise NoParameterMethodError.new(self.class, e.name) end end else raise Rescue::NoActionError.new(type) end end end
define_call(object, clazz, var_sym)
click to toggle source
# File lib/rescue/controllers/action.rb, line 6 def self.define_call object, clazz, var_sym object.send(:define_method, :new_call) do |params = {}| instance_variable_set(var_sym, clazz.new(params)) end object.send(:define_method, :find_call) do |params = {}| id = (params.empty? ? send(:params) : params).delete(Rescue.config.primary_key) instance_variable_set(var_sym, clazz.where(params).find(id)) end object.send(:define_method, :create_call) do |params, validate = {}| new_call(params) instance_variable_get(var_sym).save!(validate) end object.send(:define_method, :update_call) do |params, validate = {}| find_call instance_variable_get(var_sym).attributes = params instance_variable_get(var_sym).save!(validate) end object.send(:define_method, :destroy_call) do |params, validate = {}| find_call(params) instance_variable_get(var_sym).destroy end object.send(:private, :new_call, :find_call, :create_call, :update_call, :destroy_call) end