class Sumac::RemoteReferences

Public Class Methods

new(connection) click to toggle source
# File lib/sumac/remote_references.rb, line 4
def initialize(connection)
  raise "argument 'connection' must be a Connection" unless connection.is_a?(Connection)
  @connection = connection
  @exposed_id_table = {}
  @transaction = []
end

Public Instance Methods

commit_transaction() click to toggle source
# File lib/sumac/remote_references.rb, line 40
def commit_transaction
  @transaction = nil
end
destroy() click to toggle source
# File lib/sumac/remote_references.rb, line 15
def destroy
  each { |reference| reference.destroy }
end
detach() click to toggle source
# File lib/sumac/remote_references.rb, line 11
def detach
  each { |reference| reference.detach }
end
from_id(exposed_id) click to toggle source
# File lib/sumac/remote_references.rb, line 19
def from_id(exposed_id)
  raise unless IDAllocator.valid?(exposed_id)
  reference = find(exposed_id) || create(exposed_id)
end
from_object(remote_object) click to toggle source
# File lib/sumac/remote_references.rb, line 24
def from_object(remote_object)
  raise unless remote_object.is_a?(RemoteObject)
  reference = remote_object.__remote_reference__
  raise StaleObjectError unless reference.callable?
  reference
end
remove(reference) click to toggle source
# File lib/sumac/remote_references.rb, line 31
def remove(reference)
  @exposed_id_table.delete(reference.exposed_id)
end
rollback_transaction() click to toggle source
# File lib/sumac/remote_references.rb, line 35
def rollback_transaction
  @transaction.each { |reference| reference.quiet_forget }
  @transaction = []
end
start_transaction() click to toggle source
# File lib/sumac/remote_references.rb, line 44
def start_transaction
  @transaction = []
end

Private Instance Methods

create(new_exposed_id) click to toggle source
# File lib/sumac/remote_references.rb, line 50
def create(new_exposed_id)
  new_reference = RemoteReference.new(@connection, new_exposed_id)
  @exposed_id_table[new_exposed_id] = new_reference
  @transaction << new_reference if @transaction
  new_reference
end
each() { |reference| ... } click to toggle source
# File lib/sumac/remote_references.rb, line 63
def each
  @exposed_id_table.values.each do |reference|
    yield(reference) unless reference.stale?
  end
end
find(exposed_id) click to toggle source
# File lib/sumac/remote_references.rb, line 57
def find(exposed_id)
  reference = @exposed_id_table[exposed_id]
  return if reference && reference.stale?
  reference
end