Class: Version

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/paper_trail/version.rb

Instance Method Summary collapse

Instance Method Details

#indexObject



66
67
68
69
# File 'lib/paper_trail/version.rb', line 66

def index
  Version.all(:conditions => ["item_type = ? AND item_id = ?", item_type, item_id],
              :order => 'id ASC').index(self)
end

#nextObject



56
57
58
59
# File 'lib/paper_trail/version.rb', line 56

def next
  Version.first :conditions => ["id > ? AND item_type = ? AND item_id = ?", id, item_type, item_id],
                :order => 'id ASC'
end

#previousObject



61
62
63
64
# File 'lib/paper_trail/version.rb', line 61

def previous
  Version.first :conditions => ["id < ? AND item_type = ? AND item_id = ?", id, item_type, item_id],
                :order => 'id DESC'
end

#reifyObject



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/paper_trail/version.rb', line 17

def reify
  unless object.nil?
    # Attributes

    attrs = YAML::load object

    # Normally a polymorphic belongs_to relationship allows us
    # to get the object we belong to by calling, in this case,
    # +item+.  However this returns nil if +item+ has been
    # destroyed, and we need to be able to retrieve destroyed
    # objects.
    #
    # In this situation we constantize the +item_type+ to get hold of
    # the class...except when the stored object's attributes
    # include a +type+ key.  If this is the case, the object
    # we belong to is using single table inheritance and the
    # +item_type+ will be the base class, not the actual subclass.
    # If +type+ is present but empty, the class is the base class.

    if item
      model = item
    else
      class_name = attrs['type'].blank? ? item_type : attrs['type']
      klass = class_name.constantize
      model = klass.new
    end

    attrs.each do |k, v|
      begin
        model.send "#{k}=", v
      rescue NoMethodError
        RAILS_DEFAULT_LOGGER.warn "Attribute #{k} does not exist on #{item_type} (Version id: #{id})."
      end
    end

    model
  end
end