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

relation[R]
tracker[R]

Public Class Methods

build(relation, tracker) click to toggle source

@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
new(relation, tracker) click to toggle source

@api private

# File lib/rom/session/relation.rb, line 25
def initialize(relation, tracker)
  @relation, @tracker = relation, tracker
end

Public Instance Methods

delete(object) click to toggle source

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
dirty?(object) click to toggle source

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
identity(object) click to toggle source

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
new(*args, &block) click to toggle source

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
save(object) click to toggle source

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
state(object) click to toggle source

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
track(object) click to toggle source

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
tracking?(object) click to toggle source

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