Module: Puffer::Filters::ClassMethods

Included in:
Puffer::Filters
Defined in:
lib/puffer/filters.rb

Instance Method Summary collapse

Instance Method Details

#controller_filters(controller) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/puffer/filters.rb', line 67

def controller_filters controller
  scope = "#{controller}Filters".split('::')[0..-2].join('::').constantize rescue Kernel
  name = "#{controller}Filters".demodulize

  if scope.const_defined?(name)
    scope.const_get(name)
  else
    attributes_from_controller = controller.index_fields.reduce({}) do |res, field|
      res[field.field_name] = nil
      res
    end

    attributes_from_controller.merge!('puffer_search' => nil, 'puffer_order' => nil)

    klass = Class.new(self)

    attributes_from_controller.keys.each do |name|
      klass.send :define_method, name do
        read_attribute name
      end
      klass.send :define_method, "#{name}=" do |value|
        write_attribute name, value
      end
    end

    klass.send :define_method, :attributes do
      attributes_from_controller
    end
    

    scope.const_set(name, klass)
  end
end

#model_nameObject



59
60
61
62
63
64
65
# File 'lib/puffer/filters.rb', line 59

def model_name
  @model_name ||= begin
    name = super
    name.instance_variable_set :@param_key, 'filters'
    name
  end
end