Sha256: 2e15efcefe379fd1e20f7d502a6fce031acd0789ec0d1950152f356a3882865a

Contents?: true

Size: 1.75 KB

Versions: 36

Compression:

Stored size: 1.75 KB

Contents

require "virtus"
require "forwardable"

module Ddr::Index
  class Query
    include Virtus.model
    extend Forwardable
    extend Deprecation

    attribute :q,       String
    attribute :fields,  Array[FieldAttribute], default: [ ]
    attribute :filters, Array[Filter],         default: [ ]
    attribute :sort,    Array[String],         default: [ ]
    attribute :rows,    Integer

    delegate [:count, :docs, :ids, :each_id, :all] => :result
    delegate :params => :query_params

    def self.build(*args, &block)
      new.tap do |query|
        query.build(*args, &block)
      end
    end

    def initialize(**args, &block)
      super(**args)
      if block_given?
        build(&block)
      end
    end

    def inspect
      "#<#{self.class.name} q=#{q.inspect}, filters=#{filters.inspect}," \
      " sort=#{sort.inspect}, rows=#{rows.inspect}, fields=#{fields.inspect}>"
    end

    def to_s
      URI.encode_www_form(params)
    end

    def pids
      Deprecation.warn(QueryResult, "`pids` is deprecated; use `ids` instead.")
      ids
    end

    def each_pid(&block)
      Deprecation.warn(QueryResult, "`each_pid` is deprecated; use `each_id` instead.")
      each_id(&block)
    end

    def result
      QueryResult.new(self)
    end

    def csv
      CSVQueryResult.new(self)
    end

    def filter_clauses
      filters.map(&:clauses).flatten
    end

    def query_params
      QueryParams.new(self)
    end

    def build(*args, &block)
      QueryBuilder.new(self, *args, &block)
      self
    end

    def ==(other)
      other.instance_of?(self.class) &&
        other.q == self.q &&
        other.fields == self.fields &&
        other.filters == self.filters &&
        other.rows == self.rows &&
        other.sort == self.sort
    end

  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
ddr-models-2.11.0 lib/ddr/index/query.rb
ddr-models-2.10.2 lib/ddr/index/query.rb
ddr-models-2.10.1 lib/ddr/index/query.rb
ddr-models-2.10.0 lib/ddr/index/query.rb
ddr-models-2.10.0.rc2 lib/ddr/index/query.rb
ddr-models-2.10.0.rc1 lib/ddr/index/query.rb
ddr-models-2.9.2 lib/ddr/index/query.rb
ddr-models-2.9.1 lib/ddr/index/query.rb
ddr-models-2.9.0 lib/ddr/index/query.rb
ddr-models-2.9.0.rc1 lib/ddr/index/query.rb
ddr-models-2.8.0 lib/ddr/index/query.rb
ddr-models-2.8.0.rc1 lib/ddr/index/query.rb
ddr-models-2.7.6 lib/ddr/index/query.rb
ddr-models-2.7.5 lib/ddr/index/query.rb
ddr-models-2.7.4 lib/ddr/index/query.rb
ddr-models-2.7.3 lib/ddr/index/query.rb
ddr-models-2.7.2 lib/ddr/index/query.rb
ddr-models-2.7.1 lib/ddr/index/query.rb
ddr-models-2.7.0 lib/ddr/index/query.rb
ddr-models-2.7.0.rc1 lib/ddr/index/query.rb