lib/ddr/index/query.rb in ddr-models-3.0.0.beta.3 vs lib/ddr/index/query.rb in ddr-models-3.0.0.beta.4
- old
+ new
@@ -1,35 +1,56 @@
+require "virtus"
+require "forwardable"
+
module Ddr::Index
class Query
+ include Virtus.model
+ extend Forwardable
- attr_reader :q, :fields, :filters, :sort, :rows
+ attribute :q, String
+ attribute :fields, Array[FieldAttribute], default: [ ]
+ attribute :filters, Array[Filter], default: [ ]
+ attribute :sort, Array[String], default: [ ]
+ attribute :rows, Integer
- delegate :count, :docs, :pids, :each_pid, :all, to: :result
+ delegate [:count, :docs, :pids, :each_pid, :all] => :result
+ delegate :params => :query_params
+ 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 params
- { q: q,
- fq: filters.map(&:clauses).flatten,
- fl: fields.join(","),
- sort: sort.join(","),
- rows: rows,
- }.select { |k, v| v.present? }
- end
-
def result
QueryResult.new(self)
end
def csv(**opts)
CSVQueryResult.new(self, **opts)
+ end
+
+ def filter_clauses
+ filters.map(&:clauses).flatten
+ end
+
+ def query_params
+ QueryParams.new(self)
+ end
+
+ def build(&block)
+ QueryBuilder.new(self, &block)
+ self
end
end
end