tractor 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -19,3 +19,5 @@ rdoc
19
19
  pkg
20
20
 
21
21
  ## PROJECT::SPECIFIC
22
+ tractor.iml
23
+ .idea
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.4.1
@@ -107,23 +107,18 @@ module Tractor
107
107
  save
108
108
  end
109
109
 
110
- def remove_from_associations
111
- self.class.associations.each do |key, value|
112
- foreign_key_value = self.send(value[:foreign_key])
113
- return unless foreign_key_value
114
- value[:foreign_klass].find_by_id(foreign_key_value).send(key).delete(self.id)
110
+ def add_to_associations
111
+ for_each_associated_foreign_instance do |foreign_instance|
112
+ foreign_instance.push(self)
115
113
  end
116
114
  end
117
-
118
- def add_to_associations
119
- self.class.associations.each do |key, value|
120
- foreign_key_value = self.send(value[:foreign_key])
121
-
122
- return unless foreign_key_value
123
- value[:foreign_klass].find_by_id(foreign_key_value).send(key).push(self)
115
+
116
+ def remove_from_associations
117
+ for_each_associated_foreign_instance do |foreign_instance|
118
+ foreign_instance.delete(self.id)
124
119
  end
125
120
  end
126
-
121
+
127
122
  def add_to_indices
128
123
  self.class.indices.each do |name|
129
124
  index = Index.new(self.class, name, send(name))
@@ -201,9 +196,8 @@ module Tractor
201
196
 
202
197
  # make an assumption about the foreign_key... probably bad :)
203
198
  def association(name, klass)
204
- foreign_key = "#{self.to_s.gsub(/^.*::/, '').downcase}_id"
205
- klass.associations[name] = {:foreign_key => foreign_key, :klass => klass, :foreign_klass => self}
206
-
199
+ foreign_key_name = "#{self.to_s.gsub(/^.*::/, '').downcase}_id"
200
+ klass.associations[self.name] = {:foreign_key_name => foreign_key_name, :set_name => name}
207
201
  define_method(name) do
208
202
  @association_store[name] = Association.new("#{self.class}:#{self.id}:#{name}", klass)
209
203
  end
@@ -263,6 +257,16 @@ module Tractor
263
257
  private
264
258
 
265
259
  attr_reader :attribute_store, :association_store
260
+
261
+ def for_each_associated_foreign_instance
262
+ self.class.associations.each do |association_owner_class_name, association_attributes|
263
+ foreign_klass = Object.module_eval(association_owner_class_name)
264
+ foreign_key = self.send(association_attributes[:foreign_key_name])
265
+ foreign_instance = foreign_klass.find_by_id(foreign_key)
266
+ yield(foreign_instance.send(association_attributes[:set_name]))
267
+ end
268
+ end
269
+
266
270
  end
267
271
  end
268
- end
272
+ end
@@ -81,8 +81,9 @@ describe Tractor::Model::Base do
81
81
 
82
82
  before do
83
83
  @game = Tractor::Model::Game.new({ :id => 'g1' })
84
- @player1 = Tractor::Model::Player.new({ :id => 'p1', :name => "delicious" })
85
- @player2 = Tractor::Model::Player.new({ :id => 'p2', :name => "gross" })
84
+ Tractor::Model::Game.create({ :id => 'g2' })
85
+ @player1 = Tractor::Model::Player.new({ :id => 'p1', :name => "delicious", :game_id => "g1" })
86
+ @player2 = Tractor::Model::Player.new({ :id => 'p2', :name => "gross", :game_id => "g2" })
86
87
 
87
88
  game.save
88
89
  player1.save
@@ -94,13 +95,11 @@ describe Tractor::Model::Base do
94
95
  end
95
96
 
96
97
  it "adds a push method for the set on an instance of the class" do
97
- game.players.push player1
98
- redis.smembers('Tractor::Model::Game:g1:players').should == ['p1']
98
+ game.players.push player2
99
+ redis.smembers('Tractor::Model::Game:g1:players').should == ['p1', 'p2']
99
100
  end
100
101
 
101
102
  it "adds an ids method for the set that returns all ids in it" do
102
- game.players.ids.should be_empty
103
- game.players.push player1
104
103
  game.players.ids.should == [player1.id]
105
104
  end
106
105
 
@@ -111,17 +110,9 @@ describe Tractor::Model::Base do
111
110
  end
112
111
 
113
112
  it "adds an all method for the association to return the items in it" do
114
- game.players.all.should == []
115
- game.players.push player1
116
- game.players.push player2
117
-
118
113
  player1_from_game = game.players.all[0]
119
- player2_from_game = game.players.all[1]
120
-
121
114
  player1_from_game.name.should == player1.name
122
115
  player1_from_game.id.should == player1.id
123
- player2_from_game.name.should == player2.name
124
- player2_from_game.id.should == player2.id
125
116
  end
126
117
 
127
118
  it "requires the object being added to have been saved to the database before adding it to the association"
@@ -216,12 +207,10 @@ describe Tractor::Model::Base do
216
207
  before do
217
208
  Sammich.create({ :id => 's1', :weight => "medium", :product => "Turkey Avocado" })
218
209
  Sammich.create({ :id => 's2', :weight => "medium", :product => "Reuben Sammich" })
219
- Tractor::Model::Player.create({ :id => 'p1', :name => "delicious" })
220
210
  end
221
211
 
222
212
  it "returns all the ids for a given class" do
223
213
  Sammich.ids.should == ['s1', 's2']
224
- Tractor::Model::Player.ids.should == ['p1']
225
214
  end
226
215
  end
227
216
 
@@ -229,12 +218,10 @@ describe Tractor::Model::Base do
229
218
  before do
230
219
  Sammich.create({ :id => 's1', :weight => "medium", :product => "Turkey Avocado" })
231
220
  Sammich.create({ :id => 's2', :weight => "medium", :product => "Reuben Sammich" })
232
- Tractor::Model::Player.create({ :id => 'p1', :name => "delicious" })
233
221
  end
234
222
 
235
223
  it "returns the count of all items of a given class" do
236
224
  Sammich.count.should == 2
237
- Tractor::Model::Player.count.should == 1
238
225
  end
239
226
  end
240
227
 
data/tractor.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tractor}
8
- s.version = "0.4.0"
8
+ s.version = "0.4.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Shane Wolf"]
12
- s.date = %q{2010-05-25}
12
+ s.date = %q{2010-05-26}
13
13
  s.description = %q{Very simple object mappings for ruby objects}
14
14
  s.email = %q{shanewolf@gmail.com}
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Wolf
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-05-25 00:00:00 -07:00
12
+ date: 2010-05-26 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15