class BelongsTo

Public Class Methods

new(name, object) click to toggle source
Calls superclass method Relation::new
# File lib/redisant/relations.rb, line 17
def initialize name, object
  super name, object
  @reverse_name = Inflector.pluralize @object.class.name.downcase
end

Public Instance Methods

destroy() click to toggle source
# File lib/redisant/relations.rb, line 22
def destroy
  set_owner nil, true
end
owner() click to toggle source
# File lib/redisant/relations.rb, line 37
def owner
  @owner ||= @class.find(owner_id) if owner_id
end
owner_id() click to toggle source

query

# File lib/redisant/relations.rb, line 33
def owner_id
  @owner_id ||= $redis.get redis_key
end
redis_key() click to toggle source

keys

# File lib/redisant/relations.rb, line 27
def redis_key
  raise Redisant::InvalidArgument.new('Cannot make key without id') unless @object && @object.id
  "#{@object.class_name}:#{@object.id}:belongs_to:#{@name}"
end
set_owner(item, reprocitate=true) click to toggle source
# File lib/redisant/relations.rb, line 41
def set_owner item, reprocitate=true
  if owner
    if owner.respond_to? @reverse_name
      owner.send(@reverse_name).remove @object, false if reprocitate
    end
  end
  if item
    raise Redisant::InvalidArgument.new('Wrong object type') unless item.class_name == @name
    raise Redisant::InvalidArgument.new('Missing id') unless item.id
    $redis.set redis_key, item.id
    @owner = item
    @owner_id = item.id
    if owner.respond_to? @reverse_name
      owner.send(@reverse_name).add @object, false if reprocitate
    end
  else
    $redis.del redis_key
    @owner_id = nil
    @owner = nil
  end
end