dependent_restrict 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.
- checksums.yaml +6 -14
- data/Gemfile +1 -1
- data/dependent_restrict.gemspec +4 -3
- data/lib/dependent_restrict.rb +4 -4
- data/spec/dependent_restrict_spec.rb +163 -0
- metadata +10 -9
- data/spec/dependent_protect_spec.rb +0 -139
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
ZmUyZDMzNDc0YTcwYjUyYzY0NWI5ZDAyODRlNGY2MDZiNDdlNDM1M2Y2Njhk
|
10
|
-
YTMxYTM2MjMxYTQ2NjMyMDI1MjQzMjA3OGM1MDBlMGFjNzk4ODM4NzUwMzFh
|
11
|
-
N2Y4ZGVkMDNkODdmNzAwOTZmY2Y0ZjFhYzdhMDIyYjI0NGJkY2M=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
ODJmMDViYmFkMWM1NzkwZDIzYzFhMWY4ZDUwZmNhMDdlN2ExMzc0ZDQ5YzNj
|
14
|
-
NDQ2OTEyNTFiMWVmOWNlN2M5NzFhYjFlMTA4MWM1NDA4MTg1NzVmZjE0MmU1
|
15
|
-
M2M4NGJmZDRmZjE3ZDFkMjQ5Y2M4M2MzYmFjOWNjM2IyMTFiMmI=
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e8feb61d8673fb8d7c47c9bcd17bbe61549b9f5b
|
4
|
+
data.tar.gz: 5228752defef4573852096371587e648fbed6cb2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8c464b58a1cdeb06c7eb614398b90400bb7365059a8c8ff8ba9eabe243cd071176d8518d7ef15ac88c48e0c089401ae103ebf608b25f294a37bc12ac70a82630
|
7
|
+
data.tar.gz: e4b732f96aa87dad2ad12793d2726a5d854fefa8ba760e9aa073a115bc7663b2d6ddd3bb7d327c5757a5854be166bdfecbad887749b817ead5a8ebfdc296de20
|
data/Gemfile
CHANGED
data/dependent_restrict.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'dependent_restrict'
|
16
|
-
s.version = '0.1.
|
17
|
-
s.date = '2013-
|
16
|
+
s.version = '0.1.1'
|
17
|
+
s.date = '2013-11-27'
|
18
18
|
s.rubyforge_project = 'dependent_restrict'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
s.authors = ["Michael Noack"]
|
29
29
|
s.email = 'development@travellink.com.au'
|
30
30
|
s.homepage = 'http://github.com/sealink/dependent_restrict'
|
31
|
+
s.license = 'MIT'
|
31
32
|
|
32
33
|
## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
|
33
34
|
## require 'NAME.rb' or'/lib/NAME/file.rb' can be as require 'NAME/file.rb'
|
@@ -68,7 +69,7 @@ Gem::Specification.new do |s|
|
|
68
69
|
gemfiles/rails4.gemfile
|
69
70
|
lib/dependent_restrict.rb
|
70
71
|
lib/dependent_restrict/delete_restriction_error.rb
|
71
|
-
spec/
|
72
|
+
spec/dependent_restrict_spec.rb
|
72
73
|
spec/schema.rb
|
73
74
|
spec/spec_helper.rb
|
74
75
|
]
|
data/lib/dependent_restrict.rb
CHANGED
@@ -2,7 +2,7 @@ require 'active_record'
|
|
2
2
|
require 'dependent_restrict/delete_restriction_error'
|
3
3
|
|
4
4
|
module DependentRestrict
|
5
|
-
VERSION = '0.1.
|
5
|
+
VERSION = '0.1.1'
|
6
6
|
|
7
7
|
def self.included(base)
|
8
8
|
super
|
@@ -24,12 +24,12 @@ module DependentRestrict
|
|
24
24
|
def has_one_with_restrict(*args) #:nodoc:
|
25
25
|
reflection = if active_record_4?
|
26
26
|
association_id, options, scope, extension = *args
|
27
|
-
create_reflection(:has_one, association_id, options, scope
|
27
|
+
create_reflection(:has_one, association_id, options || {}, scope || {}, self)
|
28
28
|
else
|
29
29
|
association_id, options, extension = *args
|
30
|
-
create_reflection(:has_one, association_id, options, self)
|
30
|
+
create_reflection(:has_one, association_id, options || {}, self)
|
31
31
|
end
|
32
|
-
add_dependency_callback!(reflection, options)
|
32
|
+
add_dependency_callback!(reflection, options || {})
|
33
33
|
has_one_without_restrict(*args) #association_id, options, &extension)
|
34
34
|
end
|
35
35
|
|
@@ -0,0 +1,163 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
DB_FILE = 'tmp/test_db'
|
4
|
+
FileUtils.mkdir_p File.dirname(DB_FILE)
|
5
|
+
FileUtils.rm_f DB_FILE
|
6
|
+
|
7
|
+
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => DB_FILE
|
8
|
+
|
9
|
+
load 'spec/schema.rb'
|
10
|
+
|
11
|
+
|
12
|
+
describe DependentRestrict do
|
13
|
+
|
14
|
+
context 'when associations are defined' do
|
15
|
+
before do
|
16
|
+
class OrderInvoice < ActiveRecord::Base
|
17
|
+
belongs_to :order
|
18
|
+
end
|
19
|
+
|
20
|
+
class Order < ActiveRecord::Base
|
21
|
+
belongs_to :category
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
"Order #{id}"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class Category < ActiveRecord::Base
|
29
|
+
def to_s
|
30
|
+
"Category #{id}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
after do
|
36
|
+
%w(OrderInvoice Order Category).each { |klass| Object.send(:remove_const, klass) }
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
context 'when not restricting' do
|
41
|
+
it 'should allow creating reflections' do
|
42
|
+
expect {
|
43
|
+
class Order < ActiveRecord::Base
|
44
|
+
has_one :order_invoice
|
45
|
+
end
|
46
|
+
|
47
|
+
class Category < ActiveRecord::Base
|
48
|
+
has_many :orders do
|
49
|
+
def active
|
50
|
+
self.select(&:active?)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
}.to_not raise_error
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
context 'when restricting with exception' do
|
60
|
+
before do
|
61
|
+
class Order < ActiveRecord::Base
|
62
|
+
has_one :order_invoice, :dependent => :restrict_with_exception
|
63
|
+
end
|
64
|
+
|
65
|
+
class Category < ActiveRecord::Base
|
66
|
+
has_many :orders, :dependent => :restrict_with_exception do
|
67
|
+
def active
|
68
|
+
self.select(&:active?)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'should restrict has_many relationships' do
|
75
|
+
category = Category.create!
|
76
|
+
5.times { Order.create!(:category => category) }
|
77
|
+
expect { category.reload.destroy }.to raise_error(
|
78
|
+
ActiveRecord::DetailedDeleteRestrictionError,
|
79
|
+
'Cannot delete record because 5 dependent orders exist'
|
80
|
+
)
|
81
|
+
begin
|
82
|
+
category.destroy
|
83
|
+
rescue ActiveRecord::DetailedDeleteRestrictionError => e
|
84
|
+
e.detailed_message.should == "Cannot delete record because 5 dependent orders exist\n\n\nThese include:\n1: Order 1\n2: Order 2\n3: Order 3\n4: Order 4\n5: Order 5"
|
85
|
+
end
|
86
|
+
1.times { Order.create!(:category => category) }
|
87
|
+
begin
|
88
|
+
category.destroy
|
89
|
+
rescue ActiveRecord::DetailedDeleteRestrictionError => e
|
90
|
+
e.detailed_message.should == "Cannot delete record because 6 dependent orders exist\n\n\nThese include:\n1: Order 1\n2: Order 2\n3: Order 3\n4: Order 4\n...and 2 more"
|
91
|
+
end
|
92
|
+
|
93
|
+
Order.destroy_all
|
94
|
+
expect { category.reload.destroy }.to_not raise_error
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should restrict has_one relationships' do
|
98
|
+
order = Order.create!
|
99
|
+
order_invoice = OrderInvoice.create!(:order => order)
|
100
|
+
expect { order.reload.destroy }.to raise_error(
|
101
|
+
ActiveRecord::DetailedDeleteRestrictionError,
|
102
|
+
'Cannot delete record because dependent order invoice exists'
|
103
|
+
)
|
104
|
+
|
105
|
+
order_invoice.destroy
|
106
|
+
expect { order.reload.destroy }.to_not raise_error
|
107
|
+
end
|
108
|
+
|
109
|
+
it 'should still filter active' do
|
110
|
+
category = Category.create!
|
111
|
+
3.times { Order.create!(:category => category, :active => true) }
|
112
|
+
2.times { Order.create!(:category => category, :active => false) }
|
113
|
+
category.orders.active.count.should == 3
|
114
|
+
|
115
|
+
Category.delete_all
|
116
|
+
Order.delete_all
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
context 'when restricting with error' do
|
122
|
+
before do
|
123
|
+
class Order < ActiveRecord::Base
|
124
|
+
has_one :order_invoice, :dependent => :restrict_with_error
|
125
|
+
end
|
126
|
+
|
127
|
+
class Category < ActiveRecord::Base
|
128
|
+
has_many :orders, :dependent => :restrict_with_error do
|
129
|
+
def active
|
130
|
+
self.select(&:active?)
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should restrict has_many relationships' do
|
137
|
+
category = Category.create!
|
138
|
+
Category.count.should == 1
|
139
|
+
5.times { Order.create!(:category => category) }
|
140
|
+
category.destroy
|
141
|
+
Category.count.should == 1
|
142
|
+
Order.destroy_all
|
143
|
+
category.reload.destroy
|
144
|
+
Category.count.should == 0
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should restrict has_one relationships' do
|
148
|
+
order = Order.create!
|
149
|
+
Order.count.should == 1
|
150
|
+
order_invoice = OrderInvoice.create!(:order => order)
|
151
|
+
order.reload.destroy
|
152
|
+
Order.count.should == 1
|
153
|
+
|
154
|
+
order_invoice.destroy
|
155
|
+
order.reload.destroy
|
156
|
+
Order.count.should == 0
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
|
162
|
+
end
|
163
|
+
|
metadata
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dependent_restrict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Noack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 2.3.0
|
20
20
|
- - <
|
@@ -24,7 +24,7 @@ dependencies:
|
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - '>='
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 2.3.0
|
30
30
|
- - <
|
@@ -49,11 +49,12 @@ files:
|
|
49
49
|
- gemfiles/rails4.gemfile
|
50
50
|
- lib/dependent_restrict.rb
|
51
51
|
- lib/dependent_restrict/delete_restriction_error.rb
|
52
|
-
- spec/
|
52
|
+
- spec/dependent_restrict_spec.rb
|
53
53
|
- spec/schema.rb
|
54
54
|
- spec/spec_helper.rb
|
55
55
|
homepage: http://github.com/sealink/dependent_restrict
|
56
|
-
licenses:
|
56
|
+
licenses:
|
57
|
+
- MIT
|
57
58
|
metadata: {}
|
58
59
|
post_install_message:
|
59
60
|
rdoc_options:
|
@@ -62,17 +63,17 @@ require_paths:
|
|
62
63
|
- lib
|
63
64
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
65
|
requirements:
|
65
|
-
- -
|
66
|
+
- - '>='
|
66
67
|
- !ruby/object:Gem::Version
|
67
68
|
version: '0'
|
68
69
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
70
|
requirements:
|
70
|
-
- -
|
71
|
+
- - '>='
|
71
72
|
- !ruby/object:Gem::Version
|
72
73
|
version: '0'
|
73
74
|
requirements: []
|
74
75
|
rubyforge_project: dependent_restrict
|
75
|
-
rubygems_version: 2.
|
76
|
+
rubygems_version: 2.1.11
|
76
77
|
signing_key:
|
77
78
|
specification_version: 2
|
78
79
|
summary: Add dependent restrict and improves functionality to ActiveRecord 2/3/4.x.
|
@@ -1,139 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
DB_FILE = 'tmp/test_db'
|
4
|
-
FileUtils.mkdir_p File.dirname(DB_FILE)
|
5
|
-
FileUtils.rm_f DB_FILE
|
6
|
-
|
7
|
-
ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => DB_FILE
|
8
|
-
|
9
|
-
load 'spec/schema.rb'
|
10
|
-
|
11
|
-
|
12
|
-
describe DependentRestrict do
|
13
|
-
context 'should restrict' do
|
14
|
-
before do
|
15
|
-
class OrderInvoice < ActiveRecord::Base
|
16
|
-
belongs_to :order
|
17
|
-
end
|
18
|
-
|
19
|
-
class Order < ActiveRecord::Base
|
20
|
-
belongs_to :category
|
21
|
-
has_one :order_invoice, :dependent => :restrict_with_exception
|
22
|
-
def to_s
|
23
|
-
"Order #{id}"
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
class Category < ActiveRecord::Base
|
28
|
-
has_many :orders, :dependent => :restrict_with_exception do
|
29
|
-
def active
|
30
|
-
self.select(&:active?)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
def to_s
|
34
|
-
"Category #{id}"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
after do
|
40
|
-
%w(OrderInvoice Order Category).each { |klass| Object.send(:remove_const, klass) }
|
41
|
-
end
|
42
|
-
|
43
|
-
it 'should restrict has_many relationships' do
|
44
|
-
category = Category.create!
|
45
|
-
5.times { Order.create!(:category => category) }
|
46
|
-
expect { category.reload.destroy }.to raise_error(
|
47
|
-
ActiveRecord::DetailedDeleteRestrictionError,
|
48
|
-
'Cannot delete record because 5 dependent orders exist'
|
49
|
-
)
|
50
|
-
begin
|
51
|
-
category.destroy
|
52
|
-
rescue ActiveRecord::DetailedDeleteRestrictionError => e
|
53
|
-
e.detailed_message.should == "Cannot delete record because 5 dependent orders exist\n\n\nThese include:\n1: Order 1\n2: Order 2\n3: Order 3\n4: Order 4\n5: Order 5"
|
54
|
-
end
|
55
|
-
1.times { Order.create!(:category => category) }
|
56
|
-
begin
|
57
|
-
category.destroy
|
58
|
-
rescue ActiveRecord::DetailedDeleteRestrictionError => e
|
59
|
-
e.detailed_message.should == "Cannot delete record because 6 dependent orders exist\n\n\nThese include:\n1: Order 1\n2: Order 2\n3: Order 3\n4: Order 4\n...and 2 more"
|
60
|
-
end
|
61
|
-
|
62
|
-
Order.destroy_all
|
63
|
-
expect{category.reload.destroy}.to_not raise_error
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'should restrict has_one relationships' do
|
67
|
-
order = Order.create!
|
68
|
-
order_invoice = OrderInvoice.create!(:order => order)
|
69
|
-
expect{order.reload.destroy}.to raise_error(
|
70
|
-
ActiveRecord::DetailedDeleteRestrictionError,
|
71
|
-
'Cannot delete record because dependent order invoice exists'
|
72
|
-
)
|
73
|
-
|
74
|
-
order_invoice.destroy
|
75
|
-
expect{order.reload.destroy}.to_not raise_error
|
76
|
-
end
|
77
|
-
|
78
|
-
it 'should still filter active' do
|
79
|
-
category = Category.create!
|
80
|
-
3.times { Order.create!(:category => category, :active => true) }
|
81
|
-
2.times { Order.create!(:category => category, :active => false) }
|
82
|
-
category.orders.active.count.should == 3
|
83
|
-
|
84
|
-
Category.delete_all
|
85
|
-
Order.delete_all
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
context 'should restrict_with_error' do
|
90
|
-
before do
|
91
|
-
class OrderInvoice < ActiveRecord::Base
|
92
|
-
belongs_to :order
|
93
|
-
end
|
94
|
-
|
95
|
-
class Order < ActiveRecord::Base
|
96
|
-
belongs_to :category
|
97
|
-
has_one :order_invoice, :dependent => :restrict_with_error
|
98
|
-
def to_s
|
99
|
-
"Order #{id}"
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
class Category < ActiveRecord::Base
|
104
|
-
has_many :orders, :dependent => :restrict_with_error
|
105
|
-
def to_s
|
106
|
-
"Category #{id}"
|
107
|
-
end
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
|
-
after do
|
112
|
-
%w(OrderInvoice Order Category).each { |klass| Object.send(:remove_const, klass) }
|
113
|
-
end
|
114
|
-
|
115
|
-
it 'should restrict has_many relationships' do
|
116
|
-
category = Category.create!
|
117
|
-
Category.count.should == 1
|
118
|
-
5.times { Order.create!(:category => category) }
|
119
|
-
category.destroy
|
120
|
-
Category.count.should == 1
|
121
|
-
Order.destroy_all
|
122
|
-
category.reload.destroy
|
123
|
-
Category.count.should == 0
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'should restrict has_one relationships' do
|
127
|
-
order = Order.create!
|
128
|
-
Order.count.should == 1
|
129
|
-
order_invoice = OrderInvoice.create!(:order => order)
|
130
|
-
order.reload.destroy
|
131
|
-
Order.count.should == 1
|
132
|
-
|
133
|
-
order_invoice.destroy
|
134
|
-
order.reload.destroy
|
135
|
-
Order.count.should == 0
|
136
|
-
end
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|