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
Calls superclass method
DataMapper::Resource::PersistenceState#get
# 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
Calls superclass method
DataMapper::Resource::PersistenceState#set
# 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