Module: Vidibus::Versioning::Mongoid

Extended by:
ActiveSupport::Concern
Defined in:
lib/vidibus/versioning/mongoid.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#deleteObject



125
126
127
# File 'lib/vidibus/versioning/mongoid.rb', line 125

def delete
  super if remove_version(:delete) == nil
end

#destroyObject



129
130
131
# File 'lib/vidibus/versioning/mongoid.rb', line 129

def destroy
  super if remove_version(:destroy) == nil
end

#migrate!(number = nil) ⇒ Object

Applies attributes of wanted version on self. Stores current attributes in a new version.



81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/vidibus/versioning/mongoid.rb', line 81

def migrate!(number = nil)
  unless number || version_cache.wanted_version_number
    raise(MigrationError, 'no version given')
  end
  if number && number != version_cache.wanted_version_number
    version!(number)
  end
  if version_cache.self_version
    raise(MigrationError, 'cannot migrate to current version')
  end

  set_original_version_obj

  self.attributes = version_attributes
  self.version_number = version_cache.wanted_version_number
  save!
end

#new_version?Boolean

Returns true if version requested is a new one.

Returns:

  • (Boolean)


146
147
148
# File 'lib/vidibus/versioning/mongoid.rb', line 146

def new_version?
  version_obj and version_obj.new_record?
end

#redo!Object

Calls #version!(:next) and migrate!



106
107
108
109
# File 'lib/vidibus/versioning/mongoid.rb', line 106

def redo!
  version!(:next)
  migrate!
end

#reload_version(*args) ⇒ Object

Reloads this record and applies version attributes.



134
135
136
137
138
# File 'lib/vidibus/versioning/mongoid.rb', line 134

def reload_version(*args)
  reloaded_self = self.reload
  reloaded_self.version(*version_cache.version_args) if version_cache.version_args
  reloaded_self
end

#save(*args) ⇒ Object

Saves the record and handles version persistence.



112
113
114
115
116
# File 'lib/vidibus/versioning/mongoid.rb', line 112

def save(*args)
  return false if invalid?
  saved = persist_version
  (saved == nil) ? super(*args) : saved
end

#save!(*args) ⇒ Object

Raises a validation error if saving fails.



119
120
121
122
123
# File 'lib/vidibus/versioning/mongoid.rb', line 119

def save!(*args)
  unless save(*args)
    raise(::Mongoid::Errors::Validations, self)
  end
end

#undo!Object

Calls #version!(:previous) and migrate!



100
101
102
103
# File 'lib/vidibus/versioning/mongoid.rb', line 100

def undo!
  version!(:previous)
  migrate!
end

#version(*args) ⇒ Object

Returns a copy of this object with versioned attributes applied.

Valid arguments are:

:new       returns a new version of self
:next      returns the next version of self, may be new as well
:previous  returns the previous version of self
48         returns version 48 of self


54
55
56
57
58
# File 'lib/vidibus/versioning/mongoid.rb', line 54

def version(*args)
  self.class.find(_id).tap do |copy|
    copy.apply_version!(*args)
  end
end

#version!(*args) ⇒ Object

Applies versioned attributes on this object. Returns nil. For valid arguments, see #version.



63
64
65
# File 'lib/vidibus/versioning/mongoid.rb', line 63

def version!(*args)
  self.apply_version!(*args)
end

#version?(number) ⇒ Boolean

Returns true if version number exists. Argument must be an integer.

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


70
71
72
73
74
75
76
77
# File 'lib/vidibus/versioning/mongoid.rb', line 70

def version?(number)
  raise ArgumentError unless number.is_a?(Integer)
  if version_number == number
    true
  else
    !!versions.where(:number => number).first
  end
end

#version_objectObject

Returns the currently set version object.



141
142
143
# File 'lib/vidibus/versioning/mongoid.rb', line 141

def version_object
  version_cache.version_obj
end