class Apiphobic::Resource::Processors::Filtering

Attributes

parameters[RW]
resource[RW]

Public Class Methods

meta(*_attrs) click to toggle source
# File lib/apiphobic/resource/processors/filtering.rb, line 23
def self.meta(*_attrs)
  {}
end
new(resource, parameters = {}) click to toggle source

rubocop:disable Style/OptionHash

# File lib/apiphobic/resource/processors/filtering.rb, line 13
def initialize(resource, parameters = {})
  self.resource   = resource
  self.parameters = Parameters::Filter.new(parameters['filter'] || {})
end
processed(*attrs) click to toggle source

rubocop:enable Style/OptionHash

# File lib/apiphobic/resource/processors/filtering.rb, line 19
def self.processed(*attrs)
  new(*attrs).processed
end

Public Instance Methods

processed() click to toggle source
# File lib/apiphobic/resource/processors/filtering.rb, line 27
def processed
  parameters.each_with_object(resource) do |(name, value), filtered_resource|
    filter_method = filter_method_for(name)

    if !filter_method
      filtered_resource
    elsif filter_method.arity.zero?
      filtered_resource.public_send(filter_method.name)
    else
      filtered_resource.public_send(filter_method.name, value)
    end
  end
end

Private Instance Methods

filter_method_for(filter_item) click to toggle source
# File lib/apiphobic/resource/processors/filtering.rb, line 43
def filter_method_for(filter_item)
  filter_method_name = filter_method_name_for(filter_item)

  resource_class.method(filter_method_name) if filter_method_name
end
filter_method_name_for(filter_item) click to toggle source
# File lib/apiphobic/resource/processors/filtering.rb, line 49
def filter_method_name_for(filter_item)
  if resource_class.respond_to? "for_#{filter_item}"
    "for_#{filter_item}"
  elsif resource_class.respond_to? filter_item
    filter_item
  end
end
resource_class() click to toggle source
# File lib/apiphobic/resource/processors/filtering.rb, line 57
def resource_class
  @resource_class ||= if resource.respond_to? :klass
                        resource.klass
                      else
                        resource
                      end
end