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