module ControllerSetterPattern::ActionController::ClassMethods
Public Instance Methods
set(*names)
click to toggle source
# File lib/controller_setter_pattern/action_controller.rb, line 6 def set(*names) callback_options = names.extract_options! (options ||= {})[:model] = callback_options.delete(:model) options[:model] ||= options[:model].to_s.camelize.constantize unless options[:model].nil? options[:finder_params] = _normalize_finder_params(callback_options.delete(:finder_params) || []) options[:finder_method] = 'find' + (options[:finder_params].empty? ? '' : '_by_' + options[:finder_params].join('_and_')) options[:ancestor] = callback_options.delete(:ancestor) options[:scope] = callback_options.delete(:scope) _insert_setters(names, options, callback_options) end
Private Instance Methods
_insert_setters(setters, options, callback_options)
click to toggle source
# File lib/controller_setter_pattern/action_controller.rb, line 30 def _insert_setters(setters, options, callback_options) setters.each do |setter| before_action callback_options do |controller| resource = _get_resource(setter, options[:model], options[:ancestor]) if _is_class_model_or_association_method?(resource) Array(options[:scope]).each { |s| resource = resource.send(s) } unless options[:scope].nil? values_for_find = _get_values_for_finder_params(setter, options[:finder_params]) resource = resource.send(options[:finder_method], *values_for_find) end controller.instance_variable_set("@#{setter}".to_sym, resource) end end end
_normalize_finder_params(finder_params)
click to toggle source
# File lib/controller_setter_pattern/action_controller.rb, line 23 def _normalize_finder_params(finder_params) finder_params = [finder_params] unless finder_params.is_a?(Array) finder_params = finder_params.compact.uniq finder_params.clear if finder_params.one? && finder_params.join.eql?('id') finder_params end