Module: Mover::Base::Record::InstanceMethods

Defined in:
lib/mover/record.rb

Instance Method Summary collapse

Instance Method Details

#move_fromObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/mover/record.rb', line 59

def move_from
  return unless self.respond_to?(:moved_from_class)
  # Move associations
  moved_from_class.reflect_on_all_associations.each do |association|
    if move_association?(association)
      klass = association.klass.send(:movable_class, self.class.movable_type)
      klass.find_each(:conditions => [ 'move_id = ?', self.move_id ]) do |record|
        record.move_from
      end
    end
  end
  # Move record
  conditions = "#{self.class.primary_key} = #{id}"
  moved_from_class.send(:execute_move, self.class, moved_from_class, conditions)
end

#move_to(type) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/mover/record.rb', line 75

def move_to(type)
  return if self.respond_to?(:moved_from_class)
  klass = self.class.send :movable_class, type
  if klass
    # Create movable_id
    if !self.movable_id && klass.column_names.include?('move_id')
      self.movable_id = Digest::MD5.hexdigest("#{self.class.name}#{self.id}")
    end
    # Move associations
    self.class.reflect_on_all_associations.each do |association|
      if move_association?(association)
        self.send(association.name).each do |record|
          record.movable_id = self.movable_id
          record.move_to(type)
        end
      end
    end
    # Move record
    me = self
    conditions = "#{self.class.primary_key} = #{id}"
    self.class.send(:execute_move, self.class, klass, conditions) do |insert, select|
      if me.movable_id
        insert << connection.quote_column_name('move_id')
        select << connection.quote(self.movable_id)
      end
    end
    self.movable_id = nil
  end
end