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