class ROM::Session::Relation
Adds session-specific functionality on top of ROM’s relation.
A session relation builds a queue of state changes that will be committed when a session is flushed.
@api public
Attributes
Public Class Methods
@api private
# File lib/rom/session/relation.rb, line 19 def self.build(relation, tracker) mapper = Mapper.build(relation.mapper, tracker) new(relation.inject_mapper(mapper), tracker) end
@api private
# File lib/rom/session/relation.rb, line 25 def initialize(relation, tracker) @relation, @tracker = relation, tracker end
Public Instance Methods
Transient an object into a deleted state
@param [Object] an object to be deleted
@return [Session::Relation]
@api public
# File lib/rom/session/relation.rb, line 51 def delete(object) tracker.queue(state(object).delete(relation)) self end
Check if a tracked object is dirty
@param [Object] an object
@return [Boolean]
@api public
# File lib/rom/session/relation.rb, line 108 def dirty?(object) state(object).transient? || mapper.dirty?(object) end
Return object’s identity
@param [Object] an object
@return [Array]
@api public
# File lib/rom/session/relation.rb, line 74 def identity(object) mapper.identity(object) end
Build a new object instance and start tracking
@return [Object]
@api public
# File lib/rom/session/relation.rb, line 95 def new(*args, &block) object = mapper.new_object(*args, &block) track(object) object end
Transition an object into a saved state
Transient object’s state turns into Created Persisted object’s state turns into Updated
@param [Object] an object to be saved
@return [Session::Relation]
@api public
# File lib/rom/session/relation.rb, line 39 def save(object) tracker.queue(state(object).save(relation)) self end
Return current state of the tracked object
@param [Object] an object
@return [Session::State]
@api public
# File lib/rom/session/relation.rb, line 63 def state(object) tracker.fetch(object) end
Start tracking an object within this session
@param [Object] an object to be track
@return [Session::Relation]
@api public
# File lib/rom/session/relation.rb, line 85 def track(object) tracker.store_transient(object, mapper) self end
Check if an object is being tracked
@param [Object]
@return [Boolean]
@api public
# File lib/rom/session/relation.rb, line 119 def tracking?(object) tracker.include?(object) end