soft_deletion 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Appraisals ADDED
@@ -0,0 +1,11 @@
1
+ appraise "rails2" do
2
+ version = "2.3.14"
3
+ gem 'activerecord', version
4
+ gem 'activesupport', version
5
+ end
6
+
7
+ appraise "rails3" do
8
+ version = "3.2.3"
9
+ gem 'activerecord', version
10
+ gem 'activesupport', version
11
+ end
data/Gemfile CHANGED
@@ -1,14 +1,11 @@
1
1
  source :rubygems
2
2
  gemspec
3
3
 
4
- version = '2.3.14' # hardcoded for now...
5
-
6
- group :development do
7
- gem 'activerecord', version
8
- gem 'activesupport', version
9
- gem 'rake'
10
- gem 'shoulda'
11
- gem 'mocha'
12
- gem 'sqlite3'
13
- gem 'mynyml-redgreen'
14
- end
4
+ gem 'appraisal'
5
+ gem 'activerecord'
6
+ gem 'activesupport'
7
+ gem 'rake'
8
+ gem 'shoulda'
9
+ gem 'mocha'
10
+ gem 'sqlite3'
11
+ gem 'mynyml-redgreen'
data/Gemfile.lock CHANGED
@@ -1,28 +1,45 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- soft_deletion (0.1.0)
4
+ soft_deletion (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: http://rubygems.org/
8
8
  specs:
9
- activerecord (2.3.14)
10
- activesupport (= 2.3.14)
11
- activesupport (2.3.14)
9
+ activemodel (3.2.3)
10
+ activesupport (= 3.2.3)
11
+ builder (~> 3.0.0)
12
+ activerecord (3.2.3)
13
+ activemodel (= 3.2.3)
14
+ activesupport (= 3.2.3)
15
+ arel (~> 3.0.2)
16
+ tzinfo (~> 0.3.29)
17
+ activesupport (3.2.3)
18
+ i18n (~> 0.6)
19
+ multi_json (~> 1.0)
20
+ appraisal (0.4.1)
21
+ bundler
22
+ rake
23
+ arel (3.0.2)
24
+ builder (3.0.0)
25
+ i18n (0.6.0)
12
26
  mocha (0.9.12)
27
+ multi_json (1.3.4)
13
28
  mynyml-redgreen (0.7.1)
14
29
  term-ansicolor (>= 1.0.4)
15
- rake (0.9.2)
30
+ rake (0.9.2.2)
16
31
  shoulda (2.10.3)
17
32
  sqlite3 (1.3.6)
18
33
  term-ansicolor (1.0.7)
34
+ tzinfo (0.3.33)
19
35
 
20
36
  PLATFORMS
21
37
  ruby
22
38
 
23
39
  DEPENDENCIES
24
- activerecord (= 2.3.14)
25
- activesupport (= 2.3.14)
40
+ activerecord
41
+ activesupport
42
+ appraisal
26
43
  mocha
27
44
  mynyml-redgreen
28
45
  rake
data/Rakefile CHANGED
@@ -1,6 +1,11 @@
1
+ require 'appraisal'
1
2
  require 'bundler/gem_tasks'
2
3
 
3
4
  task :default do
5
+ sh "bundle exec rake appraisal test"
6
+ end
7
+
8
+ task :test do
4
9
  sh "ruby -Itest test/soft_deletion_test.rb"
5
10
  end
6
11
 
@@ -0,0 +1,14 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "appraisal"
6
+ gem "rake"
7
+ gem "shoulda"
8
+ gem "mocha"
9
+ gem "sqlite3"
10
+ gem "mynyml-redgreen"
11
+ gem "activerecord", "2.3.14"
12
+ gem "activesupport", "2.3.14"
13
+
14
+ gemspec :path=>"../"
@@ -0,0 +1,35 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/soft_deletion
3
+ specs:
4
+ soft_deletion (0.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ activerecord (2.3.14)
10
+ activesupport (= 2.3.14)
11
+ activesupport (2.3.14)
12
+ appraisal (0.4.1)
13
+ bundler
14
+ rake
15
+ mocha (0.9.12)
16
+ mynyml-redgreen (0.7.1)
17
+ term-ansicolor (>= 1.0.4)
18
+ rake (0.9.2.2)
19
+ shoulda (2.10.3)
20
+ sqlite3 (1.3.6)
21
+ term-ansicolor (1.0.7)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ activerecord (= 2.3.14)
28
+ activesupport (= 2.3.14)
29
+ appraisal
30
+ mocha
31
+ mynyml-redgreen
32
+ rake
33
+ shoulda
34
+ soft_deletion!
35
+ sqlite3
@@ -0,0 +1,14 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source :rubygems
4
+
5
+ gem "appraisal"
6
+ gem "rake"
7
+ gem "shoulda"
8
+ gem "mocha"
9
+ gem "sqlite3"
10
+ gem "mynyml-redgreen"
11
+ gem "activerecord", "3.2.3"
12
+ gem "activesupport", "3.2.3"
13
+
14
+ gemspec :path=>"../"
@@ -0,0 +1,48 @@
1
+ PATH
2
+ remote: /Users/mgrosser/code/tools/soft_deletion
3
+ specs:
4
+ soft_deletion (0.1.0)
5
+
6
+ GEM
7
+ remote: http://rubygems.org/
8
+ specs:
9
+ activemodel (3.2.3)
10
+ activesupport (= 3.2.3)
11
+ builder (~> 3.0.0)
12
+ activerecord (3.2.3)
13
+ activemodel (= 3.2.3)
14
+ activesupport (= 3.2.3)
15
+ arel (~> 3.0.2)
16
+ tzinfo (~> 0.3.29)
17
+ activesupport (3.2.3)
18
+ i18n (~> 0.6)
19
+ multi_json (~> 1.0)
20
+ appraisal (0.4.1)
21
+ bundler
22
+ rake
23
+ arel (3.0.2)
24
+ builder (3.0.0)
25
+ i18n (0.6.0)
26
+ mocha (0.9.12)
27
+ multi_json (1.3.4)
28
+ mynyml-redgreen (0.7.1)
29
+ term-ansicolor (>= 1.0.4)
30
+ rake (0.9.2.2)
31
+ shoulda (2.10.3)
32
+ sqlite3 (1.3.6)
33
+ term-ansicolor (1.0.7)
34
+ tzinfo (0.3.33)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ activerecord (= 3.2.3)
41
+ activesupport (= 3.2.3)
42
+ appraisal
43
+ mocha
44
+ mynyml-redgreen
45
+ rake
46
+ shoulda
47
+ soft_deletion!
48
+ sqlite3
@@ -1,3 +1,3 @@
1
1
  module SoftDeletion
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
data/lib/soft_deletion.rb CHANGED
@@ -9,7 +9,18 @@ module SoftDeletion
9
9
  end
10
10
  base.extend(ClassMethods)
11
11
  base.send(:default_scope, :conditions => base.soft_delete_default_scope_conditions)
12
- base.define_callbacks :after_soft_delete
12
+
13
+ # backport after_soft_delete so we can safely upgrade to rails 3
14
+ if ActiveRecord::VERSION::MAJOR > 2
15
+ base.define_callbacks :soft_delete
16
+ class << base
17
+ def after_soft_delete(callback)
18
+ set_callback :soft_delete, :after, callback
19
+ end
20
+ end
21
+ else
22
+ base.define_callbacks :after_soft_delete
23
+ end
13
24
  end
14
25
 
15
26
  module ClassMethods
@@ -44,10 +55,14 @@ module SoftDeletion
44
55
 
45
56
  def soft_delete!
46
57
  self.class.transaction do
47
- mark_as_deleted
48
- soft_delete_dependencies.each(&:soft_delete!)
49
- save!
50
- run_callbacks(:after_soft_delete)
58
+ if ActiveRecord::VERSION::MAJOR > 2
59
+ run_callbacks :soft_delete do
60
+ _soft_delete!
61
+ end
62
+ else
63
+ _soft_delete!
64
+ run_callbacks :after_soft_delete
65
+ end
51
66
  end
52
67
  end
53
68
 
@@ -61,6 +76,12 @@ module SoftDeletion
61
76
 
62
77
  protected
63
78
 
79
+ def _soft_delete!
80
+ mark_as_deleted
81
+ soft_delete_dependencies.each(&:soft_delete!)
82
+ save!
83
+ end
84
+
64
85
  def soft_delete_dependencies
65
86
  self.class.soft_delete_dependents.map { |dependent| Dependency.new(self, dependent) }
66
87
  end
@@ -22,6 +22,16 @@ ActiveRecord::Schema.define(:version => 1) do
22
22
  end
23
23
  end
24
24
 
25
+ class ActiveRecord::Base
26
+ def self.silent_set_table_name(name)
27
+ if ActiveRecord::VERSION::MAJOR > 2
28
+ self.table_name = name
29
+ else
30
+ set_table_name name
31
+ end
32
+ end
33
+ end
34
+
25
35
  # setup models
26
36
  class Forum < ActiveRecord::Base
27
37
  include SoftDeletion
@@ -35,23 +45,31 @@ end
35
45
 
36
46
  class NoAssociationCategory < ActiveRecord::Base
37
47
  include SoftDeletion
38
- set_table_name 'categories'
48
+ silent_set_table_name 'categories'
39
49
  end
40
50
 
41
51
  # Independent association
42
52
  class IDACategory < ActiveRecord::Base
43
53
  include SoftDeletion
44
- set_table_name 'categories'
54
+ silent_set_table_name 'categories'
45
55
  has_many :forums, :dependent => :destroy, :foreign_key => :category_id
46
56
  end
47
57
 
48
58
  # Nullified dependent association
49
59
  class NDACategory < ActiveRecord::Base
50
60
  include SoftDeletion
51
- set_table_name 'categories'
61
+ silent_set_table_name 'categories'
52
62
  has_many :forums, :dependent => :destroy, :foreign_key => :category_id
53
63
  end
54
64
 
65
+ def clear_callbacks(model, callback)
66
+ if ActiveRecord::VERSION::MAJOR > 2
67
+ model.define_callbacks callback
68
+ else
69
+ model.class_eval{ instance_variable_set "@after_#{callback}_callbacks", nil }
70
+ end
71
+ end
72
+
55
73
  class SoftDeletionTest < ActiveSupport::TestCase
56
74
  def assert_deleted(resource)
57
75
  resource.class.with_deleted do
@@ -66,8 +84,7 @@ class SoftDeletionTest < ActiveSupport::TestCase
66
84
  end
67
85
 
68
86
  setup do
69
- # clear callbacks
70
- Category.class_eval{ @after_soft_delete_callbacks = nil }
87
+ clear_callbacks Category, :soft_delete
71
88
  end
72
89
 
73
90
  context ".after_soft_delete" do
metadata CHANGED
@@ -1,61 +1,79 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: soft_deletion
3
- version: !ruby/object:Gem::Version
4
- version: 0.1.0
3
+ version: !ruby/object:Gem::Version
4
+ hash: 25
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 1
10
+ version: 0.1.1
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - ZenDesk
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2012-05-02 00:00:00.000000000 Z
17
+
18
+ date: 2012-05-02 00:00:00 Z
13
19
  dependencies: []
20
+
14
21
  description:
15
22
  email: michael@grosser.it
16
23
  executables: []
24
+
17
25
  extensions: []
26
+
18
27
  extra_rdoc_files: []
19
- files:
28
+
29
+ files:
20
30
  - .travis.yml
31
+ - Appraisals
21
32
  - Gemfile
22
33
  - Gemfile.lock
23
34
  - Rakefile
24
35
  - Readme.md
36
+ - gemfiles/rails2.gemfile
37
+ - gemfiles/rails2.gemfile.lock
38
+ - gemfiles/rails3.gemfile
39
+ - gemfiles/rails3.gemfile.lock
25
40
  - lib/soft_deletion.rb
26
41
  - lib/soft_deletion/dependency.rb
27
42
  - lib/soft_deletion/version.rb
28
43
  - soft_deletion.gemspec
29
44
  - test/soft_deletion_test.rb
30
45
  homepage: http://github.com/grosser/soft_deletion
31
- licenses:
46
+ licenses:
32
47
  - MIT
33
48
  post_install_message:
34
49
  rdoc_options: []
35
- require_paths:
50
+
51
+ require_paths:
36
52
  - lib
37
- required_ruby_version: !ruby/object:Gem::Requirement
53
+ required_ruby_version: !ruby/object:Gem::Requirement
38
54
  none: false
39
- requirements:
40
- - - ! '>='
41
- - !ruby/object:Gem::Version
42
- version: '0'
43
- segments:
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ hash: 3
59
+ segments:
44
60
  - 0
45
- hash: 1139909322211905394
46
- required_rubygems_version: !ruby/object:Gem::Requirement
61
+ version: "0"
62
+ required_rubygems_version: !ruby/object:Gem::Requirement
47
63
  none: false
48
- requirements:
49
- - - ! '>='
50
- - !ruby/object:Gem::Version
51
- version: '0'
52
- segments:
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ hash: 3
68
+ segments:
53
69
  - 0
54
- hash: 1139909322211905394
70
+ version: "0"
55
71
  requirements: []
72
+
56
73
  rubyforge_project:
57
74
  rubygems_version: 1.8.24
58
75
  signing_key:
59
76
  specification_version: 3
60
77
  summary: Explicit soft deletion for ActiveRecord via deleted_at and default scope.
61
78
  test_files: []
79
+