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.
@@ -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