module RecordsRip::Model

Public Instance Methods

rest_in_place(&block) click to toggle source
# File lib/records_rip/model.rb, line 8
def rest_in_place(&block)
  model_class = self

  serializer =
      if block_given?
        block
      else
        lambda do |record|
          Hash[record.attributes.map {|k, v| [k, v]}]
        end
      end

  model_class.send(
      "before_destroy",
      lambda do |record|
        epitaph = serializer.call(record)
        ::RecordsRip::Tomb.create(item_id: record.id, item_type: record.class.name, epitaph: epitaph)
      end
  )

  define_singleton_method 'tomb' do |args = {}|
    ::RecordsRip::Tomb.where(item_type: model_class.to_s).where_epitaph(args)
  end
end