class DataMapper::Resource::PersistenceState::Transient

a not-persisted/modifiable resource

Public Instance Methods

commit() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 21
def commit
  set_child_keys
  set_default_values
  return self unless valid_attributes?
  create_resource
  set_repository
  add_to_identity_map
  Clean.new(resource)
end
delete() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 17
def delete
  self
end
get(subject, *args) click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 7
def get(subject, *args)
  set_default_value(subject)
  super
end
original_attributes() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 35
def original_attributes
  @original_attributes ||= {}
end
rollback() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 31
def rollback
  self
end
set(subject, value) click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 12
def set(subject, value)
  track(subject)
  super
end

Private Instance Methods

create_resource() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 73
def create_resource
  repository.create([ resource ])
end
repository() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 41
def repository
  @repository ||= model.repository
end
set_default_value(subject) click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 51
def set_default_value(subject)
  return if subject.loaded?(resource) || !subject.default?
  default = typecast_default(subject, subject.default_for(resource))
  set(subject, default)
end
set_default_values() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 45
def set_default_values
  (properties | relationships).each do |subject|
    set_default_value(subject)
  end
end
set_repository() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 77
def set_repository
  resource.instance_variable_set(:@_repository, repository)
end
track(subject) click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 69
def track(subject)
  original_attributes[subject] = nil
end
typecast_default(subject, default) click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 57
def typecast_default(subject, default)
  return default unless subject.respond_to?(:typecast)

  typecasted_default = subject.send(:typecast, default)
  unless typecasted_default.eql?(default)
    warn "Automatic typecasting of default property values is deprecated " +
         "(#{default.inspect} was casted to #{typecasted_default.inspect}). " +
         "Specify the correct type for #{resource.class}."
  end
  typecasted_default
end
valid_attributes?() click to toggle source
# File lib/dm-core/resource/persistence_state/transient.rb, line 81
def valid_attributes?
  properties.all? do |property|
    value = get(property)
    property.serial? && value.nil? || property.valid?(value)
  end
end