mongodoc 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +17 -1
- data/Rakefile +5 -4
- data/VERSION +1 -1
- data/features/mongodb.yml +6 -0
- data/features/mongodoc_base.feature +9 -17
- data/features/saving_an_object.feature +4 -6
- data/features/step_definitions/collection_steps.rb +3 -3
- data/features/support/support.rb +4 -1
- data/features/using_criteria.feature +1 -2
- data/lib/mongodoc/connection.rb +20 -15
- data/lib/mongodoc/criteria.rb +1 -1
- data/lib/mongodoc.rb +6 -5
- data/mongodb.example.yml +6 -0
- data/mongodoc.gemspec +21 -15
- data/spec/connection_spec.rb +156 -48
- data/spec/mongodb.yml +6 -0
- data/spec/mongodb_pairs.yml +8 -0
- metadata +22 -9
- data/features/step_definitions/connect_steps.rb +0 -4
data/README.rdoc
CHANGED
@@ -23,7 +23,7 @@ Here is an example:
|
|
23
23
|
has_many :addresses
|
24
24
|
end
|
25
25
|
|
26
|
-
MongoDoc.
|
26
|
+
MongoDoc.connect_to_database 'test'
|
27
27
|
contact = Contact.new(:name => 'Joe Strummer', :interests => ['music', 'art', 'acting'])
|
28
28
|
contact.addresses << Address.new(:street => '1 Main Street', :city => 'Anywhere', :state => 'ID', :zip_code => '56789')
|
29
29
|
contact.save
|
@@ -33,6 +33,22 @@ Here is an example:
|
|
33
33
|
|
34
34
|
== Installation
|
35
35
|
|
36
|
+
sudo gem install mongodoc
|
37
|
+
|
38
|
+
== Configuration
|
39
|
+
|
40
|
+
Configure your database connection in ./mongodb.yml, you do not need one if you are running on localhost with the default port
|
41
|
+
|
42
|
+
name: test
|
43
|
+
host: localhost
|
44
|
+
port: 27017
|
45
|
+
options:
|
46
|
+
auto_reconnect: true
|
47
|
+
|
48
|
+
You can change the location of the configuration file:
|
49
|
+
|
50
|
+
MongoDoc.config_path = './config/mongodb.yml'
|
51
|
+
|
36
52
|
== Credits
|
37
53
|
|
38
54
|
Les Hill, leshill on github
|
data/Rakefile
CHANGED
@@ -10,11 +10,12 @@ begin
|
|
10
10
|
gem.email = "leshill@gmail.com"
|
11
11
|
gem.homepage = "http://github.com/leshill/mongodoc"
|
12
12
|
gem.authors = ["Les Hill"]
|
13
|
-
gem.add_dependency "mongo", "= 0.
|
14
|
-
gem.add_dependency "
|
13
|
+
gem.add_dependency "mongo", "= 0.18.1"
|
14
|
+
gem.add_dependency "mongo_ext", "= 0.18.1"
|
15
|
+
gem.add_dependency "durran-validatable", "= 1.8.3"
|
15
16
|
gem.add_dependency "leshill-will_paginate", "= 2.3.11"
|
16
|
-
gem.add_development_dependency "rspec"
|
17
|
-
gem.add_development_dependency "cucumber"
|
17
|
+
gem.add_development_dependency "rspec", "= 1.2.9"
|
18
|
+
gem.add_development_dependency "cucumber", "= 0.4.4"
|
18
19
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
19
20
|
end
|
20
21
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.2
|
@@ -1,8 +1,7 @@
|
|
1
1
|
Feature: MongoDoc::Base
|
2
2
|
|
3
3
|
Scenario: creating a simple document
|
4
|
-
Given
|
5
|
-
And an empty Address document collection
|
4
|
+
Given an empty Address document collection
|
6
5
|
And a hash named 'hashrocket':
|
7
6
|
| Street | City | State | Zip Code |
|
8
7
|
| 320 First Street North | Jacksonville Beach | FL | 32250 |
|
@@ -12,8 +11,7 @@ Feature: MongoDoc::Base
|
|
12
11
|
And the document 'address' roundtrips
|
13
12
|
|
14
13
|
Scenario: saving a simple document
|
15
|
-
Given
|
16
|
-
And an empty Address document collection
|
14
|
+
Given an empty Address document collection
|
17
15
|
And an Address document named 'hashrocket' :
|
18
16
|
| Street | City | State | Zip Code |
|
19
17
|
| 320 First Street North | Jacksonville Beach | FL | 32250 |
|
@@ -23,8 +21,7 @@ Feature: MongoDoc::Base
|
|
23
21
|
And the document 'hashrocket' roundtrips
|
24
22
|
|
25
23
|
Scenario: updating an attribute of a simple document
|
26
|
-
Given
|
27
|
-
And an empty Address document collection
|
24
|
+
Given an empty Address document collection
|
28
25
|
And an Address document named 'hashrocket' :
|
29
26
|
| Street | City | State | Zip Code |
|
30
27
|
| 320 First Street North | Jacksonville Beach | FL | 32250 |
|
@@ -37,8 +34,7 @@ Feature: MongoDoc::Base
|
|
37
34
|
Then the attribute 'street' of 'hashrocket' is '320 First St N'
|
38
35
|
|
39
36
|
Scenario: failing to update an attribute of a simple document
|
40
|
-
Given
|
41
|
-
And an empty Address document collection
|
37
|
+
Given an empty Address document collection
|
42
38
|
And an Address document named 'hashrocket' :
|
43
39
|
| Street | City | State | Zip Code |
|
44
40
|
| 320 First Street North | Jacksonville Beach | FL | 32250 |
|
@@ -51,8 +47,7 @@ Feature: MongoDoc::Base
|
|
51
47
|
Then the last return value is false
|
52
48
|
|
53
49
|
Scenario: saving a has_many document
|
54
|
-
Given
|
55
|
-
And an empty Contact document collection
|
50
|
+
Given an empty Contact document collection
|
56
51
|
And a Contact document named 'hashrocket' :
|
57
52
|
| Name |
|
58
53
|
| Hashrocket |
|
@@ -66,8 +61,7 @@ Feature: MongoDoc::Base
|
|
66
61
|
And the document 'hashrocket' roundtrips
|
67
62
|
|
68
63
|
Scenario: saving from a child document
|
69
|
-
Given
|
70
|
-
And an empty Contact document collection
|
64
|
+
Given an empty Contact document collection
|
71
65
|
And a Contact document named 'hashrocket' :
|
72
66
|
| Name |
|
73
67
|
| Hashrocket |
|
@@ -81,8 +75,7 @@ Feature: MongoDoc::Base
|
|
81
75
|
And the document 'hashrocket' roundtrips
|
82
76
|
|
83
77
|
Scenario: failing to update attributes from a has_many child document
|
84
|
-
Given
|
85
|
-
And an empty Contact document collection
|
78
|
+
Given an empty Contact document collection
|
86
79
|
And a Contact document named 'hashrocket' :
|
87
80
|
| Name |
|
88
81
|
| Hashrocket |
|
@@ -99,8 +92,7 @@ Feature: MongoDoc::Base
|
|
99
92
|
Then the last return value is false
|
100
93
|
|
101
94
|
Scenario: update attributes from a has_one child document
|
102
|
-
Given
|
103
|
-
And an empty Place document collection
|
95
|
+
Given an empty Place document collection
|
104
96
|
And a Place document named 'hashrocket' :
|
105
97
|
| Name |
|
106
98
|
| Hashrocket |
|
@@ -114,4 +106,4 @@ Feature: MongoDoc::Base
|
|
114
106
|
| 320 1st St. N. | Jax Bch |
|
115
107
|
When I update the document 'address' with the hash named 'street'
|
116
108
|
Then the Place collection should have 1 document
|
117
|
-
And the document 'hashrocket' roundtrips
|
109
|
+
And the document 'hashrocket' roundtrips
|
@@ -1,17 +1,15 @@
|
|
1
1
|
Feature: saving an object
|
2
2
|
|
3
3
|
Scenario: saving simple json
|
4
|
-
Given a
|
5
|
-
And a new collection named 'test'
|
4
|
+
Given a new collection named 'test'
|
6
5
|
When I save the json '{"name":"name"}'
|
7
6
|
Then the collection should have 1 document
|
8
7
|
And the json '{"name":"name"}' roundtrips
|
9
|
-
|
8
|
+
|
10
9
|
Scenario: saving a ruby object
|
11
|
-
Given a
|
12
|
-
And a new collection named 'test'
|
10
|
+
Given a new collection named 'test'
|
13
11
|
And an object 'movie'
|
14
12
|
When I save the object 'movie'
|
15
13
|
Then the collection should have 1 document
|
16
14
|
And the object 'movie' roundtrips
|
17
|
-
|
15
|
+
|
@@ -1,11 +1,11 @@
|
|
1
1
|
Given /a new collection named '(.*)'/ do |name|
|
2
|
-
|
2
|
+
MongoDoc.database.drop_collection(name)
|
3
3
|
@collection = MongoDoc::Collection.new(name)
|
4
4
|
end
|
5
5
|
|
6
6
|
Given /^an empty (\w+) collection$/ do |name|
|
7
|
-
|
8
|
-
|
7
|
+
MongoDoc.database.drop_collection(name)
|
8
|
+
MongoDoc.database.create_collection(name, :strict => true)
|
9
9
|
end
|
10
10
|
|
11
11
|
Then /the collection should have (\d+) documents?/ do |count|
|
data/features/support/support.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
Feature: MongoDoc::Base
|
2
2
|
|
3
3
|
Background:
|
4
|
-
Given
|
5
|
-
And an empty Contact document collection
|
4
|
+
Given an empty Contact document collection
|
6
5
|
And a Contact document named 'hashrocket' :
|
7
6
|
| Name | Type |
|
8
7
|
| Hashrocket | company |
|
data/lib/mongodoc/connection.rb
CHANGED
@@ -1,20 +1,25 @@
|
|
1
1
|
module MongoDoc
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
mattr_accessor :config, :config_path, :connection, :database
|
3
|
+
self.config_path = './mongodb.yml'
|
4
|
+
|
5
|
+
def self.connect_to_database(name = nil, host = nil, port = nil, options = nil, force_connect = false)
|
6
|
+
name ||= configuration['name']
|
7
|
+
self.database = ((!force_connect && connection)|| connect(host, port, options)).db(name)
|
8
|
+
raise NoDatabaseError unless database
|
9
|
+
database
|
9
10
|
end
|
10
|
-
|
11
|
-
def self.connection
|
12
|
-
raise NoConnectionError unless defined? @@connection and @@connection
|
13
|
-
@@connection
|
14
|
-
end
|
15
|
-
|
11
|
+
|
16
12
|
def self.connect(*args)
|
17
13
|
opts = args.extract_options!
|
18
|
-
|
14
|
+
host = args[0] || configuration['host'] || configuration['host_pairs']
|
15
|
+
port = args[1] || configuration['port']
|
16
|
+
options = opts.empty? ? configuration['options'] || {} : opts
|
17
|
+
self.connection = Mongo::Connection.new(host, port, options)
|
18
|
+
raise NoConnectionError unless connection
|
19
|
+
connection
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.configuration
|
23
|
+
self.config ||= File.exists?(config_path || '') ? YAML.load_file(config_path) : {}
|
19
24
|
end
|
20
|
-
end
|
25
|
+
end
|
data/lib/mongodoc/criteria.rb
CHANGED
@@ -457,7 +457,7 @@ module MongoDoc #:nodoc:
|
|
457
457
|
#
|
458
458
|
# Returns either a cursor or an empty array.
|
459
459
|
def execute
|
460
|
-
cursor =
|
460
|
+
cursor = klass.collection.find(selector, options.dup)
|
461
461
|
if cursor
|
462
462
|
@count = cursor.count
|
463
463
|
cursor
|
data/lib/mongodoc.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
|
3
|
-
gem 'mongo', '0.
|
4
|
-
gem '
|
5
|
-
gem
|
3
|
+
gem 'mongo', '0.18.1'
|
4
|
+
gem 'mongo_ext', '0.18.1'
|
5
|
+
gem 'durran-validatable', '1.8.3'
|
6
|
+
gem 'leshill-will_paginate', '2.3.11'
|
6
7
|
|
7
8
|
require 'mongo'
|
8
9
|
require 'activesupport'
|
@@ -10,8 +11,8 @@ require 'validatable'
|
|
10
11
|
require 'will_paginate/collection'
|
11
12
|
|
12
13
|
module MongoDoc
|
13
|
-
VERSION = '0.1'
|
14
|
-
|
14
|
+
VERSION = '0.1.2'
|
15
|
+
|
15
16
|
class NoConnectionError < RuntimeError; end
|
16
17
|
class NoDatabaseError < RuntimeError; end
|
17
18
|
end
|
data/mongodb.example.yml
ADDED
data/mongodoc.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mongodoc}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Les Hill"]
|
12
|
-
s.date = %q{2009-12-
|
12
|
+
s.date = %q{2009-12-10}
|
13
13
|
s.description = %q{ODM for MongoDB}
|
14
14
|
s.email = %q{leshill@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,10 +24,10 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"data/.gitignore",
|
27
|
+
"features/mongodb.yml",
|
27
28
|
"features/mongodoc_base.feature",
|
28
29
|
"features/saving_an_object.feature",
|
29
30
|
"features/step_definitions/collection_steps.rb",
|
30
|
-
"features/step_definitions/connect_steps.rb",
|
31
31
|
"features/step_definitions/criteria_steps.rb",
|
32
32
|
"features/step_definitions/document_steps.rb",
|
33
33
|
"features/step_definitions/documents.rb",
|
@@ -64,6 +64,7 @@ Gem::Specification.new do |s|
|
|
64
64
|
"lib/mongodoc/proxy.rb",
|
65
65
|
"lib/mongodoc/query.rb",
|
66
66
|
"mongod.example.yml",
|
67
|
+
"mongodb.example.yml",
|
67
68
|
"mongodoc.gemspec",
|
68
69
|
"script/console",
|
69
70
|
"spec/attributes_spec.rb",
|
@@ -75,6 +76,8 @@ Gem::Specification.new do |s|
|
|
75
76
|
"spec/cursor_spec.rb",
|
76
77
|
"spec/document_ext.rb",
|
77
78
|
"spec/document_spec.rb",
|
79
|
+
"spec/mongodb.yml",
|
80
|
+
"spec/mongodb_pairs.yml",
|
78
81
|
"spec/parent_proxy_spec.rb",
|
79
82
|
"spec/query_spec.rb",
|
80
83
|
"spec/spec.opts",
|
@@ -105,24 +108,27 @@ Gem::Specification.new do |s|
|
|
105
108
|
s.specification_version = 3
|
106
109
|
|
107
110
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
108
|
-
s.add_runtime_dependency(%q<mongo>, ["= 0.
|
109
|
-
s.add_runtime_dependency(%q<
|
111
|
+
s.add_runtime_dependency(%q<mongo>, ["= 0.18.1"])
|
112
|
+
s.add_runtime_dependency(%q<mongo_ext>, ["= 0.18.1"])
|
113
|
+
s.add_runtime_dependency(%q<durran-validatable>, ["= 1.8.3"])
|
110
114
|
s.add_runtime_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
|
111
|
-
s.add_development_dependency(%q<rspec>, ["
|
112
|
-
s.add_development_dependency(%q<cucumber>, ["
|
115
|
+
s.add_development_dependency(%q<rspec>, ["= 1.2.9"])
|
116
|
+
s.add_development_dependency(%q<cucumber>, ["= 0.4.4"])
|
113
117
|
else
|
114
|
-
s.add_dependency(%q<mongo>, ["= 0.
|
115
|
-
s.add_dependency(%q<
|
118
|
+
s.add_dependency(%q<mongo>, ["= 0.18.1"])
|
119
|
+
s.add_dependency(%q<mongo_ext>, ["= 0.18.1"])
|
120
|
+
s.add_dependency(%q<durran-validatable>, ["= 1.8.3"])
|
116
121
|
s.add_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
|
117
|
-
s.add_dependency(%q<rspec>, ["
|
118
|
-
s.add_dependency(%q<cucumber>, ["
|
122
|
+
s.add_dependency(%q<rspec>, ["= 1.2.9"])
|
123
|
+
s.add_dependency(%q<cucumber>, ["= 0.4.4"])
|
119
124
|
end
|
120
125
|
else
|
121
|
-
s.add_dependency(%q<mongo>, ["= 0.
|
122
|
-
s.add_dependency(%q<
|
126
|
+
s.add_dependency(%q<mongo>, ["= 0.18.1"])
|
127
|
+
s.add_dependency(%q<mongo_ext>, ["= 0.18.1"])
|
128
|
+
s.add_dependency(%q<durran-validatable>, ["= 1.8.3"])
|
123
129
|
s.add_dependency(%q<leshill-will_paginate>, ["= 2.3.11"])
|
124
|
-
s.add_dependency(%q<rspec>, ["
|
125
|
-
s.add_dependency(%q<cucumber>, ["
|
130
|
+
s.add_dependency(%q<rspec>, ["= 1.2.9"])
|
131
|
+
s.add_dependency(%q<cucumber>, ["= 0.4.4"])
|
126
132
|
end
|
127
133
|
end
|
128
134
|
|
data/spec/connection_spec.rb
CHANGED
@@ -2,90 +2,198 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe "MongoDoc Connections" do
|
4
4
|
|
5
|
-
it "
|
6
|
-
|
7
|
-
end
|
8
|
-
|
9
|
-
it ".connection raises a no connection error when the connection has failed" do
|
10
|
-
MongoDoc.send(:class_variable_set, :@@connection, nil)
|
11
|
-
lambda {MongoDoc.connection}.should raise_error(MongoDoc::NoConnectionError)
|
5
|
+
it "default the configuration location to './mongodb.yml'" do
|
6
|
+
MongoDoc.config_path.should == './mongodb.yml'
|
12
7
|
end
|
13
8
|
|
14
9
|
describe ".connect" do
|
10
|
+
before do
|
11
|
+
MongoDoc.config_path = nil
|
12
|
+
MongoDoc.connection = nil
|
13
|
+
MongoDoc.config = nil
|
14
|
+
@connection = stub('connection')
|
15
|
+
end
|
16
|
+
|
15
17
|
it "when called with no params just connects" do
|
16
|
-
Mongo::Connection.should_receive(:new)
|
18
|
+
Mongo::Connection.should_receive(:new).and_return(@connection)
|
19
|
+
MongoDoc.connect
|
20
|
+
end
|
21
|
+
|
22
|
+
it "sets the connection" do
|
23
|
+
Mongo::Connection.stub(:new).and_return(@connection)
|
17
24
|
MongoDoc.connect
|
25
|
+
MongoDoc.connection.should == @connection
|
26
|
+
end
|
27
|
+
|
28
|
+
it "raises NoConnectionError if the connection fails" do
|
29
|
+
Mongo::Connection.stub(:new).and_return(nil)
|
30
|
+
lambda { MongoDoc.connect }.should raise_error(MongoDoc::NoConnectionError)
|
18
31
|
end
|
19
|
-
|
20
|
-
|
32
|
+
|
33
|
+
context "mimics the Mongo::Connection API" do
|
21
34
|
it "accepts the host param" do
|
22
35
|
host = 'localhost'
|
23
|
-
Mongo::Connection.should_receive(:new).with(host, nil, {})
|
36
|
+
Mongo::Connection.should_receive(:new).with(host, nil, {}).and_return(@connection)
|
24
37
|
MongoDoc.connect(host)
|
25
38
|
end
|
26
39
|
|
27
40
|
it "accepts the port param" do
|
28
41
|
host = 'localhost'
|
29
42
|
port = 3000
|
30
|
-
Mongo::Connection.should_receive(:new).with(host, 3000, {})
|
43
|
+
Mongo::Connection.should_receive(:new).with(host, 3000, {}).and_return(@connection)
|
31
44
|
MongoDoc.connect(host, port)
|
32
45
|
end
|
33
|
-
|
46
|
+
|
34
47
|
it "accepts an options hash" do
|
35
48
|
opts = {:slave_ok => true}
|
36
|
-
Mongo::Connection.should_receive(:new).with(nil, nil, opts)
|
49
|
+
Mongo::Connection.should_receive(:new).with(nil, nil, opts).and_return(@connection)
|
37
50
|
MongoDoc.connect(opts)
|
38
51
|
end
|
39
|
-
|
52
|
+
|
40
53
|
it "accepts host, port, and options" do
|
41
54
|
host = 'localhost'
|
42
55
|
port = 3000
|
43
56
|
opts = {:slave_ok => true}
|
44
|
-
Mongo::Connection.should_receive(:new).with(host, 3000, opts)
|
57
|
+
Mongo::Connection.should_receive(:new).with(host, 3000, opts).and_return(@connection)
|
45
58
|
MongoDoc.connect(host, port, opts)
|
46
59
|
end
|
47
60
|
end
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
61
|
+
|
62
|
+
context "when there is a config file" do
|
63
|
+
before do
|
64
|
+
MongoDoc.config_path = './spec/mongodb.yml'
|
65
|
+
config = YAML.load_file(MongoDoc.config_path)
|
66
|
+
@host = config['host']
|
67
|
+
@port = config['port']
|
68
|
+
@db_options = config['options']
|
69
|
+
end
|
70
|
+
|
71
|
+
context "with a host config file" do
|
72
|
+
|
73
|
+
it "and no params connects to the database with the values from the file" do
|
74
|
+
Mongo::Connection.should_receive(:new).with(@host, @port, @db_options).and_return(@connection)
|
75
|
+
MongoDoc.connect
|
76
|
+
end
|
77
|
+
|
78
|
+
it "and params connects to the database with the params" do
|
79
|
+
host = 'p_host'
|
80
|
+
port = 890
|
81
|
+
options = {:option => 'p_opt'}
|
82
|
+
Mongo::Connection.should_receive(:new).with(host, port, options).and_return(@connection)
|
83
|
+
MongoDoc.connect(host, port, options)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
context "with a host pairs config file" do
|
88
|
+
before do
|
89
|
+
MongoDoc.config_path = './spec/mongodb_pairs.yml'
|
90
|
+
config = YAML.load_file(MongoDoc.config_path)
|
91
|
+
@host_pairs = config['host_pairs']
|
92
|
+
@port = config['port']
|
93
|
+
@db_options = config['options']
|
94
|
+
end
|
95
|
+
|
96
|
+
it "connects to the database with the host pairs value from the file" do
|
97
|
+
Mongo::Connection.should_receive(:new).with(@host_pairs, @port, @db_options).and_return(@connection)
|
98
|
+
MongoDoc.connect
|
99
|
+
end
|
100
|
+
end
|
54
101
|
end
|
55
102
|
end
|
56
|
-
|
57
|
-
describe ".
|
58
|
-
|
59
|
-
|
103
|
+
|
104
|
+
describe ".connect_to_database" do
|
105
|
+
before do
|
106
|
+
MongoDoc.database = nil
|
107
|
+
MongoDoc.connection = nil
|
108
|
+
MongoDoc.config = nil
|
60
109
|
end
|
61
110
|
|
62
111
|
it "raises a no database error when the database connect failed" do
|
63
|
-
|
64
|
-
|
112
|
+
connection = stub("connection", :db => nil)
|
113
|
+
MongoDoc.stub(:connect).and_return(connection)
|
114
|
+
lambda {MongoDoc.connect_to_database}.should raise_error(MongoDoc::NoDatabaseError)
|
65
115
|
end
|
66
116
|
|
67
|
-
it "returns the
|
117
|
+
it "returns the database" do
|
68
118
|
db = 'db'
|
69
|
-
|
70
|
-
MongoDoc.
|
119
|
+
connection = stub("connection", :db => db)
|
120
|
+
MongoDoc.stub(:connect).and_return(connection)
|
121
|
+
MongoDoc.connect_to_database.should == db
|
71
122
|
end
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
123
|
+
|
124
|
+
context "when a connection exists" do
|
125
|
+
before do
|
126
|
+
@db = 'db'
|
127
|
+
@connection = stub("connection", :db => @db)
|
128
|
+
end
|
129
|
+
|
130
|
+
it "uses the exsiting connection if already connected" do
|
131
|
+
MongoDoc.should_receive(:connection).and_return(@connection)
|
132
|
+
MongoDoc.should_not_receive(:connect)
|
133
|
+
MongoDoc.connect_to_database.should == @db
|
134
|
+
end
|
135
|
+
|
136
|
+
it "connects if force connect is true" do
|
137
|
+
MongoDoc.should_not_receive(:connection)
|
138
|
+
MongoDoc.should_receive(:connect).and_return(@connection)
|
139
|
+
MongoDoc.connect_to_database(nil, nil, nil, nil, true).should == @db
|
140
|
+
end
|
79
141
|
end
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
142
|
+
|
143
|
+
context "when there is no config file" do
|
144
|
+
before do
|
145
|
+
MongoDoc.config_path = nil
|
146
|
+
@db = 'db'
|
147
|
+
@name = 'name'
|
148
|
+
@connection = stub('connection')
|
149
|
+
end
|
150
|
+
|
151
|
+
it "connects with defaults when not given parameters" do
|
152
|
+
@connection.should_receive(:db).with(@name).and_return(@db)
|
153
|
+
MongoDoc.should_receive(:connect).and_return(@connection)
|
154
|
+
MongoDoc.connect_to_database(@name)
|
155
|
+
end
|
156
|
+
|
157
|
+
it "connects with the given parameters" do
|
158
|
+
host = 'host'
|
159
|
+
port = 123
|
160
|
+
options = { :auto_reconnect => true }
|
161
|
+
@connection.should_receive(:db).with(@name).and_return(@db)
|
162
|
+
MongoDoc.should_receive(:connect).with(host, port, options).and_return(@connection)
|
163
|
+
MongoDoc.connect_to_database(@name, host, port, options)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
context "when there is a config file" do
|
168
|
+
before do
|
169
|
+
@db = 'db'
|
170
|
+
MongoDoc.config_path = './spec/mongodb.yml'
|
171
|
+
config = YAML.load_file(MongoDoc.config_path)
|
172
|
+
@database = config['name']
|
173
|
+
@host = config['host']
|
174
|
+
@port = config['port']
|
175
|
+
@db_options = config['options']
|
176
|
+
@connection = stub('connection')
|
177
|
+
end
|
178
|
+
|
179
|
+
context "with a host config file" do
|
180
|
+
|
181
|
+
it "without a name uses configured name" do
|
182
|
+
@connection.should_receive(:db).with(@database).and_return(@db)
|
183
|
+
MongoDoc.stub(:connect).and_return(@connection)
|
184
|
+
MongoDoc.connect_to_database
|
185
|
+
end
|
186
|
+
|
187
|
+
it "and params connects to the database with the params" do
|
188
|
+
database = 'p_database'
|
189
|
+
host = 'p_host'
|
190
|
+
port = 890
|
191
|
+
options = {:option => 'p_opt'}
|
192
|
+
@connection.should_receive(:db).with(database).and_return(@db)
|
193
|
+
MongoDoc.should_receive(:connect).with(host, port, options).and_return(@connection)
|
194
|
+
MongoDoc.connect_to_database(database, host, port, options)
|
195
|
+
end
|
196
|
+
end
|
89
197
|
end
|
90
198
|
end
|
91
|
-
end
|
199
|
+
end
|
data/spec/mongodb.yml
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongodoc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Hill
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-12-
|
12
|
+
date: 2009-12-10 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,17 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - "="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 0.18.1
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: mongo_ext
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.18.1
|
24
34
|
version:
|
25
35
|
- !ruby/object:Gem::Dependency
|
26
36
|
name: durran-validatable
|
@@ -30,7 +40,7 @@ dependencies:
|
|
30
40
|
requirements:
|
31
41
|
- - "="
|
32
42
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.8.
|
43
|
+
version: 1.8.3
|
34
44
|
version:
|
35
45
|
- !ruby/object:Gem::Dependency
|
36
46
|
name: leshill-will_paginate
|
@@ -48,9 +58,9 @@ dependencies:
|
|
48
58
|
version_requirement:
|
49
59
|
version_requirements: !ruby/object:Gem::Requirement
|
50
60
|
requirements:
|
51
|
-
- - "
|
61
|
+
- - "="
|
52
62
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
63
|
+
version: 1.2.9
|
54
64
|
version:
|
55
65
|
- !ruby/object:Gem::Dependency
|
56
66
|
name: cucumber
|
@@ -58,9 +68,9 @@ dependencies:
|
|
58
68
|
version_requirement:
|
59
69
|
version_requirements: !ruby/object:Gem::Requirement
|
60
70
|
requirements:
|
61
|
-
- - "
|
71
|
+
- - "="
|
62
72
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
73
|
+
version: 0.4.4
|
64
74
|
version:
|
65
75
|
description: ODM for MongoDB
|
66
76
|
email: leshill@gmail.com
|
@@ -79,10 +89,10 @@ files:
|
|
79
89
|
- Rakefile
|
80
90
|
- VERSION
|
81
91
|
- data/.gitignore
|
92
|
+
- features/mongodb.yml
|
82
93
|
- features/mongodoc_base.feature
|
83
94
|
- features/saving_an_object.feature
|
84
95
|
- features/step_definitions/collection_steps.rb
|
85
|
-
- features/step_definitions/connect_steps.rb
|
86
96
|
- features/step_definitions/criteria_steps.rb
|
87
97
|
- features/step_definitions/document_steps.rb
|
88
98
|
- features/step_definitions/documents.rb
|
@@ -119,6 +129,7 @@ files:
|
|
119
129
|
- lib/mongodoc/proxy.rb
|
120
130
|
- lib/mongodoc/query.rb
|
121
131
|
- mongod.example.yml
|
132
|
+
- mongodb.example.yml
|
122
133
|
- mongodoc.gemspec
|
123
134
|
- script/console
|
124
135
|
- spec/attributes_spec.rb
|
@@ -130,6 +141,8 @@ files:
|
|
130
141
|
- spec/cursor_spec.rb
|
131
142
|
- spec/document_ext.rb
|
132
143
|
- spec/document_spec.rb
|
144
|
+
- spec/mongodb.yml
|
145
|
+
- spec/mongodb_pairs.yml
|
133
146
|
- spec/parent_proxy_spec.rb
|
134
147
|
- spec/query_spec.rb
|
135
148
|
- spec/spec.opts
|