General

An aim for this gem is to provide an agile and comfortable way for Ruby developers to get rid of unnecessary data within their project databases. Weather I succeed with it or not is up to you. I will appreciate any advice or help.

System Configuration

In order to setup system configuration add somewhere in project following code

require 'undestroyable'

Undestroyable.config.setup do
  orm :active_record
end

After that you may activate undestroyable for specific model

class Country < ActiveRecord::Base
  undestroyable
end

Default strategy is: :column. You may overwrite system strategy by providing a block to undestroyable

class Country < ActiveRecord::Base
  undestroyable do
    strategy :dump
  end
end

That will save objects dump into 'dump' table. There is also a possibility for setting default system starategy:

Undestroyable.config.setup do
  orm :active_record
  strategy :table
  table_suffix :old
end

class Country < ActiveRecord::Base
  undestroyable
end

That will move deleted record from 'countries' table into 'countries_deleted'. In case 'countries_deleted' contains 'deleted_at' filed it will be updated. If, due to some reason, a different table name is required it can also be provided:

Undestroyable.config.setup do
  orm :active_record
  strategy :table
  table_suffix :old
end

class Country < ActiveRecord::Base
  undestroyable do
    table_name :scrap
  end
end

In that case, the record will be moved from 'countries' table into 'scrap_deleted'.

Options:

  • orm (ONLY FOR SYSTEM CONFIG) Specifies which orm is used by project
  • strategy Specifies which strategy should be used
  • table_name Same as model table.
  • table_suffix Default prefix is: deleted
  • full_table_name table_prefix + table_name + table_suffix.
  • connection Keeps connection information. NB! Compulsary for :database startegy.

Strategies

  • none Deletes record, as with usual destroy method.
  • column Updates deleted_at column of the record. This is default strategy, if undestroyable is activated for model.
  • table Move record into separate table
  • database Move record into separate table in remote database

Simple usage example:

class Bill < ActiveRecord::Base
  undestroyable
end

Complicated usage example:

class ConceptCat < Vehicle
  undstroyable do
    startegy :database
    connection { adapter: "sqlite3", dbfile: ":memory:"}
    table_name :scrap
    table_suffix :metalic
  end
end