Sha256: 52c82abbe64c09e8b860872944b42199d981b346f8bbbcbb3a113e6fc6d78986

Contents?: true

Size: 827 Bytes

Versions: 31

Compression:

Stored size: 827 Bytes

Contents

module Recruiter
  module Filters
    def self.filter(type, params = {})
      filter_class(type).new(params).filter
    end

    def self.filter_class(type)
      "Recruiter::Filters::#{type.to_s.classify}Filter".constantize
    end

    class Base
      attr_reader :query

      def self.filter(params = {})
        new(params).filter
      end

      def initialize(params = {})
        init_query

        params.each do |key, values|
          method = "with_#{key}"

          if respond_to?(method)
            send(method, *values)
          end
        end
      end

      def init_query
      end

      def filter
        query
      end

      def merge(scope = nil, &block)
        @query = query.merge(yield) if block_given?
        @query = query.merge(scope) if scope
        self
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
recruiter-1.1.18 app/models/recruiter/filters.rb
recruiter-1.1.17 app/models/recruiter/filters.rb
recruiter-1.1.16 app/models/recruiter/filters.rb
recruiter-1.1.15 app/models/recruiter/filters.rb
recruiter-1.1.14 app/models/recruiter/filters.rb
recruiter-1.1.12 app/models/recruiter/filters.rb
recruiter-1.1.11 app/models/recruiter/filters.rb
recruiter-1.1.10 app/models/recruiter/filters.rb
recruiter-1.1.9 app/models/recruiter/filters.rb
recruiter-1.1.8 app/models/recruiter/filters.rb
recruiter-1.1.7 app/models/recruiter/filters.rb
recruiter-1.1.6 app/models/recruiter/filters.rb
recruiter-1.1.5 app/models/recruiter/filters.rb
recruiter-1.1.4 app/models/recruiter/filters.rb
recruiter-1.1.3 app/models/recruiter/filters.rb
recruiter-1.1.2 app/models/recruiter/filters.rb
recruiter-1.1.1 app/models/recruiter/filters.rb
recruiter-1.1.0 app/models/recruiter/filters.rb
recruiter-1.0.0 app/models/recruiter/filters.rb
recruiter-0.1.5 app/models/recruiter/filters.rb