has_alter_ego 0.0.7 → 0.0.8
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/Changelog.md +5 -0
- data/lib/has_alter_ego.rb +15 -15
- data/test/db/fixtures/alter_egos/drinks.yml +5 -3
- data/test/has_alter_ego_test.rb +7 -31
- data/test/test_helper.rb +3 -4
- metadata +4 -4
data/Changelog.md
CHANGED
data/lib/has_alter_ego.rb
CHANGED
@@ -22,44 +22,44 @@ module HasAlterEgo
|
|
22
22
|
|
23
23
|
# Reserve the first n IDs for stubbed objects
|
24
24
|
def reserve_space space
|
25
|
-
return if self.last and self.last
|
25
|
+
return if self.last and self.last.id >= space
|
26
26
|
|
27
27
|
o = self.new
|
28
|
-
o
|
28
|
+
o.id= space
|
29
29
|
o.save_without_alter_ego
|
30
30
|
o.delete
|
31
31
|
return
|
32
32
|
end
|
33
33
|
|
34
34
|
def parse_yml
|
35
|
-
yml = get_yml
|
36
|
-
yml.keys
|
35
|
+
@yml = get_yml
|
36
|
+
@db_objects = self.find_all_by_id(@yml.keys, :include => :alter_ego) || []
|
37
|
+
@yml.keys.each do |o|
|
37
38
|
parse_yml_for o
|
38
39
|
end
|
39
|
-
yml
|
40
|
+
@yml
|
40
41
|
end
|
41
42
|
|
42
|
-
def parse_yml_for
|
43
|
-
|
44
|
-
db_object = self.find(primary_key) rescue nil
|
43
|
+
def parse_yml_for id, reload = false
|
44
|
+
db_object = reload ? (self.find(id) rescue nil) : @db_objects.select{|o| o.id == id}.first
|
45
45
|
if db_object
|
46
46
|
raise "There is already a #{db_object.class} with id #{db_object.id} in the database." unless db_object.has_alter_ego?
|
47
47
|
if db_object.alter_ego.state == 'default'
|
48
|
-
assign_attributes db_object, yml[
|
49
|
-
db_object.on_seed(yml[
|
48
|
+
assign_attributes db_object, @yml[id]
|
49
|
+
db_object.on_seed(@yml[id])
|
50
50
|
db_object.save_without_alter_ego
|
51
51
|
end
|
52
52
|
else
|
53
53
|
# Check for destroyed alter_egos
|
54
|
-
alter_ego = AlterEgo.find_by_alter_ego_object_id_and_alter_ego_object_type(
|
54
|
+
alter_ego = AlterEgo.find_by_alter_ego_object_id_and_alter_ego_object_type(id, self.name)
|
55
55
|
return if alter_ego.try(:state) == "destroyed"
|
56
56
|
|
57
57
|
db_object = self.new
|
58
|
-
db_object
|
59
|
-
assign_attributes db_object, yml[
|
58
|
+
db_object.id = id
|
59
|
+
assign_attributes db_object, @yml[id]
|
60
60
|
db_object.build_alter_ego
|
61
61
|
db_object.alter_ego.state = 'default'
|
62
|
-
db_object.on_seed(yml[
|
62
|
+
db_object.on_seed(@yml[id])
|
63
63
|
db_object.save_without_alter_ego
|
64
64
|
end
|
65
65
|
end
|
@@ -135,7 +135,7 @@ module HasAlterEgo
|
|
135
135
|
self.alter_ego.state = 'default'
|
136
136
|
self.alter_ego.save
|
137
137
|
|
138
|
-
self.class.parse_yml_for self
|
138
|
+
self.class.parse_yml_for self.id, true
|
139
139
|
self.reload
|
140
140
|
end
|
141
141
|
|
data/test/has_alter_ego_test.rb
CHANGED
@@ -109,32 +109,6 @@ class HasAlterEgoTest < Test::Unit::TestCase
|
|
109
109
|
assert_equal 4, c.tires.size
|
110
110
|
end
|
111
111
|
|
112
|
-
def test_different_primary_key
|
113
|
-
assert_equal 2, Drink.all.size
|
114
|
-
assert_equal "none", Drink.find("water").color
|
115
|
-
|
116
|
-
water = Drink.find("water")
|
117
|
-
assert water.has_alter_ego?
|
118
|
-
assert_equal "default", water.alter_ego_state
|
119
|
-
|
120
|
-
water.color = "blue"
|
121
|
-
water.save
|
122
|
-
water.reload
|
123
|
-
assert_equal "blue", water.color
|
124
|
-
assert_equal "modified", water.alter_ego_state
|
125
|
-
|
126
|
-
water.reset
|
127
|
-
water.reload
|
128
|
-
assert_equal "none", water.color
|
129
|
-
assert_equal "default", water.alter_ego_state
|
130
|
-
|
131
|
-
orangejuice = Drink.new
|
132
|
-
orangejuice.name = "orangejuice"
|
133
|
-
orangejuice.color = "yellow"
|
134
|
-
orangejuice.save
|
135
|
-
assert !orangejuice.has_alter_ego?
|
136
|
-
end
|
137
|
-
|
138
112
|
def test_destroyed_object_leaves_destroyed_alter_ego
|
139
113
|
c = Car.find(6)
|
140
114
|
alter_ego = c.alter_ego
|
@@ -213,12 +187,15 @@ class HasAlterEgoTest < Test::Unit::TestCase
|
|
213
187
|
|
214
188
|
def test_smart_has_one
|
215
189
|
Creator.create(:name => "Martin")
|
216
|
-
Creator.create(:name => "Mike")
|
190
|
+
mike = Creator.create(:name => "Mike")
|
217
191
|
Drink.destroy_all
|
192
|
+
AlterEgo.destroy_all("alter_ego_object_type = 'Drink'")
|
218
193
|
Drink.class_eval do
|
219
194
|
def self.get_yml
|
220
|
-
return {
|
221
|
-
"
|
195
|
+
return {1234 => {
|
196
|
+
"name" => "water",
|
197
|
+
"color" => "none",
|
198
|
+
"creator_by_name" => "Mike"}}
|
222
199
|
end
|
223
200
|
end
|
224
201
|
Drink.parse_yml
|
@@ -227,11 +204,10 @@ class HasAlterEgoTest < Test::Unit::TestCase
|
|
227
204
|
end
|
228
205
|
|
229
206
|
def test_smart_belongs_to
|
230
|
-
|
231
207
|
Creator.class_eval do
|
232
208
|
def self.get_yml
|
233
209
|
return {1 => {
|
234
|
-
|
210
|
+
"name" => "Bernd",
|
235
211
|
"drink_by_name" => "water"}}
|
236
212
|
end
|
237
213
|
end
|
data/test/test_helper.rb
CHANGED
@@ -35,14 +35,14 @@ silence_stream(STDOUT) do
|
|
35
35
|
t.integer :car_id
|
36
36
|
end
|
37
37
|
|
38
|
-
create_table :drinks
|
38
|
+
create_table :drinks do |t|
|
39
39
|
t.string :name
|
40
40
|
t.string :color
|
41
41
|
end
|
42
42
|
|
43
43
|
create_table :creators do |t|
|
44
44
|
t.string :name
|
45
|
-
t.
|
45
|
+
t.integer :drink_id
|
46
46
|
end
|
47
47
|
|
48
48
|
create_table :sellers do |t|
|
@@ -87,7 +87,6 @@ class Tire < ActiveRecord::Base
|
|
87
87
|
end
|
88
88
|
|
89
89
|
class Drink < ActiveRecord::Base
|
90
|
-
set_primary_key :name
|
91
90
|
has_one :creator
|
92
91
|
has_alter_ego
|
93
92
|
end
|
@@ -95,4 +94,4 @@ end
|
|
95
94
|
class Creator < ActiveRecord::Base
|
96
95
|
belongs_to :drink
|
97
96
|
has_alter_ego
|
98
|
-
end
|
97
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_alter_ego
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 8
|
10
|
+
version: 0.0.8
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- "Andr\xC3\xA9 Duffeck"
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-10-15 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies: []
|
21
21
|
|