soft_deletion 0.1.0 → 0.1.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.
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
+