Sha256: 02a647ead3420359f07fd4d6eb92c0a0f603590143338222f2b71b31b8332e2a

Contents?: true

Size: 754 Bytes

Versions: 4

Compression:

Stored size: 754 Bytes

Contents

# frozen_string_literal: true

module SearchObject
  # :api: private
  class Search
    attr_reader :params

    def initialize(scope:, options: nil, defaults: nil, params: nil)
      @scope = scope
      @options = options || {}
      @defaults = defaults || {}

      self.params = params
    end

    def params=(params)
      @params = @defaults.merge(Helper.slice_keys(Helper.stringify_keys(params || {}), @options.keys))
    end

    def param(name)
      @params[name.to_s]
    end

    def query(context)
      @params.inject(@scope) do |scope, (name, value)|
        new_scope = context.instance_exec scope, value, &@options[name]
        new_scope || scope
      end
    end

    def count(context)
      query(context).count
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
search_object-1.2.5 lib/search_object/search.rb
search_object-1.2.4 lib/search_object/search.rb
search_object-1.2.3 lib/search_object/search.rb
search_object-1.2.2 lib/search_object/search.rb