Sha256: e971cf9dfdca96030a78b299dc531a4b6b33322bee755c3f9435d2310c92b82f

Contents?: true

Size: 1.04 KB

Versions: 4

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module ActiveRecordFilter
  # Base class that should be extended when creating filters.
  #
  class Base
    def execute(filter_object)
      executer.execute(filter_object)
    end

    def results
      applied_filters.last.results
    end

    def removed
      model_class.where.not(id: results)
    end

    def at_step(index)
      applied_filters[index]
    end

    def applied_filters
      executer.applied_filters
    end

    class << self
      attr_reader :filter_components, :model_class

      def execute(filter_object = nil)
        new.tap { |filter| filter.execute(filter_object) }
      end

      def components(*components)
        @filter_components = components
      end

      def applies_to(model_class)
        @model_class = model_class
      end
    end

    private

    def executer
      @executer ||= FilterExecuter.new(model_class, *filter_components)
    end

    def model_class
      self.class.model_class
    end

    def filter_components
      self.class.filter_components
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active_record_filter-0.2.0 lib/active_record_filter/base.rb
active_record_filter-0.1.0 lib/active_record_filter/base.rb
active_record_filter-0.0.3 lib/active_record_filter/base.rb
active_record_filter-0.0.2 lib/active_record_filter/base.rb