mongodoc 0.1.1 → 0.1.2
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.
- 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
|