Sha256: 32801b1764ded989668c413fff311cff2ad8fec4917a9d01e350cbf4fa695b06

Contents?: true

Size: 1.17 KB

Versions: 10

Compression:

Stored size: 1.17 KB

Contents

require "omise/search"

module Omise
  class SearchScope
    def initialize(scope, options = {})
      @scope             = scope.to_s
      @filters           = options.delete(:filters) { Hash.new }
      @order             = options.delete(:order)
      @page              = options.delete(:page)
      @query             = options.delete(:query)
    end

    attr_reader :scope

    def filter(filters = {})
      renew(filters: @filters.merge(filters))
    end

    def query(terms = nil)
      return self if !terms
      renew(query: terms)
    end

    def order(order)
      renew(order: order)
    end

    def page(number)
      renew(page: number)
    end

    def execute
      Search.execute(to_attributes)
    end

    def to_attributes
      {}.tap do |a|
        a[:scope]   = @scope
        a[:filters] = @filters if @filters.any?
        a[:query]   = @query if @query
        a[:order]   = @order if @order
        a[:page]    = @page if @page
      end
    end

    private

    def renew(attributes)
      self.class.new(@scope, {
        query:   @query,
        filters: @filters,
        order:   @order,
        page:    @page,
      }.merge(attributes))
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
omise-0.11.0 lib/omise/search_scope.rb
omise-0.10.1 lib/omise/search_scope.rb
omise-0.10.0 lib/omise/search_scope.rb
omise-0.9.1 lib/omise/search_scope.rb
omise-0.9.0 lib/omise/search_scope.rb
omise-0.7.2 lib/omise/search_scope.rb
omise-0.8.0 lib/omise/search_scope.rb
omise-0.7.1 lib/omise/search_scope.rb
omise-0.7.0 lib/omise/search_scope.rb
omise-0.6.0 lib/omise/search_scope.rb