class ROM::Factory::Builder::Persistable

@api private

Attributes

builder[R]

@api private

relation[R]

@api private

Public Class Methods

new(builder, relation = builder.relation) click to toggle source

@api private

Calls superclass method
# File lib/rom/factory/builder/persistable.rb, line 17
def initialize(builder, relation = builder.relation)
  super(builder)
  @builder = builder
  @relation = relation
end

Public Instance Methods

create(*args) click to toggle source

@api private

# File lib/rom/factory/builder/persistable.rb, line 24
def create(*args)
  traits, attrs = builder.extract_tuple(args)

  tuple = tuple(*traits, attrs)
  validate_keys(traits, attrs)
  persisted = persist(tuple)

  if tuple_evaluator.has_associations?(traits)
    tuple_evaluator.persist_associations(tuple, persisted, traits)

    pk = primary_key_names.map { |key| persisted[key] }

    relation.by_pk(*pk).combine(*tuple_evaluator.assoc_names(traits)).first
  else
    persisted
  end
end

Private Instance Methods

persist(attrs) click to toggle source

@api private

# File lib/rom/factory/builder/persistable.rb, line 45
def persist(attrs)
  relation.with(auto_struct: !tuple_evaluator.has_associations?).command(:create).call(attrs)
end
primary_key_names() click to toggle source

@api private

# File lib/rom/factory/builder/persistable.rb, line 50
def primary_key_names
  relation.schema.primary_key.map(&:name)
end