mongoo 0.2.4 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,12 +1,16 @@
1
1
  == Changelog
2
2
 
3
- === 0.2.2
3
+ === 0.3.0
4
+
5
+ * refactored a bunch of connection and async related stuff. see README
6
+
7
+ === 0.2.4
4
8
 
5
9
  * async mode works again, but now you have to manually require:
6
10
 
7
11
  require "mongoo/async"
8
- Mongoo.conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5)
9
- Mongoo.db_name = "mongoo-test"
12
+ Mongoo.conn_opts = ["localhost", 27017, :pool_size => 5, :timeout => 5]
13
+ Mongoo.db_name = "mongoo-test"
10
14
 
11
15
  see test_async.rb for an example.
12
16
 
@@ -21,10 +25,10 @@
21
25
 
22
26
  * Can no longer set Mongoo.config = {...}
23
27
 
24
- Set Mongoo.conn and Mongoo.db_name instead (more flexibility):
28
+ Set Mongoo.conn_opts and Mongoo.db_name instead (more flexibility):
25
29
 
26
- Mongoo.conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5)
27
- Mongoo.db_name = "mongoo-test"
30
+ Mongoo.conn_opts = ["localhost", 27017, :pool_size => 5, :timeout => 5]
31
+ Mongoo.db_name = "mongoo-test"
28
32
 
29
33
  You can set these on a model level as well:
30
34
 
data/Gemfile CHANGED
@@ -6,15 +6,15 @@ gem "i18n", ">= 0.4.1"
6
6
  gem "activesupport", ">= 3.0.3"
7
7
  gem "activemodel", ">= 3.0.3"
8
8
 
9
- gem "mongo", ">= 1.3.1"
10
-
11
- gem "em-synchrony", ">= 0.2.0"
9
+ gem "mongo", "~> 1.3.1"
10
+ gem "em-synchrony", "~> 0.2.0", :require => false
12
11
 
13
12
  # Add dependencies to develop your gem here.
14
13
  # Include everything needed to run rake, tests, features, etc.
15
14
  group :development do
15
+ gem "ruby-debug19", :require => 'ruby-debug'
16
16
  gem "shoulda", ">= 0"
17
17
  gem "bundler", "~> 1.0.0"
18
18
  gem "jeweler", "~> 1.5.1"
19
19
  gem "rcov", ">= 0"
20
- end
20
+ end
data/README.rdoc CHANGED
@@ -1,60 +1,17 @@
1
1
  = mongoo
2
2
 
3
- == Changelog
4
-
5
- === 0.2.2
6
-
7
- * async mode works again, but now you have to manually require:
8
-
9
- require "mongoo/async"
10
- Mongoo.conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5)
11
- Mongoo.db_name = "mongoo-test"
12
-
13
- see test_async.rb for an example.
14
-
15
- === 0.2.1
16
-
17
- * Identity Map now also stores results from find.to_a, find.each and find.next
18
-
19
- === 0.2.0
20
-
21
- * Depends on mongo gem >= 1.3.1
22
-
23
-
24
- * Can no longer set Mongoo.config = {...}
25
-
26
- Set Mongoo.conn and Mongoo.db_name instead (more flexibility):
27
-
28
- Mongoo.conn = Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5)
29
- Mongoo.db_name = "mongoo-test"
30
-
31
- You can set these on a model level as well:
32
-
33
- Person.conn = Mongo::Connection.new("localhost", 30000, :pool_size => 5, :timeout => 5)
34
- Person.db_name = "mongoo-test"
35
-
36
-
37
- * You can optionally set the collection name on a model now:
38
-
39
- class Person < Mongoo::Base
40
- collection_name "spacemen"
41
- end
42
-
43
-
44
- * There is a new Identity Map feature available. It will only work when using find_one to
45
- find a specific id. You need to manually turn it on:
46
-
47
- Mongoo::IdentityMap.on!
48
-
49
- If using it in a web application like Rails be sure to flush the map after each request:
50
-
51
- Mongoo::IdentityMap.flush!
52
-
53
- The map is scoped to the current thread or fiber. You can also turn the map back off:
54
-
55
- Mongoo::IdentityMap.off!
56
-
57
- Inspired by: http://railstips.org/blog/archives/2010/02/21/mongomapper-07-identity-map/
3
+ == Latest Version: 0.3.0
4
+
5
+ Usage (normal):
6
+ require 'mongoo'
7
+ Mongoo.conn = lambda { Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5) }
8
+ Mongoo.db = "mongoo-test"
9
+
10
+ Usage (async/em-synchrony):
11
+ require 'mongoo'
12
+ require 'mongoo/async'
13
+ Mongoo.conn = lambda { Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5) }
14
+ Mongoo.db = "mongoo-test"
58
15
 
59
16
  == Contributing to mongoo
60
17
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.3.0
data/lib/mongoo.rb CHANGED
@@ -1,38 +1,46 @@
1
+ unless defined?(Mongo)
2
+ require "mongo"
3
+ end
4
+
5
+ # Mongoo.conn = lambda { Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5) }
6
+ # Mongoo.db = "mydb"
7
+ # Mongoo.conn => #<Mongo::Connection:0x00000100db8ac0>
8
+
1
9
  module Mongoo
2
10
  INDEX_META = {}
3
11
  ATTRIBUTE_META = {}
4
12
 
5
13
  class << self
6
- attr_accessor :conn_opts, :db_name, :verbose_debug
14
+ attr_accessor :verbose_debug
7
15
 
8
- def conn
9
- Thread.current[:mongoo] ||= {}
10
- Thread.current[:mongoo][:conn] ||= Mongo::Connection.new(*conn_opts)
16
+ def conn=(conn_lambda)
17
+ @conn_lambda = conn_lambda
18
+ @_conn = nil
19
+ @_db = nil
20
+ @conn_lambda
11
21
  end
12
22
 
13
- def db
14
- Thread.current[:mongoo] ||= {}
15
- Thread.current[:mongoo][:db] ||= conn.db(db_name)
23
+ def db=(db_name)
24
+ @db_name = db_name
25
+ @_db = nil
26
+ @db_name
16
27
  end
17
28
 
18
- def reset_connection!
19
- if Thread.current[:mongoo]
20
- Thread.current[:mongoo][:db] = nil
21
- if Thread.current[:mongoo][:conn]
22
- Thread.current[:mongoo][:conn].close
23
- Thread.current[:mongoo][:conn] = nil
24
- end
25
- end; true
29
+ def conn
30
+ @_conn ||= (@conn_lambda && @conn_lambda.call)
31
+ end
32
+
33
+ def db
34
+ @_db ||= (conn && conn.db(@db_name))
26
35
  end
27
36
 
28
- def mode
29
- :sync
37
+ def async?
38
+ Mongo.async?
30
39
  end
31
40
  end
32
41
  end
33
42
 
34
43
  require "forwardable"
35
- require "mongo"
36
44
 
37
45
  require "active_support/core_ext"
38
46
  require "active_model"
data/lib/mongoo/async.rb CHANGED
@@ -1,71 +1,151 @@
1
- require "em-synchrony"
2
- require "em-synchrony/tcpsocket"
3
-
4
- module Mongoo
5
- def self.suppress_warnings
6
- original_verbosity = $VERBOSE
7
- $VERBOSE = nil
8
- result = yield
9
- $VERBOSE = original_verbosity
10
- return result
1
+ unless defined?(Mongo)
2
+ raise "!! mongoo/async must be loaded AFTER mongo !!"
3
+ end
4
+
5
+ original_verbosity = $VERBOSE
6
+ $VERBOSE = nil
7
+
8
+ require 'em-synchrony'
9
+ require 'em-synchrony/tcpsocket'
10
+ require 'em-synchrony/thread'
11
+
12
+ module Mongo
13
+
14
+ class Connection
15
+ TCPSocket = ::EventMachine::Synchrony::TCPSocket
16
+ Mutex = ::EventMachine::Synchrony::Thread::Mutex
17
+ ConditionVariable = ::EventMachine::Synchrony::Thread::ConditionVariable
18
+ end
19
+
20
+ def self.async?
21
+ true
11
22
  end
23
+
12
24
  end
13
25
 
14
- module Mongoo
15
- class FakeMutex
16
- def initialize
17
- end
18
26
 
19
- def synchronize
20
- yield
21
- end
27
+ module Mongo
28
+ class EMPool
29
+ TCPSocket = ::EventMachine::Synchrony::TCPSocket
22
30
 
23
- def lock
24
- true
31
+ attr_accessor :host, :port, :size, :timeout, :safe, :checked_out
32
+
33
+ # Create a new pool of connections.
34
+ #
35
+ def initialize(connection, host, port, opts={})
36
+ @connection = connection
37
+
38
+ @host, @port = host, port
39
+
40
+ # Pool size and timeout.
41
+ @size = opts[:size] || 1
42
+ @timeout = opts[:timeout] || 5.0
43
+
44
+ # Operations to perform on a socket
45
+ @socket_ops = Hash.new { |h, k| h[k] = [] }
46
+
47
+ @all = []
48
+ @reserved = {} # map of in-progress connections
49
+ @available = [] # pool of free connections
50
+ @pending = [] # pending reservations (FIFO)
51
+
52
+ setup_pool!(host, port)
25
53
  end
26
54
 
27
- def locked?
28
- false
55
+ def setup_pool!(host, port)
56
+ @size.times do |i|
57
+ sock = checkout_new_socket(host, port)
58
+ @all << sock
59
+ @available << sock
60
+ end
29
61
  end
30
62
 
31
- def sleep(timeout=nil)
32
- true
63
+ def close
64
+ @all.each do |sock|
65
+ begin
66
+ sock.close
67
+ rescue IOError => ex
68
+ warn "IOError when attempting to close socket connected to #{@host}:#{@port}: #{ex.inspect}"
69
+ end
70
+ end
71
+ @host = @port = nil
72
+ @all.clear
73
+ @reserved.clear
74
+ @available.clear
75
+ @pending.clear
33
76
  end
34
77
 
35
- def try_lock
78
+ # Return a socket to the pool.
79
+ def checkin(socket)
80
+ fiber = Fiber.current
81
+
82
+ @available.push(@reserved.delete(fiber.object_id))
83
+ if pending = @pending.shift
84
+ pending.resume
85
+ end
36
86
  true
37
87
  end
38
88
 
39
- def unlock
40
- true
89
+ # If a user calls DB#authenticate, and several sockets exist,
90
+ # then we need a way to apply the authentication on each socket.
91
+ # So we store the apply_authentication method, and this will be
92
+ # applied right before the next use of each socket.
93
+ def authenticate_existing
94
+ @all.each do |socket|
95
+ @socket_ops[socket] << Proc.new do
96
+ @connection.apply_saved_authentication(:socket => socket)
97
+ end
98
+ end
41
99
  end
42
- end
43
- end
44
100
 
45
- Mongoo.suppress_warnings do
46
- module Mongo
47
- class Connection
48
- Mutex = Mongoo::FakeMutex
49
- TCPSocket = TCPSocket = ::EventMachine::Synchrony::TCPSocket
101
+ # Store the logout op for each existing socket to be applied before
102
+ # the next use of each socket.
103
+ def logout_existing(db)
104
+ @all.each do |socket|
105
+ @socket_ops[socket] << Proc.new do
106
+ @connection.db(db).issue_logout(:socket => socket)
107
+ end
108
+ end
50
109
  end
51
- end
52
110
 
53
- module Mongo
54
- class Pool
55
- Mutex = Mongoo::FakeMutex
56
- TCPSocket = TCPSocket = ::EventMachine::Synchrony::TCPSocket
111
+ # Check out an existing socket or create a new socket if the maximum
112
+ # pool size has not been exceeded. Otherwise, wait for the next
113
+ # available socket.
114
+ def checkout
115
+ fiber = Fiber.current
116
+ #puts "[P: #{@pending.size}, A: #{@available.size}, ALL: #{@all.size}]"
117
+ if socket = @available.pop
118
+ @reserved[fiber.object_id] = socket
119
+ socket
120
+ else
121
+ Fiber.yield @pending.push fiber
122
+ checkout
123
+ end
57
124
  end
58
- end
59
- end
60
125
 
61
- module Mongoo
62
- def self.mode
63
- :async
64
- end
65
- end
126
+ # Adds a new socket to the pool and checks it out.
127
+ #
128
+ # This method is called exclusively from #checkout;
129
+ # therefore, it runs within a mutex.
130
+ def checkout_new_socket(host, port)
131
+ return nil if @all.size >= @size
66
132
 
67
- if ENV["MONGOO_DEBUG"] == "1"
68
- puts "* Mongoo Running in Asynchronous Mode"
69
- puts " ==> Mongo::Pool::TCPSocket: #{Mongo::Pool::TCPSocket.to_s}"
70
- puts " ==> Mongo::Connection::TCPSocket: #{Mongo::Pool::TCPSocket.to_s}"
71
- end
133
+ begin
134
+ socket = TCPSocket.new(host, port)
135
+ socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1)
136
+ rescue => ex
137
+ raise ConnectionFailure, "Failed to connect to host #{@host} and port #{@port}: #{ex}"
138
+ end
139
+
140
+ # If any saved authentications exist, we want to apply those
141
+ # when creating new sockets.
142
+ @connection.apply_saved_authentication(:socket => socket)
143
+
144
+ socket
145
+ end; protected :checkout_new_socket
146
+ end # EMPool
147
+ end # Mongo
148
+
149
+ Mongo::Pool = Mongo::EMPool
150
+
151
+ $VERBOSE = original_verbosity
@@ -25,20 +25,37 @@ module Mongoo
25
25
  end
26
26
  end
27
27
 
28
- def collection
29
- db.collection(collection_name)
28
+ def conn=(conn_lambda)
29
+ @conn_lambda = conn_lambda
30
+ @_conn = nil
31
+ @_db = nil
32
+ @collection = nil
33
+ @conn_lambda
34
+ end
35
+
36
+ def db=(db_name)
37
+ @db_name = db_name
38
+ @_db = nil
39
+ @collection = nil
40
+ @db_name
30
41
  end
31
42
 
32
43
  def conn
33
- Mongoo.conn
44
+ @_conn ||= ((@conn_lambda && @conn_lambda.call) || Mongoo.conn)
34
45
  end
35
46
 
36
47
  def db
37
- Mongoo.db
48
+ @_db ||= begin
49
+ if db_name = (@db_name || (@conn_lambda && Mongoo.db.name))
50
+ conn.db(db_name)
51
+ else
52
+ Mongoo.db
53
+ end
54
+ end
38
55
  end
39
56
 
40
- def db_name
41
- Mongoo.db_name
57
+ def collection
58
+ @collection ||= db.collection(collection_name)
42
59
  end
43
60
 
44
61
  def find(query={}, opts={})
data/mongoo.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mongoo}
8
- s.version = "0.2.4"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Myles"]
12
- s.date = %q{2011-05-11}
12
+ s.date = %q{2011-05-13}
13
13
  s.description = %q{Simple object mapper for MongoDB}
14
14
  s.email = %q{ben.myles@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -48,7 +48,7 @@ Gem::Specification.new do |s|
48
48
  s.homepage = %q{http://github.com/benmyles/mongoo}
49
49
  s.licenses = ["MIT"]
50
50
  s.require_paths = ["lib"]
51
- s.rubygems_version = %q{1.6.2}
51
+ s.rubygems_version = %q{1.6.1}
52
52
  s.summary = %q{Object mapper for MongoDB}
53
53
  s.test_files = [
54
54
  "test/helper.rb",
@@ -66,8 +66,9 @@ Gem::Specification.new do |s|
66
66
  s.add_runtime_dependency(%q<i18n>, [">= 0.4.1"])
67
67
  s.add_runtime_dependency(%q<activesupport>, [">= 3.0.3"])
68
68
  s.add_runtime_dependency(%q<activemodel>, [">= 3.0.3"])
69
- s.add_runtime_dependency(%q<mongo>, [">= 1.3.1"])
70
- s.add_runtime_dependency(%q<em-synchrony>, [">= 0.2.0"])
69
+ s.add_runtime_dependency(%q<mongo>, ["~> 1.3.1"])
70
+ s.add_runtime_dependency(%q<em-synchrony>, ["~> 0.2.0"])
71
+ s.add_development_dependency(%q<ruby-debug19>, [">= 0"])
71
72
  s.add_development_dependency(%q<shoulda>, [">= 0"])
72
73
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
73
74
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
@@ -76,8 +77,9 @@ Gem::Specification.new do |s|
76
77
  s.add_dependency(%q<i18n>, [">= 0.4.1"])
77
78
  s.add_dependency(%q<activesupport>, [">= 3.0.3"])
78
79
  s.add_dependency(%q<activemodel>, [">= 3.0.3"])
79
- s.add_dependency(%q<mongo>, [">= 1.3.1"])
80
- s.add_dependency(%q<em-synchrony>, [">= 0.2.0"])
80
+ s.add_dependency(%q<mongo>, ["~> 1.3.1"])
81
+ s.add_dependency(%q<em-synchrony>, ["~> 0.2.0"])
82
+ s.add_dependency(%q<ruby-debug19>, [">= 0"])
81
83
  s.add_dependency(%q<shoulda>, [">= 0"])
82
84
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
83
85
  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
@@ -87,8 +89,9 @@ Gem::Specification.new do |s|
87
89
  s.add_dependency(%q<i18n>, [">= 0.4.1"])
88
90
  s.add_dependency(%q<activesupport>, [">= 3.0.3"])
89
91
  s.add_dependency(%q<activemodel>, [">= 3.0.3"])
90
- s.add_dependency(%q<mongo>, [">= 1.3.1"])
91
- s.add_dependency(%q<em-synchrony>, [">= 0.2.0"])
92
+ s.add_dependency(%q<mongo>, ["~> 1.3.1"])
93
+ s.add_dependency(%q<em-synchrony>, ["~> 0.2.0"])
94
+ s.add_dependency(%q<ruby-debug19>, [">= 0"])
92
95
  s.add_dependency(%q<shoulda>, [">= 0"])
93
96
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
94
97
  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
data/test/helper.rb CHANGED
@@ -2,12 +2,6 @@ require 'rubygems'
2
2
  require 'bundler'
3
3
  begin
4
4
  groups = [:default, :development]
5
-
6
- if ENV["MONGOO_ASYNC"]
7
- groups << :async
8
- else
9
- groups << :sync
10
- end
11
5
  Bundler.setup(groups)
12
6
  rescue Bundler::BundlerError => e
13
7
  $stderr.puts e.message
@@ -16,13 +10,14 @@ rescue Bundler::BundlerError => e
16
10
  end
17
11
  require 'test/unit'
18
12
  require 'shoulda'
13
+ require 'ruby-debug'
19
14
 
20
15
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
21
16
  $LOAD_PATH.unshift(File.dirname(__FILE__))
22
17
  require 'mongoo'
23
18
 
24
- Mongoo.conn_opts = ["localhost", 27017, :pool_size => 5, :timeout => 5]
25
- Mongoo.db_name = "mongoo-test"
19
+ Mongoo.conn = lambda { Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5) }
20
+ Mongoo.db = "mongoo-test"
26
21
 
27
22
  class SearchIndex < Mongoo::Base
28
23
  attribute "terms", :type => :array
data/test/test_mongoo.rb CHANGED
@@ -9,6 +9,46 @@ class TestMongoo < Test::Unit::TestCase
9
9
  end
10
10
  end
11
11
 
12
+ should "be able to use a different db for each model" do
13
+ assert_equal "mongoo-test", Mongoo.db.name
14
+ assert_equal "mongoo-test", Person.db.name
15
+
16
+ Person.new(name: "mongoo-test").insert!
17
+ assert_equal 1, Person.count
18
+ assert_equal "mongoo-test", Person.find.next.name
19
+
20
+ Person.db = "mongoo-test-people"
21
+ assert_equal "mongoo-test-people", Person.db.name
22
+
23
+ assert_equal 0, Person.count
24
+ assert_equal 1, Mongoo.db.collection("people").count
25
+
26
+ Person.new(name: "mongoo-test-people").insert!
27
+ assert_equal 1, Person.count
28
+ assert_equal "mongoo-test-people", Person.find.next.name
29
+
30
+ Person.collection.drop
31
+ Person.db = nil
32
+ Person.conn = nil
33
+
34
+ assert_equal 1, Person.count
35
+ assert_equal "mongoo-test", Person.find.next.name
36
+ end
37
+
38
+ should "be able to use a different connection for each model" do
39
+ assert_equal Person.conn.object_id, Mongoo.conn.object_id
40
+ assert_equal Person.collection.db.connection.object_id, Mongoo.conn.object_id
41
+ Person.conn = lambda { Mongo::Connection.new("localhost", 27017, :pool_size => 5, :timeout => 5) }
42
+ assert_not_equal Person.conn.object_id, Mongoo.conn.object_id
43
+
44
+ assert_not_equal Person.collection.db.connection.object_id, Mongoo.conn.object_id
45
+
46
+ assert_equal Person.collection.db.connection.object_id, Person.conn.object_id
47
+ Person.conn = nil
48
+ assert_equal Person.conn.object_id, Mongoo.conn.object_id
49
+ assert_equal Person.collection.db.connection.object_id, Mongoo.conn.object_id
50
+ end
51
+
12
52
  should "set and get attributes" do
13
53
  p = Person.new("name" => "Ben")
14
54
  assert_equal "Ben", p.g(:name)
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: mongoo
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.4
5
+ version: 0.3.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Ben Myles
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-11 00:00:00 -07:00
13
+ date: 2011-05-13 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -51,7 +51,7 @@ dependencies:
51
51
  requirement: &id004 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
- - - ">="
54
+ - - ~>
55
55
  - !ruby/object:Gem::Version
56
56
  version: 1.3.1
57
57
  type: :runtime
@@ -62,14 +62,14 @@ dependencies:
62
62
  requirement: &id005 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
- - - ">="
65
+ - - ~>
66
66
  - !ruby/object:Gem::Version
67
67
  version: 0.2.0
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: *id005
71
71
  - !ruby/object:Gem::Dependency
72
- name: shoulda
72
+ name: ruby-debug19
73
73
  requirement: &id006 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
@@ -80,8 +80,19 @@ dependencies:
80
80
  prerelease: false
81
81
  version_requirements: *id006
82
82
  - !ruby/object:Gem::Dependency
83
- name: bundler
83
+ name: shoulda
84
84
  requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: bundler
95
+ requirement: &id008 !ruby/object:Gem::Requirement
85
96
  none: false
86
97
  requirements:
87
98
  - - ~>
@@ -89,10 +100,10 @@ dependencies:
89
100
  version: 1.0.0
90
101
  type: :development
91
102
  prerelease: false
92
- version_requirements: *id007
103
+ version_requirements: *id008
93
104
  - !ruby/object:Gem::Dependency
94
105
  name: jeweler
95
- requirement: &id008 !ruby/object:Gem::Requirement
106
+ requirement: &id009 !ruby/object:Gem::Requirement
96
107
  none: false
97
108
  requirements:
98
109
  - - ~>
@@ -100,10 +111,10 @@ dependencies:
100
111
  version: 1.5.1
101
112
  type: :development
102
113
  prerelease: false
103
- version_requirements: *id008
114
+ version_requirements: *id009
104
115
  - !ruby/object:Gem::Dependency
105
116
  name: rcov
106
- requirement: &id009 !ruby/object:Gem::Requirement
117
+ requirement: &id010 !ruby/object:Gem::Requirement
107
118
  none: false
108
119
  requirements:
109
120
  - - ">="
@@ -111,7 +122,7 @@ dependencies:
111
122
  version: "0"
112
123
  type: :development
113
124
  prerelease: false
114
- version_requirements: *id009
125
+ version_requirements: *id010
115
126
  description: Simple object mapper for MongoDB
116
127
  email: ben.myles@gmail.com
117
128
  executables: []
@@ -163,7 +174,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
163
174
  requirements:
164
175
  - - ">="
165
176
  - !ruby/object:Gem::Version
166
- hash: -1209992361420793263
177
+ hash: -3196476684317221338
167
178
  segments:
168
179
  - 0
169
180
  version: "0"
@@ -176,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
176
187
  requirements: []
177
188
 
178
189
  rubyforge_project:
179
- rubygems_version: 1.6.2
190
+ rubygems_version: 1.6.1
180
191
  signing_key:
181
192
  specification_version: 3
182
193
  summary: Object mapper for MongoDB