undestroy 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in undestroy.gemspec
4
+ gemspec
5
+
6
+ gem 'rake'
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Travis Petticrew
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,92 @@
1
+ # Undestroy
2
+
3
+ Allow copying records to alternate table before destroying an
4
+ ActiveRecord model for archiving purposes. Data will be mapped
5
+ one-to-one to the archive table schema. Additional fields can also be
6
+ configured for additional tracking information. Archive table schema
7
+ will automatically be updated when the parent model's table is migrated
8
+ through Rails.
9
+
10
+ ## Installation
11
+
12
+ Add this line to your application's Gemfile:
13
+
14
+ gem 'undestroy'
15
+
16
+ And then execute:
17
+
18
+ $ bundle
19
+
20
+ Or install it yourself as:
21
+
22
+ $ gem install undestroy
23
+
24
+ ## Usage
25
+
26
+ To activate Undestroy on a model, simply call the `undestroyable` method
27
+ on the class like so:
28
+
29
+ class Person < ActiveRecord::Base
30
+ undestroyable
31
+ end
32
+
33
+ This method also can accept an options hash to further customize
34
+ Undestroy to your needs.
35
+
36
+ * `:table_name`: use this table for archiving
37
+ * `:class_name`: use this AR model for archiving
38
+ * `:connection`: use this connection for archiving
39
+ * `:fields`: Specify a hash of fields to values for additional fields
40
+ you would like to include on the archive table -- lambdas will be
41
+ called with the instance being destroyed and returned value will be
42
+ used (default: `{ :deleted_at => proc { |instance| Time.now } }`).
43
+ * `:migrate`: Should Undestroy migrate the archive table together with
44
+ this model's table (default: true)
45
+
46
+ $ person = Person.find(1)
47
+ $ person.destroy
48
+ # => Inserts person data into archive_people table
49
+ # => Deletes person data from people table
50
+
51
+ ## Stucture
52
+
53
+ This is the basic class structure of this gem. It was designed to be
54
+ modular and easy to tailor to your specific needs.
55
+
56
+ ### `Archive`
57
+
58
+ Map the source model's schema to the archive model's and initiate the
59
+ transfer through `Transfer`. When `run` is called the Transfer is
60
+ initialized with a primitive hash mapping the schema to the archive
61
+ table.
62
+
63
+ Initialized with:
64
+
65
+ * `:config`: Instance of Undestroy::Config for this model
66
+ * `:source`: Instance of the source model
67
+
68
+ ### `Restore`
69
+
70
+ Map the archive model's schema to the source model's and initiate the
71
+ transfer through `Transfer`
72
+
73
+ Initialized with:
74
+
75
+ * `:config`: Instance of Undestroy::Config for this model
76
+ * `:archive`: Instance of the archived model
77
+
78
+ ### `Transfer`
79
+
80
+ Handles the actual movement of data from one table to another. This
81
+ class simply uses the AR interface to create and delete the appropriate
82
+ records. This can be subclassed to provide enhanced performance or
83
+ customized behavior for your situation.
84
+
85
+ ## Contributing
86
+
87
+ 1. Fork it
88
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
89
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
90
+ 4. Push to the branch (`git push origin my-new-feature`)
91
+ 5. Create new Pull Request
92
+
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env rake
2
+
3
+ require 'assert/rake_tasks'
4
+ Assert::RakeTasks.for(:test)
5
+
6
+ require "bundler/gem_tasks"
7
+
@@ -0,0 +1,5 @@
1
+ require "undestroy/version"
2
+
3
+ module Undestroy
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,3 @@
1
+ module Undestroy
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,2 @@
1
+ require 'assert'
2
+
@@ -0,0 +1,10 @@
1
+ require 'assert'
2
+
3
+ class UndestroyTest < Assert::Context
4
+
5
+ should "write tests" do
6
+ assert true
7
+ end
8
+
9
+ end
10
+
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/undestroy/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Travis Petticrew"]
6
+ gem.email = ["bobo@petticrew.net"]
7
+ gem.description = %q{Move AR records to alternate table on destroy and allow restoring.}
8
+ gem.summary = %q{Allow AR records to be undestroyed by archiving their data in a seperate table when destroying the original data}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "undestroy"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = Undestroy::VERSION
17
+
18
+ gem.add_dependency 'activerecord', '~>3.0'
19
+
20
+ gem.add_development_dependency 'assert', '~>0.7'
21
+ gem.add_development_dependency 'assert-rails', '~>0.2'
22
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: undestroy
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Travis Petticrew
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-03-12 00:00:00 Z
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ type: :runtime
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ~>
27
+ - !ruby/object:Gem::Version
28
+ hash: 7
29
+ segments:
30
+ - 3
31
+ - 0
32
+ version: "3.0"
33
+ name: activerecord
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ type: :development
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ hash: 5
44
+ segments:
45
+ - 0
46
+ - 7
47
+ version: "0.7"
48
+ name: assert
49
+ version_requirements: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ type: :development
52
+ prerelease: false
53
+ requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 15
59
+ segments:
60
+ - 0
61
+ - 2
62
+ version: "0.2"
63
+ name: assert-rails
64
+ version_requirements: *id003
65
+ description: Move AR records to alternate table on destroy and allow restoring.
66
+ email:
67
+ - bobo@petticrew.net
68
+ executables: []
69
+
70
+ extensions: []
71
+
72
+ extra_rdoc_files: []
73
+
74
+ files:
75
+ - .gitignore
76
+ - Gemfile
77
+ - LICENSE
78
+ - README.md
79
+ - Rakefile
80
+ - lib/undestroy.rb
81
+ - lib/undestroy/version.rb
82
+ - test/helper.rb
83
+ - test/unit/undestroy_test.rb
84
+ - undestroy.gemspec
85
+ homepage: ""
86
+ licenses: []
87
+
88
+ post_install_message:
89
+ rdoc_options: []
90
+
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ hash: 3
108
+ segments:
109
+ - 0
110
+ version: "0"
111
+ requirements: []
112
+
113
+ rubyforge_project:
114
+ rubygems_version: 1.8.17
115
+ signing_key:
116
+ specification_version: 3
117
+ summary: Allow AR records to be undestroyed by archiving their data in a seperate table when destroying the original data
118
+ test_files:
119
+ - test/helper.rb
120
+ - test/unit/undestroy_test.rb