purgatory 2.4.0 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGY3YmJjZTM5ZTc0ZWU3NWQ4MTQxNTc3MDVkNzdlZjQ2ZDkzZmJkMg==
4
+ NjNjNzY3NWYxY2FlZDdhOGU4YzU4NTU0ZjQ5ZmI5Y2I0NmUwMTg1MQ==
5
5
  data.tar.gz: !binary |-
6
- NTMxMTZkMTYxMzZmNGJmY2M0NzNiMjc4YTgyODExNzdkNWE2NzE4Zg==
6
+ ZjdlNGQ1MDhmMDFmNDUyZWM2MTRiMWQ4NTYzYWRmOGM1Y2EzNDE1Mw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- OTMzNjlhY2YwMWQyYTBiMmUxMjE1MmJjYzM5MWIzMjI1OWZjOGVkZGI3ZGZm
10
- NTc1YzkzN2E1YmU5NGZkNTE2MWIzMzU5MWJiNDkzYTI5MDZmOThkZWYxOWVl
11
- ZGIxZTA5NTBiNGE1YTRiYTA3OGZhMWYxYWEzMGY5NzAyN2FmMDQ=
9
+ YzNjMjdhNDk4NzUyMzU0NDMxNDQxNDZlNGJjZTE4Y2RhZmQ2YjM4NDA1ZTFl
10
+ MDQyODhhMTZjMmQ3NGEyYjBlNjM5NjVkOTRhYWQ2ODg5MDQ1NjIzMjhkMTll
11
+ MzJhYjNkMDg4ZGM3NWM2NDZmMTA4OTkzNmE4ZTU5Y2Y0N2IzMTY=
12
12
  data.tar.gz: !binary |-
13
- Njk0M2Q2ZWQyMTEzYTVkZDY0NzdlOGZkMzk0MDBlYTY1MzA1NTZjMTA2ZTJj
14
- NWFlYzRlNWY2ZWE0MmM4MjJhYjk3YjhjMjBjNjIzNDY0YmQ5ZjdmM2Q2ZDZm
15
- N2M3NjkzMDllYTBiNTBmOTZiMGNhMzY0OTZmOTJmMWFjY2I0OWY=
13
+ YjQ0OWRlMTFiZDY0YzhkNzYzNTZjOGJkNmU1YzQ2ZjczODVlMjA3MmJkYTc0
14
+ MWNjZjIxNjQ2ODg0ZmM1MmU4YWZiY2QyMDRiYTZkMTliNDA5MzRhNWY5OGIy
15
+ OTNhY2MzZDUzMzE4NzdjNGIzNjM0MjY5Y2ZiNjk3Y2ZlMjIxODM=
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.4.0
1
+ 2.5.0
@@ -28,7 +28,11 @@ class Purgatory < ActiveRecord::Base
28
28
  end
29
29
 
30
30
  def soul
31
- @soul ||= (super || soul_type.constantize.new)
31
+ @soul ||= (super || (sti_class || soul_type).constantize.new)
32
+ end
33
+
34
+ def sti_class
35
+ requested_changes['type'].try(:last)
32
36
  end
33
37
 
34
38
  def approve!(approver = nil)
@@ -2,11 +2,11 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: purgatory 2.4.0 ruby lib
5
+ # stub: purgatory 2.5.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "purgatory"
9
- s.version = "2.4.0"
9
+ s.version = "2.5.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.authors = ["Elan Dubrofsky"]
@@ -34,6 +34,7 @@ Gem::Specification.new do |s|
34
34
  "purgatory.gemspec",
35
35
  "spec/purgatory_spec.rb",
36
36
  "spec/support/active_record.rb",
37
+ "spec/support/animal.rb",
37
38
  "spec/support/user.rb",
38
39
  "spec/support/widget.rb"
39
40
  ]
@@ -1,6 +1,7 @@
1
1
  require 'support/active_record'
2
2
  require 'support/widget'
3
3
  require 'support/user'
4
+ require 'support/animal'
4
5
  require 'purgatory/purgatory'
5
6
 
6
7
  describe Purgatory do
@@ -109,6 +110,35 @@ describe Purgatory do
109
110
  Widget.count.should be_zero
110
111
  end
111
112
  end
113
+
114
+ context "valid object using STI (single table inheritance)" do
115
+ before {create_new_object_purgatory_with_sti}
116
+
117
+ it "should create and return pending Purgatory object" do
118
+ @purgatory.should be_present
119
+ @purgatory.should_not be_approved
120
+ @purgatory.should be_pending
121
+ Purgatory.pending.count.should == 1
122
+ Purgatory.pending.first.should == @purgatory
123
+ Purgatory.approved.count.should be_zero
124
+ end
125
+
126
+ it "should return the soul as a new instance of the purgatoried class" do
127
+ dog = @purgatory.soul
128
+ dog.class.should == Dog
129
+ dog.should be_new_record
130
+ end
131
+
132
+ it "should store the requester and requested changes" do
133
+ @purgatory.requester.should == user1
134
+ @purgatory.requested_changes['name'].first.should == nil
135
+ @purgatory.requested_changes['name'].last.should == 'doggy'
136
+ end
137
+
138
+ it "should not create a dog" do
139
+ Dog.count.should be_zero
140
+ end
141
+ end
112
142
 
113
143
  it "should not allow invalid object creation to be put into purgatory" do
114
144
  widget = Widget.new name: ''
@@ -173,6 +203,34 @@ describe Purgatory do
173
203
  @purgatory.approve!(user2).should be_false
174
204
  end
175
205
  end
206
+
207
+ context "approving new object creation using STI" do
208
+ before do
209
+ create_new_object_purgatory_with_sti
210
+ @purgatory.approve!(user2).should be_true
211
+ end
212
+
213
+ it "should create the new object and apply any callbacks" do
214
+ Dog.count.should == 1
215
+ dog = Dog.first
216
+ dog.name.should == 'doggy'
217
+ dog.original_name.should == 'doggy'
218
+ dog.price.should == Dog::DEFAULT_PRICE
219
+ end
220
+
221
+ it "should mark purgatory as approved and store approver" do
222
+ @purgatory.approver.should == user2
223
+ @purgatory.should be_approved
224
+ @purgatory.should_not be_pending
225
+ Purgatory.pending.count.should be_zero
226
+ Purgatory.approved.count.should == 1
227
+ Purgatory.approved.first.should == @purgatory
228
+ end
229
+
230
+ it "should fail if you try to approve again" do
231
+ @purgatory.approve!(user2).should be_false
232
+ end
233
+ end
176
234
  end
177
235
 
178
236
  private
@@ -191,4 +249,11 @@ describe Purgatory do
191
249
  purgatory = widget.purgatory! user1
192
250
  @purgatory = Purgatory.find(purgatory.id)
193
251
  end
252
+
253
+ def create_new_object_purgatory_with_sti
254
+ dog = Dog.new name: 'doggy'
255
+ purgatory = dog.purgatory! user1
256
+ @purgatory = Purgatory.find(purgatory.id)
257
+ end
258
+
194
259
  end
@@ -16,6 +16,14 @@ ActiveRecord::Migration.create_table :users do |t|
16
16
  t.timestamps
17
17
  end
18
18
 
19
+ ActiveRecord::Migration.create_table :animals do |t|
20
+ t.string :name
21
+ t.string :type
22
+ t.integer :price
23
+ t.string :original_name
24
+ t.timestamps
25
+ end
26
+
19
27
  CreatePurgatories.new.migrate(:up)
20
28
 
21
29
  PurgatoryModule.configure do |config|
@@ -29,4 +37,4 @@ RSpec.configure do |config|
29
37
  raise ActiveRecord::Rollback
30
38
  end
31
39
  end
32
- end
40
+ end
@@ -0,0 +1,26 @@
1
+ require 'purgatory'
2
+
3
+ class Animal < ActiveRecord::Base
4
+ before_create :set_original_name
5
+
6
+ private
7
+
8
+ def set_original_name
9
+ self.original_name = name
10
+ end
11
+ end
12
+
13
+ class Dog < Animal
14
+ use_purgatory
15
+ validates :name, presence: true
16
+
17
+ DEFAULT_PRICE = 100
18
+
19
+ before_create :set_price
20
+
21
+ private
22
+
23
+ def set_price
24
+ self.price = DEFAULT_PRICE unless self.price
25
+ end
26
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: purgatory
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elan Dubrofsky
@@ -77,6 +77,7 @@ files:
77
77
  - purgatory.gemspec
78
78
  - spec/purgatory_spec.rb
79
79
  - spec/support/active_record.rb
80
+ - spec/support/animal.rb
80
81
  - spec/support/user.rb
81
82
  - spec/support/widget.rb
82
83
  homepage: http://github.com/financeit/purgatory