tractor 0.4.7 → 0.4.8

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.7
1
+ 0.4.8
@@ -39,6 +39,10 @@ module Tractor
39
39
  Tractor.redis.smembers(key) || []
40
40
  end
41
41
 
42
+ def count
43
+ ids.size
44
+ end
45
+
42
46
  def all
43
47
  ids.inject([]){|o, id| o << klass.find_by_id(id); o }
44
48
  end
@@ -158,7 +162,7 @@ module Tractor
158
162
 
159
163
  def find_by_id(id)
160
164
  obj_data = Tractor.redis.mapped_hmget("#{self}:#{id}", *attributes.keys)
161
- return nil if obj_data.reject{|k,v| v.nil?}.empty?
165
+ return nil if obj_data.values.compact.empty?
162
166
  new(obj_data)
163
167
  end
164
168
 
@@ -0,0 +1,44 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
+ require 'rubygems'
4
+ require 'tractor'
5
+ require 'faker'
6
+
7
+ Tractor.connectdb
8
+ Tractor.flushdb
9
+
10
+ class Person < Tractor::Model::Base
11
+ attribute :id
12
+ attribute :first_name, :index => true
13
+ attribute :last_name, :index => true
14
+ attribute :awesome, :type => :boolean, :index => true
15
+ attribute :company_id, :index => true
16
+ end
17
+
18
+ class Company < Tractor::Model::Base
19
+ association :people, Person
20
+
21
+ attribute :id
22
+ attribute :name
23
+ end
24
+
25
+
26
+ 100.times do |i|
27
+ Company.create(:id => i+1, :name => Faker::Company.name)
28
+ end
29
+
30
+ 10000.times do |i|
31
+ Person.create(
32
+ :id => i+1,
33
+ :first_name => Faker::Name.first_name,
34
+ :last_name => Faker::Name.last_name,
35
+ :awesome => rand(2)==0,
36
+ :company_id => rand(Company.count)+1)
37
+ end
38
+
39
+ Company.all.each do |company|
40
+ t1 = Time.now
41
+ employees = company.people.all
42
+ t2 = Time.now
43
+ puts "Company #{company.id} has #{employees.size} employees and it took #{t2-t1} seconds to retrieve them all"
44
+ end
@@ -103,6 +103,10 @@ describe Tractor::Model::Base do
103
103
  game.players.ids.should == [player1.id]
104
104
  end
105
105
 
106
+ it "adds a count method for the set that returns the size of the association" do
107
+ game.players.count.should == 1
108
+ end
109
+
106
110
  it "automatically adds items to association when they are created" do
107
111
  bocci_ball = Tractor::Model::Game.create({ :id => "bocci_ball" })
108
112
  Tractor::Model::Player.create({ :id => "tobias", :name => "deciduous", :game_id => "bocci_ball" })
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{tractor}
8
- s.version = "0.4.7"
8
+ s.version = "0.4.8"
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-10-29}
12
+ s.date = %q{2010-11-01}
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 = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "lib/tractor.rb",
27
27
  "lib/tractor/model/base.rb",
28
28
  "lib/tractor/model/mapper.rb",
29
+ "performance/test.rb",
29
30
  "spec/model/base_spec.rb",
30
31
  "spec/model/mapper_spec.rb",
31
32
  "spec/spec.opts",
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tractor
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 7
10
- version: 0.4.7
9
+ - 8
10
+ version: 0.4.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Shane Wolf
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-29 00:00:00 -07:00
18
+ date: 2010-11-01 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -53,6 +53,7 @@ files:
53
53
  - lib/tractor.rb
54
54
  - lib/tractor/model/base.rb
55
55
  - lib/tractor/model/mapper.rb
56
+ - performance/test.rb
56
57
  - spec/model/base_spec.rb
57
58
  - spec/model/mapper_spec.rb
58
59
  - spec/spec.opts