class Searchkick::Relation
Constants
- NO_DEFAULT_VALUE
Attributes
klass[R]
model[R]
Public Class Methods
new(model, term = "*", **options)
click to toggle source
# File lib/searchkick/relation.rb, line 14 def initialize(model, term = "*", **options) @model = model @term = term @options = options # generate query to validate options query end
Public Instance Methods
except(*keys)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 196 def except(*keys) Relation.new(@model, @term, **@options.except(*keys)) end
execute()
click to toggle source
# File lib/searchkick/relation.rb, line 30 def execute Searchkick.warn("The execute method is no longer needed") load end
includes(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 179 def includes(*values) clone.includes!(*values) end
includes!(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 184 def includes!(*values) check_loaded (@options[:includes] ||= []).concat(values) self end
inspect()
click to toggle source
same as Active Record
# File lib/searchkick/relation.rb, line 24 def inspect entries = results.first(11).map!(&:inspect) entries[10] = "..." if entries.size == 11 "#<#{self.class.name} [#{entries.join(', ')}]>" end
limit(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 36 def limit(value) clone.limit!(value) end
limit!(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 41 def limit!(value) check_loaded @options[:limit] = value self end
load()
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 201 def load private_execute self end
loaded?()
click to toggle source
# File lib/searchkick/relation.rb, line 206 def loaded? !@execute.nil? end
offset(value = NO_DEFAULT_VALUE)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 48 def offset(value = NO_DEFAULT_VALUE) # TODO remove in Searchkick 6 if value == NO_DEFAULT_VALUE private_execute.offset else clone.offset!(value) end end
offset!(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 58 def offset!(value) check_loaded @options[:offset] = value self end
only(*keys)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 191 def only(*keys) Relation.new(@model, @term, **@options.slice(*keys)) end
order(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 126 def order(*values) clone.order!(*values) end
order!(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 131 def order!(*values) values = values.first if values.size == 1 && values.first.is_a?(Array) check_loaded (@options[:order] ||= []).concat(values) self end
page(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 65 def page(value) clone.page!(value) end
page!(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 70 def page!(value) check_loaded @options[:page] = value self end
per_page(value = NO_DEFAULT_VALUE)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 77 def per_page(value = NO_DEFAULT_VALUE) # TODO remove in Searchkick 6 if value == NO_DEFAULT_VALUE private_execute.per_page else clone.per_page!(value) end end
per_page!(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 87 def per_page!(value) check_loaded @options[:per_page] = value self end
reorder(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 139 def reorder(*values) clone.reorder!(*values) end
reorder!(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 144 def reorder!(*values) check_loaded @options[:order] = values self end
reselect(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 167 def reselect(*values) clone.reselect!(*values) end
reselect!(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 172 def reselect!(*values) check_loaded @options[:select] = values self end
respond_to_missing?(method_name, include_all)
click to toggle source
Calls superclass method
# File lib/searchkick/relation.rb, line 210 def respond_to_missing?(method_name, include_all) Results.new(nil, nil, nil).respond_to?(method_name, include_all) || super end
rewhere(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 114 def rewhere(value) clone.rewhere!(value) end
rewhere!(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 119 def rewhere!(value) check_loaded @options[:where] = ensure_permitted(value) self end
select(*values, &block)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 151 def select(*values, &block) if block_given? private_execute.select(*values, &block) else clone.select!(*values) end end
select!(*values)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 160 def select!(*values) check_loaded (@options[:select] ||= []).concat(values) self end
where(value = NO_DEFAULT_VALUE)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 94 def where(value = NO_DEFAULT_VALUE) if value == NO_DEFAULT_VALUE Where.new(self) else clone.where!(value) end end
where!(value)
click to toggle source
experimental
# File lib/searchkick/relation.rb, line 103 def where!(value) check_loaded if @options[:where] @options[:where] = {_and: [@options[:where], ensure_permitted(value)]} else @options[:where] = ensure_permitted(value) end self end
Private Instance Methods
check_loaded()
click to toggle source
# File lib/searchkick/relation.rb, line 229 def check_loaded raise Error, "Relation loaded" if loaded? # reset query since options will change @query = nil end
ensure_permitted(obj)
click to toggle source
provides very basic protection from unfiltered parameters this is not meant to be comprehensive and may be expanded in the future
# File lib/searchkick/relation.rb, line 238 def ensure_permitted(obj) obj.to_h end
initialize_copy(other)
click to toggle source
Calls superclass method
# File lib/searchkick/relation.rb, line 242 def initialize_copy(other) super @execute = nil end
private_execute()
click to toggle source
TODO uncomment in 6.0 def to_yaml
private_execute.to_a.to_yaml
end
# File lib/searchkick/relation.rb, line 221 def private_execute @execute ||= query.execute end
query()
click to toggle source
# File lib/searchkick/relation.rb, line 225 def query @query ||= Query.new(@model, @term, **@options) end