acts_as_archive 0.3.1 → 0.3.2
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.
- data/.gitignore +9 -0
- data/LICENSE +18 -0
- data/README.md +112 -0
- data/Rakefile +90 -0
- data/acts_as_archive.gemspec +32 -0
- data/bin/acts_as_archive +2 -0
- data/config/externals.yml +12 -0
- data/config/gemsets.yml +10 -0
- data/config/gemspec.yml +17 -0
- data/init.rb +1 -0
- data/lib/acts_as_archive.rb +192 -0
- data/lib/acts_as_archive/gems.rb +154 -0
- data/rails/init.rb +1 -0
- data/spec/Rakefile +9 -0
- data/spec/acts_as_archive/gems_spec.rb +249 -0
- data/spec/acts_as_archive_spec.rb +113 -0
- data/spec/fixtures/config/database.yml.example +6 -0
- data/spec/fixtures/db/migrate/001_belongs_tos.rb +14 -0
- data/spec/fixtures/db/migrate/002_records.rb +15 -0
- data/spec/fixtures/db/migrate/003_has_ones.rb +15 -0
- data/spec/fixtures/db/migrate/004_has_manies.rb +15 -0
- data/spec/fixtures/db/migrate/005_has_many_through_throughs.rb +16 -0
- data/spec/fixtures/db/migrate/006_has_many_throughs.rb +14 -0
- data/spec/fixtures/db/migrate/007_has_one_through_throughs.rb +15 -0
- data/spec/fixtures/db/migrate/008_has_one_throughs.rb +15 -0
- data/spec/fixtures/frameworks.yml +36 -0
- data/spec/fixtures/frameworks/rails2/application_controller.rb +58 -0
- data/spec/fixtures/frameworks/rails2/database.yml +12 -0
- data/spec/fixtures/frameworks/rails2/init.rb +1 -0
- data/spec/fixtures/frameworks/rails2/routes.rb +46 -0
- data/spec/fixtures/frameworks/rails3/Gemfile +34 -0
- data/spec/fixtures/frameworks/rails3/application_controller.rb +51 -0
- data/spec/fixtures/frameworks/rails3/database.yml +12 -0
- data/spec/fixtures/frameworks/rails3/routes.rb +60 -0
- data/spec/fixtures/frameworks/sinatra/application.rb +58 -0
- data/spec/fixtures/gemsets.yml +9 -0
- data/spec/fixtures/gemspec.yml +15 -0
- data/spec/fixtures/helpers/spec_helper.rb +210 -0
- data/spec/fixtures/models/belongs_to.rb +6 -0
- data/spec/fixtures/models/has_many.rb +6 -0
- data/spec/fixtures/models/has_many_through.rb +7 -0
- data/spec/fixtures/models/has_many_through_through.rb +7 -0
- data/spec/fixtures/models/has_one.rb +6 -0
- data/spec/fixtures/models/has_one_through.rb +6 -0
- data/spec/fixtures/models/has_one_through_through.rb +7 -0
- data/spec/fixtures/models/record.rb +16 -0
- data/spec/run +27 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +73 -0
- metadata +96 -13
data/.gitignore
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
Copyright (c) 2010
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
4
|
+
this software and associated documentation files (the "Software"), to deal in
|
5
|
+
the Software without restriction, including without limitation the rights to
|
6
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
7
|
+
the Software, and to permit persons to whom the Software is furnished to do so,
|
8
|
+
subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in all
|
11
|
+
copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
15
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
16
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
17
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
18
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
ActsAsArchive
|
2
|
+
=============
|
3
|
+
|
4
|
+
Don't delete your records, move them to a different table.
|
5
|
+
|
6
|
+
Like <code>acts\_as\_paranoid</code>, but doesn't mess with your SQL queries.
|
7
|
+
|
8
|
+
Install
|
9
|
+
-------
|
10
|
+
|
11
|
+
<pre>
|
12
|
+
gem install acts_as_archive
|
13
|
+
</pre>
|
14
|
+
|
15
|
+
### Rails 2
|
16
|
+
|
17
|
+
#### config/environment.rb
|
18
|
+
|
19
|
+
<pre>
|
20
|
+
config.gem 'acts_as_archive'
|
21
|
+
</pre>
|
22
|
+
|
23
|
+
### Rails 3
|
24
|
+
|
25
|
+
#### Gemfile
|
26
|
+
|
27
|
+
<pre>
|
28
|
+
gem 'acts_as_archive'
|
29
|
+
</pre>
|
30
|
+
|
31
|
+
### Sinatra
|
32
|
+
|
33
|
+
<pre>
|
34
|
+
require 'acts_as_archive'
|
35
|
+
</pre>
|
36
|
+
|
37
|
+
Add to models
|
38
|
+
-------------
|
39
|
+
|
40
|
+
Add <code>acts\_as\_archive</code> to your models:
|
41
|
+
|
42
|
+
<pre>
|
43
|
+
class Article < ActiveRecord::Base
|
44
|
+
acts_as_archive
|
45
|
+
end
|
46
|
+
</pre>
|
47
|
+
|
48
|
+
Migrate
|
49
|
+
-------
|
50
|
+
|
51
|
+
Next time you run <code>rake db:migrate</code>, your archive tables will be created automatically.
|
52
|
+
|
53
|
+
That's it!
|
54
|
+
----------
|
55
|
+
|
56
|
+
Use <code>destroy</code>, <code>destroy\_all</code>, <code>delete</code>, and <code>delete_all</code> like you normally would.
|
57
|
+
|
58
|
+
Records move into the archive table instead of being destroyed.
|
59
|
+
|
60
|
+
What if my schema changes?
|
61
|
+
--------------------------
|
62
|
+
|
63
|
+
New migrations are automatically applied to the archive table.
|
64
|
+
|
65
|
+
No action is necessary on your part.
|
66
|
+
|
67
|
+
Query the archive
|
68
|
+
-----------------
|
69
|
+
|
70
|
+
Add <code>::Archive</code> to your ActiveRecord class:
|
71
|
+
|
72
|
+
<pre>
|
73
|
+
Article::Archive.first
|
74
|
+
</pre>
|
75
|
+
|
76
|
+
Delete records without archiving
|
77
|
+
--------------------------------
|
78
|
+
|
79
|
+
Use any of the destroy methods, but add a bang (!):
|
80
|
+
|
81
|
+
<pre>
|
82
|
+
Article::Archive.find(:first).destroy!
|
83
|
+
Article.delete_all!([ "id in (?)", [ 1, 2, 3 ] ])
|
84
|
+
</pre>
|
85
|
+
|
86
|
+
Restore from the archive
|
87
|
+
------------------------
|
88
|
+
|
89
|
+
Use any of the destroy/delete methods on the archived record to move it back to its original table:
|
90
|
+
|
91
|
+
<pre>
|
92
|
+
Article::Archive.first.destroy
|
93
|
+
Article::Archive.delete_all([ "id in (?)", [ 1, 2, 3 ] ])
|
94
|
+
</pre>
|
95
|
+
|
96
|
+
Magic columns
|
97
|
+
-------------
|
98
|
+
|
99
|
+
You will find an extra <code>deleted_at</code> datetime column on the archive table.
|
100
|
+
|
101
|
+
You may manually add a <code>restored_at</code> datetime column to the origin table if you wish to store restoration time as well.
|
102
|
+
|
103
|
+
Migrate from acts\_as\_paranoid
|
104
|
+
-------------------------------
|
105
|
+
|
106
|
+
Add this line to a migration, or run it via <code>script/console</code>:
|
107
|
+
|
108
|
+
<pre>
|
109
|
+
Article.migrate_from_acts_as_paranoid
|
110
|
+
</pre>
|
111
|
+
|
112
|
+
This copies all records with non-null <code>deleted_at</code> values to the archive.
|
data/Rakefile
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/lib/acts_as_archive/gems'
|
2
|
+
|
3
|
+
ActsAsArchive::Gems.activate %w(rake rspec)
|
4
|
+
|
5
|
+
require 'rake'
|
6
|
+
require 'spec/rake/spectask'
|
7
|
+
|
8
|
+
def gemspec
|
9
|
+
@gemspec ||= begin
|
10
|
+
file = File.expand_path('../acts_as_archive.gemspec', __FILE__)
|
11
|
+
eval(File.read(file), binding, file)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
if defined?(Spec::Rake::SpecTask)
|
16
|
+
desc "Run specs"
|
17
|
+
Spec::Rake::SpecTask.new do |t|
|
18
|
+
t.spec_files = FileList['spec/**/*_spec.rb']
|
19
|
+
t.spec_opts = %w(-fs --color)
|
20
|
+
t.warning = true
|
21
|
+
end
|
22
|
+
task :spec
|
23
|
+
task :default => :spec
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "Build gem(s)"
|
27
|
+
task :gem do
|
28
|
+
old_gemset = ENV['GEMSET']
|
29
|
+
root = File.expand_path('../', __FILE__)
|
30
|
+
pkg = "#{root}/pkg"
|
31
|
+
system "rm -Rf #{pkg}"
|
32
|
+
ActsAsArchive::Gems.gemset_names.each do |gemset|
|
33
|
+
ENV['GEMSET'] = gemset.to_s
|
34
|
+
system "cd #{root} && gem build acts_as_archive.gemspec"
|
35
|
+
system "mkdir -p #{pkg} && mv *.gem pkg"
|
36
|
+
end
|
37
|
+
ENV['GEMSET'] = old_gemset
|
38
|
+
end
|
39
|
+
|
40
|
+
namespace :gem do
|
41
|
+
desc "Install gem(s)"
|
42
|
+
task :install do
|
43
|
+
Rake::Task['gem'].invoke
|
44
|
+
Dir["#{File.dirname(__FILE__)}/pkg/*.gem"].each do |pkg|
|
45
|
+
system "gem install #{pkg} --no-ri --no-rdoc"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "Push gem(s)"
|
50
|
+
task :push do
|
51
|
+
Rake::Task['gem'].invoke
|
52
|
+
Dir["#{File.dirname(__FILE__)}/pkg/*.gem"].each do |pkg|
|
53
|
+
system "gem push #{pkg}"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
namespace :gems do
|
59
|
+
desc "Install gem dependencies (DEV=0 DOCS=0 GEMSPEC=default SUDO=0)"
|
60
|
+
task :install do
|
61
|
+
dev = ENV['DEV'] == '1'
|
62
|
+
docs = ENV['DOCS'] == '1' ? '' : '--no-ri --no-rdoc'
|
63
|
+
gemset = ENV['GEMSET']
|
64
|
+
sudo = ENV['SUDO'] == '1' ? 'sudo' : ''
|
65
|
+
|
66
|
+
ActsAsArchive::Gems.gemset = gemset if gemset
|
67
|
+
|
68
|
+
if dev
|
69
|
+
gems = ActsAsArchive::Gems.gemspec.development_dependencies
|
70
|
+
else
|
71
|
+
gems = ActsAsArchive::Gems.gemspec.dependencies
|
72
|
+
end
|
73
|
+
|
74
|
+
gems.each do |name|
|
75
|
+
name = name.to_s
|
76
|
+
version = ActsAsArchive::Gems.versions[name]
|
77
|
+
if Gem.source_index.find_name(name, version).empty?
|
78
|
+
version = version ? "-v #{version}" : ''
|
79
|
+
system "#{sudo} gem install #{name} #{version} #{docs}"
|
80
|
+
else
|
81
|
+
puts "already installed: #{name} #{version}"
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
desc "Validate the gemspec"
|
88
|
+
task :gemspec do
|
89
|
+
gemspec.validate
|
90
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
root = File.expand_path('../', __FILE__)
|
3
|
+
lib = "#{root}/lib"
|
4
|
+
$:.unshift lib unless $:.include?(lib)
|
5
|
+
|
6
|
+
require 'acts_as_archive/gems'
|
7
|
+
ActsAsArchive::Gems.gemset ||= ENV['GEMSET'] || :default
|
8
|
+
|
9
|
+
Gem::Specification.new do |s|
|
10
|
+
ActsAsArchive::Gems.gemspec.hash.each do |key, value|
|
11
|
+
if key == 'name' && ActsAsArchive::Gems.gemset != :default
|
12
|
+
s.name = "#{value}-#{ActsAsArchive::Gems.gemset}"
|
13
|
+
elsif key == 'summary' && ActsAsArchive::Gems.gemset == :solo
|
14
|
+
s.summary = value + " (no dependencies)"
|
15
|
+
elsif !%w(dependencies development_dependencies).include?(key)
|
16
|
+
s.send "#{key}=", value
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
ActsAsArchive::Gems.dependencies.each do |g|
|
21
|
+
s.add_dependency g.to_s, ActsAsArchive::Gems.versions[g]
|
22
|
+
end
|
23
|
+
|
24
|
+
ActsAsArchive::Gems.development_dependencies.each do |g|
|
25
|
+
s.add_development_dependency g.to_s, ActsAsArchive::Gems.versions[g]
|
26
|
+
end
|
27
|
+
|
28
|
+
s.executables = `cd #{root} && git ls-files -- {bin}/*`.split("\n").collect { |f| File.basename(f) }
|
29
|
+
s.files = `cd #{root} && git ls-files`.split("\n")
|
30
|
+
s.require_paths = %w(lib)
|
31
|
+
s.test_files = `cd #{root} && git ls-files -- {features,test,spec}/*`.split("\n")
|
32
|
+
end
|
data/bin/acts_as_archive
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
active_wrapper-solo:
|
2
|
+
repo: git@github.com:winton/active_wrapper.git
|
3
|
+
path: vendor
|
4
|
+
also_migrate:
|
5
|
+
repo: git@github.com:winton/also_migrate.git
|
6
|
+
path: vendor
|
7
|
+
framework_fixture:
|
8
|
+
repo: git@github.com:winton/framework_fixture.git
|
9
|
+
path: vendor
|
10
|
+
mover:
|
11
|
+
repo: git@github.com:winton/mover.git
|
12
|
+
path: vendor
|
data/config/gemsets.yml
ADDED
data/config/gemspec.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
name: acts_as_archive
|
2
|
+
version: 0.3.2
|
3
|
+
authors:
|
4
|
+
- Winton Welsh
|
5
|
+
email: mail@wintoni.us
|
6
|
+
homepage: http://github.com/winton/acts_as_archive
|
7
|
+
summary: Don't delete your records, move them to a different table
|
8
|
+
description: Don't delete your records, move them to a different table. Like acts_as_paranoid, but doesn't mess with your SQL queries.
|
9
|
+
dependencies:
|
10
|
+
- also_migrate
|
11
|
+
- mover
|
12
|
+
development_dependencies:
|
13
|
+
- active_wrapper-solo
|
14
|
+
- externals
|
15
|
+
- framework_fixture
|
16
|
+
- rake
|
17
|
+
- rspec
|
data/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/rails/init"
|
@@ -0,0 +1,192 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/acts_as_archive/gems'
|
2
|
+
|
3
|
+
ActsAsArchive::Gems.activate %w(also_migrate mover)
|
4
|
+
|
5
|
+
require 'also_migrate'
|
6
|
+
require 'mover'
|
7
|
+
|
8
|
+
$:.unshift File.dirname(__FILE__)
|
9
|
+
|
10
|
+
class ActsAsArchive
|
11
|
+
class <<self
|
12
|
+
|
13
|
+
attr_accessor :configuration, :disabled
|
14
|
+
|
15
|
+
def deprecate(msg)
|
16
|
+
if defined?(::ActiveSupport::Deprecation)
|
17
|
+
::ActiveSupport::Deprecation.warn msg
|
18
|
+
else
|
19
|
+
$stdout.puts msg
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def disable(&block)
|
24
|
+
@mutex ||= Mutex.new
|
25
|
+
@mutex.synchronize do
|
26
|
+
self.disabled = true
|
27
|
+
block.call
|
28
|
+
end
|
29
|
+
ensure
|
30
|
+
self.disabled = false
|
31
|
+
end
|
32
|
+
|
33
|
+
def find(from)
|
34
|
+
from = [ from ] unless from.is_a?(::Array)
|
35
|
+
(@configuration || []).select do |hash|
|
36
|
+
if from[0].is_a?(::String)
|
37
|
+
from.include?(hash[:from].table_name)
|
38
|
+
else
|
39
|
+
from.include?(hash[:from])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def move(config, where, merge_options={})
|
45
|
+
config[:to].each do |to|
|
46
|
+
options = config[:options].dup.merge(merge_options)
|
47
|
+
if options[:conditions]
|
48
|
+
options[:conditions] += " AND #{where}"
|
49
|
+
elsif where
|
50
|
+
options[:conditions] = where
|
51
|
+
end
|
52
|
+
config[:from].move_to(to, options)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def update(*args)
|
57
|
+
deprecate "ActsAsArchive.update is deprecated and no longer necessary."
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
module Base
|
62
|
+
def self.included(base)
|
63
|
+
unless base.included_modules.include?(InstanceMethods)
|
64
|
+
base.extend ClassMethods
|
65
|
+
base.send :include, InstanceMethods
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
module ClassMethods
|
70
|
+
def acts_as_archive(*args)
|
71
|
+
return unless ActsAsArchive.find(self).empty?
|
72
|
+
|
73
|
+
ActsAsArchive.configuration ||= []
|
74
|
+
ActsAsArchive.configuration << (config = { :from => self })
|
75
|
+
|
76
|
+
options = args.last.is_a?(::Hash) ? args.pop : {}
|
77
|
+
options[:copy] = true
|
78
|
+
|
79
|
+
if options[:archive]
|
80
|
+
options[:magic] = 'restored_at'
|
81
|
+
else
|
82
|
+
options[:magic] = 'deleted_at' if options[:magic].nil?
|
83
|
+
options[:add] = [[ options[:magic], :datetime ]]
|
84
|
+
options[:ignore] = options[:magic]
|
85
|
+
options[:subtract] = 'restored_at'
|
86
|
+
options[:timestamps] = false if options[:timestamps].nil?
|
87
|
+
|
88
|
+
if args.empty?
|
89
|
+
class_eval <<-EVAL
|
90
|
+
class Archive < ActiveRecord::Base
|
91
|
+
set_table_name "archived_#{self.table_name}"
|
92
|
+
end
|
93
|
+
EVAL
|
94
|
+
args << self::Archive
|
95
|
+
end
|
96
|
+
|
97
|
+
args.each do |klass|
|
98
|
+
klass.class_eval <<-EVAL
|
99
|
+
record_timestamps = #{options[:timestamps].inspect}
|
100
|
+
acts_as_archive(#{self}, :archive => true)
|
101
|
+
EVAL
|
102
|
+
self.reflect_on_all_associations.each do |association|
|
103
|
+
if !ActsAsArchive.find(association.klass).empty? && association.options[:dependent]
|
104
|
+
opts = association.options.dup
|
105
|
+
opts[:class_name] = "::#{association.class_name}::Archive"
|
106
|
+
opts[:foreign_key] = association.primary_key_name
|
107
|
+
klass.send association.macro, association.name, opts
|
108
|
+
end
|
109
|
+
end
|
110
|
+
unless options[:migrate] == false
|
111
|
+
self.also_migrate klass.table_name, options
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
config[:to] = args
|
117
|
+
config[:options] = options
|
118
|
+
end
|
119
|
+
|
120
|
+
def delete_all!(*args)
|
121
|
+
ActsAsArchive.disable { self.delete_all(*args) }
|
122
|
+
end
|
123
|
+
|
124
|
+
def destroy_all!(*args)
|
125
|
+
ActsAsArchive.disable { self.destroy_all(*args) }
|
126
|
+
end
|
127
|
+
|
128
|
+
def migrate_from_acts_as_paranoid
|
129
|
+
time = Benchmark.measure do
|
130
|
+
ActsAsArchive.find(self).each do |config|
|
131
|
+
config = config.dup
|
132
|
+
config[:options][:copy] = false
|
133
|
+
ActsAsArchive.move(
|
134
|
+
config,
|
135
|
+
"`#{config[:options][:magic]}` IS NOT NULL",
|
136
|
+
:migrate => true
|
137
|
+
)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
$stdout.puts "-- #{self}.migrate_from_acts_as_paranoid"
|
141
|
+
$stdout.puts " -> #{"%.4fs" % time.real}"
|
142
|
+
end
|
143
|
+
|
144
|
+
def restore_all(*args)
|
145
|
+
ActsAsArchive.deprecate "#{self}.restore_all is deprecated, please use #{self}.delete_all."
|
146
|
+
self.delete_all *args
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
module InstanceMethods
|
151
|
+
def delete!(*args)
|
152
|
+
ActsAsArchive.disable { self.delete(*args) }
|
153
|
+
end
|
154
|
+
|
155
|
+
def destroy!(*args)
|
156
|
+
ActsAsArchive.disable { self.destroy(*args) }
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
module DatabaseStatements
|
162
|
+
def self.included(base)
|
163
|
+
unless base.included_modules.include?(InstanceMethods)
|
164
|
+
base.send :include, InstanceMethods
|
165
|
+
base.class_eval do
|
166
|
+
unless method_defined?(:delete_sql_without_archive)
|
167
|
+
alias_method :delete_sql_without_archive, :delete_sql
|
168
|
+
alias_method :delete_sql, :delete_sql_with_archive
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
module InstanceMethods
|
175
|
+
def delete_sql_with_archive(sql, name = nil)
|
176
|
+
unless ActsAsArchive.disabled
|
177
|
+
from, where = /DELETE FROM (.+)/i.match(sql)[1].split(/\s+WHERE\s+/i, 2)
|
178
|
+
from = from.strip.gsub(/`/, '').split(/\s*,\s*/)
|
179
|
+
|
180
|
+
ActsAsArchive.find(from).each do |config|
|
181
|
+
ActsAsArchive.move(config, where)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
delete_sql_without_archive(sql, name)
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
end
|
190
|
+
|
191
|
+
::ActiveRecord::Base.send(:include, ::ActsAsArchive::Base)
|
192
|
+
::ActiveRecord::ConnectionAdapters::DatabaseStatements.send(:include, ::ActsAsArchive::DatabaseStatements)
|