has_alter_ego 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,8 @@
1
+ # 0.0.8 (2010-10-14)
2
+ * Optimizations
3
+ - fewer queries (2*N => 2)
4
+ - less YAML parsing
5
+
1
6
  # 0.0.7 (2010-09-28)
2
7
  * non-numeric primary keys are no longer supported
3
8
 
@@ -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[self.primary_key] >= space
25
+ return if self.last and self.last.id >= space
26
26
 
27
27
  o = self.new
28
- o[self.primary_key] = space
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.each do |o|
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 primary_key
43
- yml = get_yml
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[primary_key]
49
- db_object.on_seed(yml[primary_key])
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(primary_key, self.name)
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[self.primary_key] = primary_key
59
- assign_attributes db_object, yml[primary_key]
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[primary_key])
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[self.class.primary_key]
138
+ self.class.parse_yml_for self.id, true
139
139
  self.reload
140
140
  end
141
141
 
@@ -1,5 +1,7 @@
1
- water:
1
+ 1:
2
+ name: water
2
3
  color: none
3
4
 
4
- coffee:
5
- color: black
5
+ 2:
6
+ name: coffee
7
+ color: black
@@ -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 {1 => {
221
- "creator_by_name" => ["Mike"]}}
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
- "name" => "Bernd",
210
+ "name" => "Bernd",
235
211
  "drink_by_name" => "water"}}
236
212
  end
237
213
  end
@@ -35,14 +35,14 @@ silence_stream(STDOUT) do
35
35
  t.integer :car_id
36
36
  end
37
37
 
38
- create_table :drinks, :id => false do |t|
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.string :drink_id
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: 17
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 7
10
- version: 0.0.7
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-09-28 00:00:00 +02:00
18
+ date: 2010-10-15 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies: []
21
21