delete_paranoid 2.0.0 → 3.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6364ec095e36d9f9111d01ad59cea774ec4f28cc
4
- data.tar.gz: e007bafd8d2968d9767d8e24c23ae7cfc9f7cfb3
3
+ metadata.gz: 36e825a8483cb73e7f0beb5b20b332132e613379
4
+ data.tar.gz: ee1dd296733937f19f6a6d2b439c70ff1a5eda23
5
5
  SHA512:
6
- metadata.gz: 6bd18535e8ee59e98a727d1eb6eb7012894f9371db76c079073d237286d473088c0502237033263f093be0c7460c0332b619085dc2fa690ede6eb63183aaf2d2
7
- data.tar.gz: 71df17e6558d76b208aa27547e979f09473fe80edc813967eb0ccfff5c0cffa08de254379224952ca0da94cf68335be5d8e0f0ca67d2992969ef86da00ebccae
6
+ metadata.gz: 310386ee0526f9270ae1ce2dc73656f31ec2cf422feca673c16f6e3d0f13c994f5c9fcdd8a68d9cb78ab1a0d0c0863042ca871a417adde5999e45176906aef3f
7
+ data.tar.gz: 4ee2d7def7f6c91fc2ed0fb6e6e9f04452571833239a936e8abc80173e11b778a48de594ec427618375a4cd38efd933305fbc576a6b32aac5520c010e0152f3c
@@ -0,0 +1 @@
1
+ delete_paranoid
@@ -0,0 +1 @@
1
+ 2.3.1
@@ -1,7 +1,5 @@
1
1
  rvm:
2
- - 1.9.3
2
+ - 2.3.1
3
3
  env:
4
- - "activerecord=3.1.0"
5
- - "activerecord=3.2.0"
6
- - "activerecord=4.0.0"
7
- - "activerecord=4.1.0.beta1"
4
+ - "activerecord=4.2.7.1"
5
+ - "activerecord=5.0.0.1"
@@ -14,16 +14,8 @@ Gem::Specification.new do |s|
14
14
 
15
15
  s.rubyforge_project = "delete_paranoid"
16
16
 
17
- %w[activerecord].each do |lib|
18
- dep = case ENV[lib]
19
- when 'stable', nil then nil
20
- when /beta/ then ["= " + ENV[lib]]
21
- when /(\d+\.)+\d+/ then ["~> " + ENV[lib]]
22
- else [">= 3.0"]
23
- end
24
- s.add_runtime_dependency(lib, dep)
25
- end
26
- s.add_development_dependency(%q<rspec>, [">= 0"])
17
+ s.add_runtime_dependency(%q<activerecord>, [">= 4.2.7.1"])
18
+ s.add_development_dependency(%q<rspec>, [">= 3.5"])
27
19
  s.add_development_dependency(%q<bundler>, [">= 0"])
28
20
  s.add_development_dependency(%q<sqlite3-ruby>, ["~> 1.3.2"])
29
21
  s.add_development_dependency(%q<rake>, [">= 0.9.2.2"])
@@ -48,6 +48,15 @@ module DeleteParanoid
48
48
  # permanently delete this specific instance from the database
49
49
  def destroy_permanently
50
50
  result = destroy
51
+ return result unless result
52
+ self.class.with_deleted do
53
+ self.class.delete_permanently self.id
54
+ end
55
+ result
56
+ end
57
+ # permanently delete this specific instance from the database, using the AR #destroy! method
58
+ def destroy_permanently!
59
+ result = destroy!
51
60
  self.class.with_deleted do
52
61
  self.class.delete_permanently self.id
53
62
  end
@@ -1,3 +1,3 @@
1
1
  module DeleteParanoid
2
- VERSION = "2.0.0"
2
+ VERSION = "3.0.0"
3
3
  end
@@ -23,8 +23,14 @@ end
23
23
  class Blog < ActiveRecord::Base
24
24
  has_many :comments, :dependent => :destroy
25
25
  has_many :links, :dependent => :destroy
26
+ before_destroy :before_destroy_callback
26
27
  acts_as_paranoid
27
28
  include CallbackMatcher::ActiveRecordHooks
29
+
30
+ private
31
+
32
+ def before_destroy_callback
33
+ end
28
34
  end
29
35
 
30
36
  class Comment < ActiveRecord::Base
@@ -4,28 +4,28 @@ describe DeleteParanoid do
4
4
 
5
5
  shared_examples_for "soft-deleted" do
6
6
  it do
7
- subject.class.where(:id => subject.id).should_not exist
7
+ expect(subject.class.where(:id => subject.id)).not_to exist
8
8
  subject.class.with_deleted do
9
- subject.class.where(:id => subject.id).should exist
9
+ expect(subject.class.where(:id => subject.id)).to exist
10
10
  end
11
11
  end
12
12
  end
13
13
 
14
14
  shared_examples_for "permanently-deleted" do
15
15
  it do
16
- subject.class.where(:id => subject.id).should_not exist
16
+ expect(subject.class.where(:id => subject.id)).not_to exist
17
17
  subject.class.with_deleted do
18
- subject.class.where(:id => subject.id).should_not exist
18
+ expect(subject.class.where(:id => subject.id)).not_to exist
19
19
  end
20
20
  end
21
21
  end
22
22
 
23
23
  context 'with non-paranoid activerecord class' do
24
- it { Link.should_not be_paranoid }
24
+ it { expect(Link).not_to be_paranoid }
25
25
  end
26
26
 
27
27
  context 'with paranoid activerecord class' do
28
- it { Blog.should be_paranoid }
28
+ it { expect(Blog).to be_paranoid }
29
29
  end
30
30
 
31
31
  let!(:blog) { Blog.create! :title => 'foo' }
@@ -35,10 +35,10 @@ describe DeleteParanoid do
35
35
  context 'when destroying instance with instance.destroy' do
36
36
  before { blog.destroy }
37
37
  it do
38
- should be_destroyed
39
- should be_frozen
40
- should trigger_callbacks_for :destroy
41
- should_not trigger_callbacks_for :update
38
+ is_expected.to be_destroyed
39
+ is_expected.to be_frozen
40
+ is_expected.to trigger_callbacks_for :destroy
41
+ is_expected.to_not trigger_callbacks_for :update
42
42
  end
43
43
  it_behaves_like "soft-deleted"
44
44
  end
@@ -61,16 +61,44 @@ describe DeleteParanoid do
61
61
  before { blog.destroy_permanently }
62
62
  it_behaves_like "permanently-deleted"
63
63
  it do
64
- should trigger_callbacks_for :destroy
65
- should_not trigger_callbacks_for :update
64
+ is_expected.to trigger_callbacks_for :destroy
65
+ is_expected.not_to trigger_callbacks_for :update
66
+ end
67
+ end
68
+ context 'when destroying instance with instance.destroy_permanently and a before_destroy callback returns false' do
69
+ before do
70
+ expect(blog).to receive(:before_destroy_callback).and_return false
71
+ blog.destroy_permanently
72
+ end
73
+ it do
74
+ is_expected.not_to trigger_callbacks_for :update
75
+ expect(Blog.where(:id => blog.id)).to exist
76
+ end
77
+ end
78
+ context 'when destroying instance with instance.destroy_permanently!' do
79
+ before { blog.destroy_permanently! }
80
+ it_behaves_like "permanently-deleted"
81
+ it do
82
+ is_expected.to trigger_callbacks_for :destroy
83
+ is_expected.not_to trigger_callbacks_for :update
84
+ end
85
+ end
86
+ context 'when destroying instance with instance.destroy_permanently! and a before_destroy callback returns false' do
87
+ before { expect(blog).to receive(:before_destroy_callback).and_return false }
88
+ it do
89
+ expect do
90
+ blog.destroy_permanently!
91
+ end.to raise_error ActiveRecord::RecordNotDestroyed
92
+
93
+ expect(Blog.where(:id => blog.id)).to exist
66
94
  end
67
95
  end
68
96
  context 'when destroying instance with instance.delete_permanently' do
69
97
  before { blog.delete_permanently }
70
98
  it_behaves_like "permanently-deleted"
71
99
  it do
72
- should_not trigger_callbacks_for :destroy
73
- should_not trigger_callbacks_for :update
100
+ is_expected.not_to trigger_callbacks_for :destroy
101
+ is_expected.not_to trigger_callbacks_for :update
74
102
  end
75
103
  end
76
104
  end
@@ -82,19 +110,19 @@ describe DeleteParanoid do
82
110
  context 'when destroying parent paranoid instance with destroy' do
83
111
  before { blog.destroy }
84
112
  it do
85
- should be_destroyed
86
- should be_frozen
87
- should trigger_callbacks_for :destroy
88
- should_not trigger_callbacks_for :update
113
+ is_expected.to be_destroyed
114
+ is_expected.to be_frozen
115
+ is_expected.to trigger_callbacks_for :destroy
116
+ is_expected.not_to trigger_callbacks_for :update
89
117
  end
90
118
  end
91
119
  context 'when destroying parent paranoid instance with delete_all_permanently' do
92
120
  before { Blog.where(:id => blog.id).delete_all_permanently }
93
121
  it do
94
- should_not be_destroyed
95
- should_not be_frozen
96
- should_not trigger_callbacks_for :destroy
97
- Comment.where(:id => comment.id).should exist
122
+ is_expected.not_to be_destroyed
123
+ is_expected.not_to be_frozen
124
+ is_expected.not_to trigger_callbacks_for :destroy
125
+ expect(Comment.where(:id => comment.id)).to exist
98
126
  end
99
127
  end
100
128
  end
@@ -106,21 +134,21 @@ describe DeleteParanoid do
106
134
  context 'when destroying parent paranoid instance with destroy' do
107
135
  before { blog.destroy }
108
136
  it do
109
- should be_destroyed
110
- should be_frozen
111
- should trigger_callbacks_for :destroy
112
- should_not trigger_callbacks_for :update
113
- Link.where(:id => link.id).should_not exist
137
+ is_expected.to be_destroyed
138
+ is_expected.to be_frozen
139
+ is_expected.to trigger_callbacks_for :destroy
140
+ is_expected.not_to trigger_callbacks_for :update
141
+ expect(Link.where(:id => link.id)).not_to exist
114
142
  end
115
143
  end
116
144
 
117
145
  context 'when destroying parent paranoid instance with delete_all_permanently' do
118
146
  before { Blog.where(:id => blog.id).delete_all_permanently }
119
147
  it do
120
- should_not be_destroyed
121
- should_not be_frozen
122
- should_not trigger_callbacks_for :destroy
123
- Link.where(:id => link.id).should exist
148
+ is_expected.not_to be_destroyed
149
+ is_expected.not_to be_frozen
150
+ is_expected.not_to trigger_callbacks_for :destroy
151
+ expect(Link.where(:id => link.id)).to exist
124
152
  end
125
153
  end
126
154
  end
@@ -4,7 +4,6 @@ class CallbackMatcher
4
4
  CALLBACK_TYPES = [:create, :update, :destroy, :save, :commit]
5
5
 
6
6
  module ActiveRecordHooks
7
-
8
7
  def self.included(base)
9
8
  base.class_eval do
10
9
  class_attribute :callback_tester_attrs
@@ -24,65 +23,47 @@ class CallbackMatcher
24
23
  }
25
24
  end
26
25
  end
27
- alias_method_chain :initialize, :callback_init
28
- end
29
- end
30
-
31
- def initialize_with_callback_init(*args)
32
- reset_callback_flags!
33
- initialize_without_callback_init(*args)
34
- end
35
-
36
- def reset_callback_flags!
37
- self.class.callback_tester_attrs.each do |attr|
38
- send("#{attr}=", false)
39
26
  end
40
27
  end
41
-
42
28
  end
43
-
44
29
  end
45
30
 
46
31
  require 'rspec/matchers'
47
32
 
48
- RSpec::Matchers.define :trigger_callbacks_for do |types|
49
-
50
- check_for_match = ->(model_instance, types) {
33
+ RSpec::Matchers.define :trigger_callbacks_for do |expected_callback_type|
34
+ def check_for_match(model_instance, expected_callback_type)
51
35
  @called = []
52
36
  @not_called = []
53
- Array.wrap(types).each do |ct|
54
- CallbackMatcher::CALLBACK_EVENTS.each do |ce|
55
- callback_name = "#{ce}_#{ct}"
56
- result = model_instance.send("called_#{callback_name}".to_sym)
57
- @called << callback_name if result
58
- @not_called << callback_name unless result
59
- end
37
+ CallbackMatcher::CALLBACK_EVENTS.each do |ce|
38
+ callback_name = "#{ce}_#{expected_callback_type}"
39
+ result = model_instance.send("called_#{callback_name}".to_sym)
40
+ @called << callback_name if result
41
+ @not_called << callback_name unless result
60
42
  end
61
- }
43
+ end
62
44
 
63
- match_for_should do |model_instance|
64
- check_for_match.call(model_instance, types)
45
+ match do |model_instance|
46
+ check_for_match(model_instance, expected_callback_type)
65
47
  result = true
66
48
  result = false unless @called.present?
67
49
  result = false if @not_called.present?
68
50
  result
69
51
  end
70
52
 
71
- match_for_should_not do |model_instance|
72
- check_for_match.call(model_instance, types)
53
+ match_when_negated do |model_instance|
54
+ check_for_match(model_instance, expected_callback_type)
73
55
  result = true
74
56
  result = false unless @not_called.present?
75
57
  result = false if @called.present?
76
58
  result
77
59
  end
78
60
 
79
- failure_message_for_should do |actual|
80
- ["Called:\t#{@called.join("\n\t")}", "Not called:\t#{@called.join("\n\t")}"].join("\n")
61
+ failure_message do |actual|
62
+ ["Called:\t#{@called.join("\n\t")}", "Not called:\t#{@not_called.join("\n\t")}"].join("\n")
81
63
  end
82
64
 
83
- failure_message_for_should_not do |actual|
84
- ["Called:\t#{@called.join("\n\t")}", "Not called:\t#{@called.join("\n\t")}"].join("\n")
65
+ failure_message_when_negated do |actual|
66
+ ["Called:\t#{@called.join("\n\t")}", "Not called:\t#{@not_called.join("\n\t")}"].join("\n")
85
67
  end
86
-
87
68
  end
88
69
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delete_paranoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Sonnek
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-06-02 00:00:00.000000000 Z
12
+ date: 2016-09-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '0'
20
+ version: 4.2.7.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: '0'
27
+ version: 4.2.7.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rspec
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: '0'
34
+ version: '3.5'
35
35
  type: :development
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: '0'
41
+ version: '3.5'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: bundler
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -89,7 +89,8 @@ extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
91
  - ".gitignore"
92
- - ".rvmrc"
92
+ - ".ruby-gemset"
93
+ - ".ruby-version"
93
94
  - ".travis.yml"
94
95
  - CONTRIBUTORS.txt
95
96
  - Gemfile
@@ -123,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  version: '0'
124
125
  requirements: []
125
126
  rubyforge_project: delete_paranoid
126
- rubygems_version: 2.2.2
127
+ rubygems_version: 2.5.1
127
128
  signing_key:
128
129
  specification_version: 4
129
130
  summary: soft delete Rails ActiveRecord objects
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use "ruby-1.9.3-p484@delete_paranoid" --create