purgatory 2.8.0 → 2.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile +1 -0
- data/Gemfile.lock +8 -0
- data/VERSION +1 -1
- data/lib/purgatory/attribute_accessor_fields.rb +7 -3
- data/lib/purgatory/purgatory_module.rb +1 -1
- data/purgatory.gemspec +2 -2
- data/spec/purgatory_spec.rb +64 -13
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NGMwZjI5OWFhYTNjMWZiY2ExOGJlMmI0MDcyOGNkMjYzNjZhOTFjMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OWYxZDJmOGM1NTdkZDRmMjcxY2YwZDUzY2Y1MjA2NTc5MmY0Mjc4Mg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZjhkOGIxOTkxMjYzNjk5N2UwZWM3ZmMwMTQwZjA1NmIzNjYxYjZmZjMzZmJh
|
10
|
+
ZDI2MTJhMjgyZTcwNzk2ODUxYWE2MjlkYzkwOGEyM2QxMjBkMzU0ZTVhYjE3
|
11
|
+
OGQ2NzEyOTllMDhhNzRkZmE3YTU0MzA2MGY5MTE3MjU1NTFkN2U=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MmFlMWYyZjJkZGZhNTJiOWVkYWNmZTJlYjI5ZjVlMThjYTkxZjU2MTNmOTc0
|
14
|
+
M2JjZjZmM2Q1ZDUzZGM0MjFkMWEyNzgzY2E2NTJhYzliM2JmMjczZTgxMDEy
|
15
|
+
ZDFiMjZjNmFmMGQwM2JlNTJjNWY3MTZiMGJiYmE4Y2Q4YWQ4MmM=
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -20,6 +20,7 @@ GEM
|
|
20
20
|
arel (4.0.1)
|
21
21
|
atomic (1.1.14)
|
22
22
|
builder (3.1.4)
|
23
|
+
coderay (1.1.0)
|
23
24
|
diff-lcs (1.2.5)
|
24
25
|
faraday (0.8.8)
|
25
26
|
multipart-post (~> 1.2.0)
|
@@ -47,6 +48,7 @@ GEM
|
|
47
48
|
json (1.8.1)
|
48
49
|
jwt (0.1.8)
|
49
50
|
multi_json (>= 1.5)
|
51
|
+
method_source (0.8.2)
|
50
52
|
minitest (4.7.5)
|
51
53
|
multi_json (1.8.2)
|
52
54
|
multi_xml (0.5.5)
|
@@ -59,6 +61,10 @@ GEM
|
|
59
61
|
multi_json (~> 1.0)
|
60
62
|
multi_xml (~> 0.5)
|
61
63
|
rack (~> 1.2)
|
64
|
+
pry (0.9.12.4)
|
65
|
+
coderay (~> 1.0)
|
66
|
+
method_source (~> 0.8)
|
67
|
+
slop (~> 3.4)
|
62
68
|
rack (1.5.2)
|
63
69
|
rake (10.1.0)
|
64
70
|
rdoc (3.12.2)
|
@@ -71,6 +77,7 @@ GEM
|
|
71
77
|
rspec-expectations (2.14.4)
|
72
78
|
diff-lcs (>= 1.1.3, < 2.0)
|
73
79
|
rspec-mocks (2.14.4)
|
80
|
+
slop (3.4.7)
|
74
81
|
sqlite3 (1.3.8)
|
75
82
|
thread_safe (0.1.3)
|
76
83
|
atomic
|
@@ -83,6 +90,7 @@ DEPENDENCIES
|
|
83
90
|
activerecord (>= 4)
|
84
91
|
bundler (~> 1.0)
|
85
92
|
jeweler (~> 1.8.7)
|
93
|
+
pry
|
86
94
|
rdoc (~> 3.12)
|
87
95
|
rspec
|
88
96
|
sqlite3
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.9.0
|
@@ -4,13 +4,17 @@ require 'purgatory/active_record_descendant_attribute_accessors'
|
|
4
4
|
|
5
5
|
module AttributeAccessorFields
|
6
6
|
|
7
|
-
|
7
|
+
def self.set_local_attributes_to_save(klass,attrs)
|
8
|
+
klass.instance_variable_set(:@local_attributes_for_purgatory,attrs)
|
9
|
+
end
|
8
10
|
|
9
11
|
def self.determine_attr_accessor_fields(obj)
|
10
|
-
|
12
|
+
local_attributes = obj.class.instance_variable_get(:@local_attributes_for_purgatory)
|
13
|
+
|
14
|
+
variables = if local_attributes == :all
|
11
15
|
ActiveRecordDescendantAttributeAccessors.attr_accessor_instance_variables(obj)
|
12
16
|
else
|
13
|
-
Array(
|
17
|
+
Array(local_attributes).map { |attribute|
|
14
18
|
attribute.to_s.prepend('@').to_sym
|
15
19
|
}
|
16
20
|
end
|
@@ -5,7 +5,7 @@ module PurgatoryModule
|
|
5
5
|
|
6
6
|
module ClassMethods
|
7
7
|
def use_purgatory(options={})
|
8
|
-
AttributeAccessorFields.
|
8
|
+
AttributeAccessorFields.set_local_attributes_to_save(self,options[:local_attributes])
|
9
9
|
self.has_many :purgatories, as: :soul
|
10
10
|
end
|
11
11
|
end
|
data/purgatory.gemspec
CHANGED
@@ -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.
|
5
|
+
# stub: purgatory 2.9.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "purgatory"
|
9
|
-
s.version = "2.
|
9
|
+
s.version = "2.9.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"]
|
data/spec/purgatory_spec.rb
CHANGED
@@ -320,15 +320,66 @@ describe Purgatory do
|
|
320
320
|
end
|
321
321
|
end
|
322
322
|
|
323
|
-
describe "
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
323
|
+
describe "use_purgatory" do
|
324
|
+
context "on class that has attr_accessors" do
|
325
|
+
context "use_purgatory with no arguments" do
|
326
|
+
before do
|
327
|
+
@klass = create_subclass_of(Item)
|
328
|
+
@klass.instance_eval { use_purgatory }
|
329
|
+
end
|
330
|
+
|
331
|
+
it "should not store attr_accessors" do
|
332
|
+
obj = @klass.new name: 'foo', price: 100, dante: "inferno"
|
333
|
+
purgatory = obj.purgatory! user1
|
334
|
+
purgatory.attr_accessor_fields.should == {}
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
context "use_purgatory with valid arguments" do
|
339
|
+
context "use_purgatory with one active record class" do
|
340
|
+
before do
|
341
|
+
@klass = create_subclass_of(Item)
|
342
|
+
@klass.instance_eval { use_purgatory :local_attributes => [:dante] }
|
343
|
+
end
|
344
|
+
|
345
|
+
it "should work" do
|
346
|
+
obj = @klass.new name: 'foo', price: 100, dante: "inferno"
|
347
|
+
purgatory = obj.purgatory! user1
|
348
|
+
purgatory.attr_accessor_fields.should == { :@dante => "inferno" }
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
context "use_purgatory with more than one active record class" do
|
353
|
+
before do
|
354
|
+
@klass = create_subclass_of(Item)
|
355
|
+
@klass.instance_eval { use_purgatory :local_attributes => [:dante] }
|
356
|
+
|
357
|
+
@klass_2 = create_subclass_of(Item)
|
358
|
+
@klass_2.instance_eval { use_purgatory :local_attributes => [:minos]; attr_accessor :minos }
|
359
|
+
|
360
|
+
@klass_3 = create_subclass_of(Item)
|
361
|
+
@klass_3.instance_eval { use_purgatory }
|
362
|
+
end
|
363
|
+
|
364
|
+
it "should work" do
|
365
|
+
obj = @klass.new name: 'foo', price: 100, dante: "inferno"
|
366
|
+
purgatory = obj.purgatory! user1
|
367
|
+
purgatory.attr_accessor_fields.should == { :@dante => "inferno" }
|
368
|
+
|
369
|
+
obj = @klass_2.new name: 'foo', price: 100, minos: "inferno"
|
370
|
+
purgatory = obj.purgatory! user1
|
371
|
+
purgatory.attr_accessor_fields.should == { :@minos => "inferno" }
|
372
|
+
|
373
|
+
obj = @klass_3.new name: 'foo', price: 100
|
374
|
+
purgatory = obj.purgatory! user1
|
375
|
+
purgatory.attr_accessor_fields.should == {}
|
376
|
+
end
|
377
|
+
end
|
378
|
+
end
|
330
379
|
end
|
380
|
+
end
|
331
381
|
|
382
|
+
describe "determine_attr_accessor_fields" do
|
332
383
|
context "obj has no attr_accessors" do
|
333
384
|
before do
|
334
385
|
@obj = Widget.new
|
@@ -341,10 +392,10 @@ describe Purgatory do
|
|
341
392
|
|
342
393
|
context "obj has attr_accessors" do
|
343
394
|
before do
|
344
|
-
klass = create_subclass_of(Widget)
|
345
|
-
klass.instance_eval { attr_accessor :dante, :minos, :charon }
|
395
|
+
@klass = create_subclass_of(Widget)
|
396
|
+
@klass.instance_eval { attr_accessor :dante, :minos, :charon }
|
346
397
|
|
347
|
-
@obj = klass.new
|
398
|
+
@obj = @klass.new
|
348
399
|
|
349
400
|
@obj.dante = "inferno"
|
350
401
|
@obj.minos = "inferno"
|
@@ -360,7 +411,7 @@ describe Purgatory do
|
|
360
411
|
context "local_attributes is array" do
|
361
412
|
context "array size is 1" do
|
362
413
|
before do
|
363
|
-
AttributeAccessorFields.
|
414
|
+
AttributeAccessorFields.set_local_attributes_to_save(@klass,[:dante])
|
364
415
|
end
|
365
416
|
|
366
417
|
it "should only contain attr_accessors specified in array" do
|
@@ -369,7 +420,7 @@ describe Purgatory do
|
|
369
420
|
end
|
370
421
|
context "array size is more than 1" do
|
371
422
|
before do
|
372
|
-
AttributeAccessorFields.
|
423
|
+
AttributeAccessorFields.set_local_attributes_to_save(@klass,[:dante, :minos])
|
373
424
|
end
|
374
425
|
|
375
426
|
it "should only contain attr_accessors specified in array" do
|
@@ -381,7 +432,7 @@ describe Purgatory do
|
|
381
432
|
|
382
433
|
context "value of local_variables is :all" do
|
383
434
|
before do
|
384
|
-
AttributeAccessorFields.
|
435
|
+
AttributeAccessorFields.set_local_attributes_to_save(@klass,:all)
|
385
436
|
end
|
386
437
|
|
387
438
|
it "should automatically determine attr_accessor values that doesnt include ones belonging to AR::Base and its ancestors, and then store these values" do
|