Sha256: 1803f08f3c13d65c00c7e264436f8aff194ec266d9842e872f009620a828c443

Contents?: true

Size: 1.49 KB

Versions: 8

Compression:

Stored size: 1.49 KB

Contents

# frozen_string_literal: true
require 'drillbit/parameters/filter'

module Drillbit
module Resource
module Processors
class  Filtering
  attr_accessor :resource,
                :parameters

  # rubocop:disable Style/OptionHash
  def initialize(resource, parameters = {})
    self.resource   = resource
    self.parameters = Parameters::Filter.new(parameters['filter'] || {})
  end
  # rubocop:enable Style/OptionHash

  def self.processed(*attrs)
    new(*attrs).processed
  end

  def self.meta(*_attrs)
    {}
  end

  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

  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

  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

  def resource_class
    @resource_class ||= if resource.respond_to? :klass
                          resource.klass
                        else
                          resource
                        end
  end
end
end
end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
drillbit-2.11.0 lib/drillbit/resource/processors/filtering.rb
drillbit-2.10.0 lib/drillbit/resource/processors/filtering.rb
drillbit-2.9.1 lib/drillbit/resource/processors/filtering.rb
drillbit-2.9.0 lib/drillbit/resource/processors/filtering.rb
drillbit-2.8.0 lib/drillbit/resource/processors/filtering.rb
drillbit-2.7.0 lib/drillbit/resource/processors/filtering.rb
drillbit-2.6.0 lib/drillbit/resource/processors/filtering.rb
drillbit-2.5.0 lib/drillbit/resource/processors/filtering.rb