class Ansr::Relation

Constants

DEFAULT_PAGE_SIZE

Attributes

context[RW]
count[RW]
filters[RW]
resource[RW]
response[R]
total_count[RW]

Public Class Methods

new(klass, table, values = {}) click to toggle source
Calls superclass method
# File lib/ansr/relation.rb, line 15
def initialize(klass, table, values = {})
  raise "Cannot search nil model" if klass.nil?
  super(klass, table, values)
end

Public Instance Methods

default_limit_value() click to toggle source
# File lib/ansr/relation.rb, line 26
def default_limit_value
  DEFAULT_PAGE_SIZE
end
docs_from(response) click to toggle source

override to parse docs from response

# File lib/ansr/relation.rb, line 79
def docs_from(response)
  []
end
empty?() click to toggle source
# File lib/ansr/relation.rb, line 47
def empty?
  count == 0
end
filters_from(response) click to toggle source

override to parse filters from response

# File lib/ansr/relation.rb, line 74
def filters_from(response)
  {} and raise "this is a dead method!"
end
group_by(key=self.group_values.first) click to toggle source
# File lib/ansr/relation.rb, line 105
def group_by(key=self.group_values.first)
  []
end
grouped?() click to toggle source
# File lib/ansr/relation.rb, line 101
def grouped?
  false
end
load() click to toggle source
# File lib/ansr/relation.rb, line 30
def load
  exec_queries unless loaded?
  self
end
many?() click to toggle source
# File lib/ansr/relation.rb, line 51
def many?
  count > 1
end
max_pages() click to toggle source
# File lib/ansr/relation.rb, line 69
def max_pages
  (total_count.to_f / limit_value).ceil
end
offset!(value) click to toggle source
# File lib/ansr/relation.rb, line 55
def offset!(value)
  self.offset_value=value
  self
end
reload() click to toggle source

Forces reloading of relation.

# File lib/ansr/relation.rb, line 42
def reload
  reset
  load
end
spawn() click to toggle source
# File lib/ansr/relation.rb, line 95
def spawn
  s = self.class.new(@klass, @table, @values.dup)
  s.references!(references_values())
  s
end
to_a() click to toggle source

Converts relation objects to Array.

# File lib/ansr/relation.rb, line 36
def to_a
  load
  @records
end

Private Instance Methods

build_select(arel, selects) click to toggle source

override to prevent default selection of all fields

# File lib/ansr/relation.rb, line 112
def build_select(arel, selects)
  unless selects.empty?
    @implicit_readonly = false
    arel.project(*selects)
  #else
  #  arel.project(@klass.arel_table[Arel.star])
  end
end
exec_queries() click to toggle source
# File lib/ansr/relation.rb, line 122
def exec_queries
  default_scoped = with_default_scope

  if default_scoped.equal?(self)
    @response = model.find_by_nosql(arel, bind_values)
    @records = docs_from(@response).collect do |d|
      model.new(d)
    end

    # this is ceremonial, it's always true
    readonly = readonly_value.nil? || readonly_value
    @records.each { |record| record.readonly! } if readonly
  else
    @records = default_scoped.to_a
  end

  self.limit_value = default_limit_value unless self.limit_value
  self.offset_value = 0 unless self.offset_value
  @filter_cache = nil # unload any cached filters
  @loaded = true
  @records
end