Module: DataMapper::Has::Versions::InstanceMethods

Defined in:
lib/dm-has-versions/has/versions.rb

Instance Method Summary collapse

Instance Method Details

#latest?Boolean

Returns:

  • (Boolean)


93
94
95
# File 'lib/dm-has-versions/has/versions.rb', line 93

def latest?
  version == versions.size
end

#pending_version_attributesHash

Returns a hash of original values to be stored in the versions table when a new version is created. It is cleared after a version model is created.

Returns:

  • (Hash)


76
77
78
# File 'lib/dm-has-versions/has/versions.rb', line 76

def pending_version_attributes
  @pending_version_attributes ||= {}
end

#revertObject



128
129
130
# File 'lib/dm-has-versions/has/versions.rb', line 128

def revert
  revert_to(version) or raise RevertError
end

#revert_to(version) ⇒ Object



121
122
123
124
125
126
# File 'lib/dm-has-versions/has/versions.rb', line 121

def revert_to(version)
  transaction{revert_to!(version)}
  true
rescue RevertError
  false
end

#revert_to!(version) ⇒ Object

Raises:



113
114
115
116
117
118
119
# File 'lib/dm-has-versions/has/versions.rb', line 113

def revert_to!(version)
  self.version = version
  pending_version_attributes.clear
  raise RevertError unless save
  target_id = versions[version].id
  versions.all(:id.gte => target_id).destroy!
end

#versionObject



97
98
99
# File 'lib/dm-has-versions/has/versions.rb', line 97

def version
  @version ||= versions.size
end

#version=(version) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
# File 'lib/dm-has-versions/has/versions.rb', line 101

def version=(version)
  if target = versions.first(:offset => version)
    self.properties.each do |property|
      next if property.key?
      name = property.name
      self.attribute_set(name, target.attribute_get(name))
    end
    @version = version
  end
  !!target
end

#versionsCollection

Returns a collection of other versions of this resource. The versions are related on the models keys, and ordered by the version field.

Returns:

  • (Collection)


87
88
89
90
91
# File 'lib/dm-has-versions/has/versions.rb', line 87

def versions
  version = self.class.const_get("Version")
  original_key = "#{self.class.storage_name.singular}_id".intern
  version.all(original_key => self.id, :order => [:id.asc])
end