class NinjaModel::Relation

Constants

MULTI_VALUE_ATTRS
SINGLE_VALUE_ATTRS

Attributes

default_scoped[RW]
default_scoped?[RW]
klass[R]
limit_value[RW]
loaded[R]
loaded?[R]
offset_value[RW]
ordering[RW]
predicates[RW]
readonly_value[RW]

Public Class Methods

new(klass) click to toggle source
# File lib/ninja_model/relation.rb, line 22
def initialize(klass)
  @klass  = klass
  @loaded = false
  @default_scoped = false

  SINGLE_VALUE_ATTRS.each do |v|
    instance_variable_set("@#{v}_value".to_sym, nil)
  end

  MULTI_VALUE_ATTRS.each do |v|
    instance_variable_set("@#{v}".to_sym, [])
  end
end

Public Instance Methods

blank?() click to toggle source
# File lib/ninja_model/relation.rb, line 64
def blank?
  empty?
end
build(*args, &block)
Alias for: new
empty?() click to toggle source
# File lib/ninja_model/relation.rb, line 68
def empty?
  size.zero?
end
inspect() click to toggle source
# File lib/ninja_model/relation.rb, line 73
def inspect
  to_a.inspect
end
Also aliased as: inspect!
inspect!()
Alias for: inspect
new(*args, &block) click to toggle source
# File lib/ninja_model/relation.rb, line 36
def new(*args, &block)
  scoping { @klass.new(*args, &block) }
end
Also aliased as: build
scope_for_create() click to toggle source
# File lib/ninja_model/relation.rb, line 77
def scope_for_create
  Hash[@predicates.find_all { |w|
    w.respond_to?(:meth) && w.meth == :eq
  }.map { |where|
    [
      where.attribute,
      where.value
    ]
  }]
end
scoping() { || ... } click to toggle source
# File lib/ninja_model/relation.rb, line 51
def scoping
  @klass.scoped_methods << self
  begin
    yield
  ensure
    @klass.scoped_methods.pop
  end
end
size() click to toggle source
# File lib/ninja_model/relation.rb, line 60
def size
  to_a.length
end
to_a() click to toggle source
# File lib/ninja_model/relation.rb, line 42
def to_a
  @records ||= begin
    records = @klass.adapter.read(self)
    @loaded = true
    records
  end
end
Also aliased as: to_ary
to_ary()
Alias for: to_a

Protected Instance Methods

method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/ninja_model/relation.rb, line 90
def method_missing(method, *args, &block)
  if Array.method_defined?(method)
    to_a.send(method, *args, &block)
  elsif @klass.singleton_class.respond_to?(method)
    merge(@klass.singleton_class.send(method, *args, &block))
  elsif @klass.respond_to?(method)
    scoping { @klass.send(method, *args, &block) }
  else
    super
  end
end