Module: MemoryModel::Base::Actionable

Extended by:
ActiveSupport::Concern
Included in:
MemoryModel::Base
Defined in:
lib/memory_model/base/actionable.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

VALID_IVARS =
[
  :@deleted,
  :@attributes,
  :@timestamp,
  :@version
]

Instance Method Summary collapse

Instance Method Details

#commitObject



19
20
21
22
23
24
# File 'lib/memory_model/base/actionable.rb', line 19

def commit
  @timestamp = Time.now
  @version   = SecureRandom.hex(6)
  self.class.insert self
  self
end

#deep_dupObject



50
51
52
# File 'lib/memory_model/base/actionable.rb', line 50

def deep_dup
  Marshal.load Marshal.dump self
end

#deleteObject



26
27
28
29
30
# File 'lib/memory_model/base/actionable.rb', line 26

def delete
  @deleted = true
  commit
  freeze
end

#deleted?Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/memory_model/base/actionable.rb', line 32

def deleted?
  !!@deleted
end

#deleted_atObject



36
37
38
# File 'lib/memory_model/base/actionable.rb', line 36

def deleted_at
  deleted? ? @timestamp : nil
end

#destroyObject



40
41
42
43
44
# File 'lib/memory_model/base/actionable.rb', line 40

def destroy
  run_callbacks :destroy do
    delete
  end
end

#dupObject



46
47
48
# File 'lib/memory_model/base/actionable.rb', line 46

def dup
  deep_dup
end

#freezeObject



54
55
56
57
58
59
60
61
# File 'lib/memory_model/base/actionable.rb', line 54

def freeze
  instance_variables.reject { |ivar| ivar.in? VALID_IVARS }.each do |ivar|
    remove_instance_variable ivar if instance_variable_defined?(ivar)
  end
  instance_variables.each { |ivar| instance_variable_get(ivar).freeze }
  deep_freeze
  super
end

#restoreObject



72
73
74
75
76
77
# File 'lib/memory_model/base/actionable.rb', line 72

def restore
  instance = frozen? ? self.dup : self
  instance.instance_variable_set :@deleted, false
  instance.save
  instance
end

#saveObject



63
64
65
66
67
68
69
70
# File 'lib/memory_model/base/actionable.rb', line 63

def save
  callback = persisted? ? :update : :create
  run_callbacks callback do
    run_callbacks :save do
      commit
    end
  end
end