mongo_mapper 0.7.6 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -8
- data/bin/mmconsole +1 -1
- data/examples/keys.rb +37 -0
- data/examples/plugins.rb +41 -0
- data/examples/querying.rb +35 -0
- data/examples/scopes.rb +52 -0
- data/lib/mongo_mapper.rb +77 -97
- data/lib/mongo_mapper/connection.rb +83 -0
- data/lib/mongo_mapper/document.rb +10 -252
- data/lib/mongo_mapper/embedded_document.rb +7 -46
- data/lib/mongo_mapper/exceptions.rb +30 -0
- data/lib/mongo_mapper/extensions/array.rb +19 -0
- data/lib/mongo_mapper/extensions/binary.rb +22 -0
- data/lib/mongo_mapper/extensions/boolean.rb +44 -0
- data/lib/mongo_mapper/extensions/date.rb +25 -0
- data/lib/mongo_mapper/extensions/float.rb +14 -0
- data/lib/mongo_mapper/extensions/hash.rb +14 -0
- data/lib/mongo_mapper/extensions/integer.rb +19 -0
- data/lib/mongo_mapper/extensions/kernel.rb +9 -0
- data/lib/mongo_mapper/extensions/nil_class.rb +18 -0
- data/lib/mongo_mapper/extensions/object.rb +27 -0
- data/lib/mongo_mapper/extensions/object_id.rb +30 -0
- data/lib/mongo_mapper/extensions/set.rb +20 -0
- data/lib/mongo_mapper/extensions/string.rb +18 -0
- data/lib/mongo_mapper/extensions/time.rb +29 -0
- data/lib/mongo_mapper/plugins.rb +1 -21
- data/lib/mongo_mapper/plugins/accessible.rb +44 -0
- data/lib/mongo_mapper/plugins/associations.rb +7 -24
- data/lib/mongo_mapper/plugins/associations/base.rb +1 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +5 -6
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +5 -6
- data/lib/mongo_mapper/plugins/associations/collection.rb +1 -0
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +2 -1
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +22 -39
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +4 -4
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +22 -23
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +1 -0
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +1 -0
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +1 -0
- data/lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb +2 -3
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +6 -7
- data/lib/mongo_mapper/plugins/associations/proxy.rb +8 -6
- data/lib/mongo_mapper/plugins/caching.rb +21 -0
- data/lib/mongo_mapper/plugins/callbacks.rb +4 -3
- data/lib/mongo_mapper/plugins/clone.rb +10 -4
- data/lib/mongo_mapper/plugins/descendants.rb +1 -0
- data/lib/mongo_mapper/plugins/dirty.rb +1 -0
- data/lib/mongo_mapper/plugins/document.rb +41 -0
- data/lib/mongo_mapper/plugins/dynamic_querying.rb +41 -0
- data/lib/mongo_mapper/{support/find.rb → plugins/dynamic_querying/dynamic_finder.rb} +3 -36
- data/lib/mongo_mapper/plugins/embedded_document.rb +49 -0
- data/lib/mongo_mapper/plugins/equality.rb +3 -9
- data/lib/mongo_mapper/plugins/identity_map.rb +8 -10
- data/lib/mongo_mapper/plugins/indexes.rb +12 -0
- data/lib/mongo_mapper/plugins/inspect.rb +1 -0
- data/lib/mongo_mapper/plugins/keys.rb +15 -27
- data/lib/mongo_mapper/plugins/keys/key.rb +14 -3
- data/lib/mongo_mapper/plugins/logger.rb +1 -0
- data/lib/mongo_mapper/plugins/modifiers.rb +3 -2
- data/lib/mongo_mapper/plugins/pagination.rb +5 -15
- data/lib/mongo_mapper/plugins/persistence.rb +12 -11
- data/lib/mongo_mapper/plugins/protected.rb +8 -0
- data/lib/mongo_mapper/plugins/querying.rb +236 -0
- data/lib/mongo_mapper/plugins/querying/decorator.rb +46 -0
- data/lib/mongo_mapper/plugins/rails.rb +1 -0
- data/lib/mongo_mapper/plugins/safe.rb +28 -0
- data/lib/mongo_mapper/plugins/sci.rb +32 -0
- data/lib/mongo_mapper/plugins/scopes.rb +21 -0
- data/lib/mongo_mapper/plugins/serialization.rb +1 -0
- data/lib/mongo_mapper/plugins/timestamps.rb +1 -0
- data/lib/mongo_mapper/plugins/userstamps.rb +1 -0
- data/lib/mongo_mapper/plugins/validations.rb +5 -1
- data/lib/mongo_mapper/support/descendant_appends.rb +5 -6
- data/lib/mongo_mapper/version.rb +2 -1
- data/test/NOTE_ON_TESTING +1 -0
- data/test/active_model_lint_test.rb +13 -0
- data/test/functional/associations/test_belongs_to_polymorphic_proxy.rb +63 -0
- data/test/functional/associations/test_belongs_to_proxy.rb +93 -0
- data/test/functional/associations/test_in_array_proxy.rb +319 -0
- data/test/functional/associations/test_many_documents_as_proxy.rb +229 -0
- data/test/functional/associations/test_many_documents_proxy.rb +536 -0
- data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +176 -0
- data/test/functional/associations/test_many_embedded_proxy.rb +256 -0
- data/test/functional/associations/test_many_polymorphic_proxy.rb +302 -0
- data/test/functional/associations/test_one_embedded_proxy.rb +58 -0
- data/test/functional/associations/test_one_proxy.rb +182 -0
- data/test/functional/test_accessible.rb +168 -0
- data/test/functional/test_associations.rb +44 -0
- data/test/functional/test_binary.rb +27 -0
- data/test/functional/test_caching.rb +76 -0
- data/test/functional/test_callbacks.rb +151 -0
- data/test/functional/test_dirty.rb +163 -0
- data/test/functional/test_document.rb +253 -0
- data/test/functional/test_dynamic_querying.rb +75 -0
- data/test/functional/test_embedded_document.rb +210 -0
- data/test/functional/test_identity_map.rb +506 -0
- data/test/functional/test_indexes.rb +42 -0
- data/test/functional/test_logger.rb +20 -0
- data/test/functional/test_modifiers.rb +416 -0
- data/test/functional/test_pagination.rb +91 -0
- data/test/functional/test_protected.rb +175 -0
- data/test/functional/test_querying.rb +873 -0
- data/test/functional/test_safe.rb +76 -0
- data/test/functional/test_sci.rb +230 -0
- data/test/functional/test_scopes.rb +171 -0
- data/test/functional/test_string_id_compatibility.rb +67 -0
- data/test/functional/test_timestamps.rb +62 -0
- data/test/functional/test_userstamps.rb +27 -0
- data/test/functional/test_validations.rb +342 -0
- data/test/models.rb +227 -0
- data/test/test_helper.rb +98 -0
- data/test/unit/associations/test_base.rb +212 -0
- data/test/unit/associations/test_proxy.rb +105 -0
- data/test/unit/serializers/test_json_serializer.rb +202 -0
- data/test/unit/test_clone.rb +69 -0
- data/test/unit/test_descendant_appends.rb +71 -0
- data/test/unit/test_document.rb +213 -0
- data/test/unit/test_dynamic_finder.rb +125 -0
- data/test/unit/test_embedded_document.rb +644 -0
- data/test/unit/test_extensions.rb +380 -0
- data/test/unit/test_key.rb +185 -0
- data/test/unit/test_keys.rb +55 -0
- data/test/unit/test_mongo_mapper.rb +110 -0
- data/test/unit/test_pagination.rb +11 -0
- data/test/unit/test_plugins.rb +50 -0
- data/test/unit/test_rails.rb +181 -0
- data/test/unit/test_rails_compatibility.rb +52 -0
- data/test/unit/test_serialization.rb +51 -0
- data/test/unit/test_time_zones.rb +39 -0
- data/test/unit/test_validations.rb +544 -0
- metadata +113 -44
- data/lib/mongo_mapper/plugins/pagination/proxy.rb +0 -72
- data/lib/mongo_mapper/query.rb +0 -23
- data/lib/mongo_mapper/support.rb +0 -196
data/README.rdoc
CHANGED
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
A Ruby Object Mapper for Mongo.
|
4
4
|
|
5
|
-
Releases are tagged on github and released on gemcutter. Master is pushed to whenever I add a patch or a new feature, but I do not release a new gem version each time I push.
|
6
|
-
|
7
5
|
== Note on Patches/Pull Requests
|
8
6
|
|
9
7
|
* Fork the project.
|
@@ -18,14 +16,12 @@ Releases are tagged on github and released on gemcutter. Master is pushed to whe
|
|
18
16
|
|
19
17
|
== Problems or Questions?
|
20
18
|
|
21
|
-
Hit up the google group
|
19
|
+
Hit up the google group:
|
22
20
|
http://groups.google.com/group/mongomapper
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
There is no need to request to join the Pivotal Tracker project as I am only granting access to a select few (easier to keep things organized). If you have a problem, please use the mailing list. If I confirm it to be a bug, I am happy to add it to PT. Thanks!
|
22
|
+
Hop on IRC:
|
23
|
+
irc://chat.freenode.net/#mongomapper
|
28
24
|
|
29
25
|
== Copyright
|
30
26
|
|
31
|
-
|
27
|
+
See LICENSE for details.
|
data/bin/mmconsole
CHANGED
data/examples/keys.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require 'mongo_mapper'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MongoMapper.database = 'testing'
|
6
|
+
|
7
|
+
class User
|
8
|
+
include MongoMapper::Document
|
9
|
+
|
10
|
+
key :first_name, String, :required => true
|
11
|
+
key :last_name, String, :required => true
|
12
|
+
key :token, String, :default => lambda { 'some random string' }
|
13
|
+
key :age, Integer
|
14
|
+
key :skills, Array
|
15
|
+
key :friend_ids, Array, :typecast => 'ObjectId'
|
16
|
+
timestamps!
|
17
|
+
end
|
18
|
+
User.collection.remove # empties collection
|
19
|
+
|
20
|
+
john = User.create({
|
21
|
+
:first_name => 'John',
|
22
|
+
:last_name => 'Nunemaker',
|
23
|
+
:age => 28,
|
24
|
+
:skills => ['ruby', 'mongo', 'javascript'],
|
25
|
+
})
|
26
|
+
|
27
|
+
steve = User.create({
|
28
|
+
:first_name => 'Steve',
|
29
|
+
:last_name => 'Smith',
|
30
|
+
:age => 29,
|
31
|
+
:skills => ['html', 'css', 'javascript', 'design'],
|
32
|
+
})
|
33
|
+
|
34
|
+
john.friend_ids << steve.id.to_s # will get typecast to ObjectId
|
35
|
+
john.save
|
36
|
+
|
37
|
+
pp john
|
data/examples/plugins.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require 'mongo_mapper'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MongoMapper.database = 'testing'
|
6
|
+
|
7
|
+
# To create your own plugin, just create a module.
|
8
|
+
module FooPlugin
|
9
|
+
|
10
|
+
# ClassMethods module will automatically get extended
|
11
|
+
module ClassMethods
|
12
|
+
def foo
|
13
|
+
'Foo class method!'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# InstanceMethods module will automatically get included
|
18
|
+
module InstanceMethods
|
19
|
+
def foo
|
20
|
+
'Foo instance method!'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# If present, configure method will be called and passed the
|
25
|
+
# model as an argument. Feel free to class_eval or add keys.
|
26
|
+
# if method is not present, it doesn't call it.
|
27
|
+
def self.configure(model)
|
28
|
+
puts "Configuring #{model}..."
|
29
|
+
model.key :foo, String
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
class User
|
35
|
+
include MongoMapper::Document
|
36
|
+
plugin FooPlugin
|
37
|
+
end
|
38
|
+
|
39
|
+
puts User.foo
|
40
|
+
puts User.new.foo
|
41
|
+
puts User.key?(:foo)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require 'mongo_mapper'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MongoMapper.database = 'testing'
|
6
|
+
|
7
|
+
class User
|
8
|
+
include MongoMapper::Document
|
9
|
+
|
10
|
+
key :name, String
|
11
|
+
key :tags, Array
|
12
|
+
end
|
13
|
+
User.collection.remove # empties collection
|
14
|
+
|
15
|
+
User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
|
16
|
+
User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
|
17
|
+
User.create(:name => 'Frank', :tags => %w[mongo], :age => 35)
|
18
|
+
User.create(:name => 'Steve', :tags => %w[html5 css3], :age => 27)
|
19
|
+
|
20
|
+
[
|
21
|
+
|
22
|
+
User.all(:name => 'John'),
|
23
|
+
User.all(:tags => %w[mongo]),
|
24
|
+
User.all(:tags.all => %w[ruby mongo]),
|
25
|
+
User.all(:age.gte => 30),
|
26
|
+
|
27
|
+
User.where(:age.gt => 27).sort(:age).all,
|
28
|
+
User.where(:age.gt => 27).sort(:age.desc).all,
|
29
|
+
User.where(:age.gt => 27).sort(:age).limit(1).all,
|
30
|
+
User.where(:age.gt => 27).sort(:age).skip(1).limit(1).all,
|
31
|
+
|
32
|
+
].each do |result|
|
33
|
+
pp result
|
34
|
+
puts
|
35
|
+
end
|
data/examples/scopes.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
|
2
|
+
require 'mongo_mapper'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MongoMapper.database = 'testing'
|
6
|
+
|
7
|
+
class User
|
8
|
+
include MongoMapper::Document
|
9
|
+
|
10
|
+
# plain old vanilla scopes with fancy queries
|
11
|
+
scope :johns, where(:name => 'John')
|
12
|
+
|
13
|
+
# plain old vanilla scopes with hashes
|
14
|
+
scope :bills, :name => 'Bill'
|
15
|
+
|
16
|
+
# dynamic scopes with parameters
|
17
|
+
scope :by_name, lambda { |name| where(:name => name) }
|
18
|
+
scope :by_ages, lambda { |low, high| where(:age.gte => low, :age.lte => high) }
|
19
|
+
|
20
|
+
# Yep, even plain old methods work as long as they return a query
|
21
|
+
def self.by_tag(tag)
|
22
|
+
where(:tags => tag)
|
23
|
+
end
|
24
|
+
|
25
|
+
# You can even make a method that returns a scope
|
26
|
+
def self.twenties; by_ages(20, 29) end
|
27
|
+
|
28
|
+
key :name, String
|
29
|
+
key :tags, Array
|
30
|
+
end
|
31
|
+
User.collection.remove # empties collection
|
32
|
+
|
33
|
+
User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
|
34
|
+
User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
|
35
|
+
User.create(:name => 'Frank', :tags => %w[mongo], :age => 35)
|
36
|
+
User.create(:name => 'Steve', :tags => %w[html5 css3], :age => 27)
|
37
|
+
|
38
|
+
# simple scopes
|
39
|
+
pp User.johns.first
|
40
|
+
pp User.bills.first
|
41
|
+
|
42
|
+
# scope with arg
|
43
|
+
pp User.by_name('Frank').first
|
44
|
+
|
45
|
+
# scope with two args
|
46
|
+
pp User.by_ages(20, 29).all
|
47
|
+
|
48
|
+
# chaining class methods on scopes
|
49
|
+
pp User.by_ages(20, 40).by_tag('ruby').all
|
50
|
+
|
51
|
+
# scope made using method that returns scope
|
52
|
+
pp User.twenties.all
|
data/lib/mongo_mapper.rb
CHANGED
@@ -1,114 +1,94 @@
|
|
1
|
+
# encoding: UTF-8
|
1
2
|
# Make sure you have the correct versions of the gems (see gemspec) in your load path.
|
2
|
-
require 'set'
|
3
|
-
require 'uri'
|
4
|
-
require 'mongo'
|
5
3
|
require 'plucky'
|
6
4
|
require 'validatable'
|
7
5
|
require 'active_support/all'
|
8
6
|
|
9
7
|
module MongoMapper
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
8
|
+
autoload :Connection, 'mongo_mapper/connection'
|
9
|
+
|
10
|
+
autoload :Error, 'mongo_mapper/exceptions'
|
11
|
+
autoload :KeyNotFound, 'mongo_mapper/exceptions'
|
12
|
+
autoload :DocumentNotFound, 'mongo_mapper/exceptions'
|
13
|
+
autoload :InvalidScheme, 'mongo_mapper/exceptions'
|
14
|
+
autoload :DocumentNotValid, 'mongo_mapper/exceptions'
|
15
|
+
autoload :AccessibleOrProtected, 'mongo_mapper/exceptions'
|
16
|
+
|
17
|
+
autoload :Document, 'mongo_mapper/document'
|
18
|
+
autoload :EmbeddedDocument, 'mongo_mapper/embedded_document'
|
19
|
+
autoload :Plugins, 'mongo_mapper/plugins'
|
20
|
+
autoload :Version, 'mongo_mapper/version'
|
21
|
+
|
22
|
+
module Plugins
|
23
|
+
autoload :Associations, 'mongo_mapper/plugins/associations'
|
24
|
+
autoload :Accessible, 'mongo_mapper/plugins/accessible'
|
25
|
+
autoload :Callbacks, 'mongo_mapper/plugins/callbacks'
|
26
|
+
autoload :Caching, 'mongo_mapper/plugins/caching'
|
27
|
+
autoload :Clone, 'mongo_mapper/plugins/clone'
|
28
|
+
autoload :Descendants, 'mongo_mapper/plugins/descendants'
|
29
|
+
autoload :Dirty, 'mongo_mapper/plugins/dirty'
|
30
|
+
autoload :Document, 'mongo_mapper/plugins/document'
|
31
|
+
autoload :DynamicQuerying, 'mongo_mapper/plugins/dynamic_querying'
|
32
|
+
autoload :EmbeddedDocument, 'mongo_mapper/plugins/embedded_document'
|
33
|
+
autoload :Equality, 'mongo_mapper/plugins/equality'
|
34
|
+
autoload :IdentityMap, 'mongo_mapper/plugins/identity_map'
|
35
|
+
autoload :Inspect, 'mongo_mapper/plugins/inspect'
|
36
|
+
autoload :Indexes, 'mongo_mapper/plugins/indexes'
|
37
|
+
autoload :Keys, 'mongo_mapper/plugins/keys'
|
38
|
+
autoload :Logger, 'mongo_mapper/plugins/logger'
|
39
|
+
autoload :Modifiers, 'mongo_mapper/plugins/modifiers'
|
40
|
+
autoload :Pagination, 'mongo_mapper/plugins/pagination'
|
41
|
+
autoload :Persistence, 'mongo_mapper/plugins/persistence'
|
42
|
+
autoload :Protected, 'mongo_mapper/plugins/protected'
|
43
|
+
autoload :Querying, 'mongo_mapper/plugins/querying'
|
44
|
+
autoload :Rails, 'mongo_mapper/plugins/rails'
|
45
|
+
autoload :Safe, 'mongo_mapper/plugins/safe'
|
46
|
+
autoload :Sci, 'mongo_mapper/plugins/sci'
|
47
|
+
autoload :Scopes, 'mongo_mapper/plugins/scopes'
|
48
|
+
autoload :Serialization, 'mongo_mapper/plugins/serialization'
|
49
|
+
autoload :Timestamps, 'mongo_mapper/plugins/timestamps'
|
50
|
+
autoload :Userstamps, 'mongo_mapper/plugins/userstamps'
|
51
|
+
autoload :Validations, 'mongo_mapper/plugins/validations'
|
52
|
+
|
53
|
+
module Associations
|
54
|
+
autoload :Base, 'mongo_mapper/plugins/associations/base'
|
55
|
+
autoload :Collection, 'mongo_mapper/plugins/associations/collection'
|
56
|
+
autoload :EmbeddedCollection, 'mongo_mapper/plugins/associations/embedded_collection'
|
57
|
+
autoload :ManyDocumentsProxy, 'mongo_mapper/plugins/associations/many_documents_proxy'
|
58
|
+
autoload :BelongsToProxy, 'mongo_mapper/plugins/associations/belongs_to_proxy'
|
59
|
+
autoload :BelongsToPolymorphicProxy, 'mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy'
|
60
|
+
autoload :ManyPolymorphicProxy, 'mongo_mapper/plugins/associations/many_polymorphic_proxy'
|
61
|
+
autoload :ManyEmbeddedProxy, 'mongo_mapper/plugins/associations/many_embedded_proxy'
|
62
|
+
autoload :ManyEmbeddedPolymorphicProxy, 'mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy'
|
63
|
+
autoload :ManyDocumentsAsProxy, 'mongo_mapper/plugins/associations/many_documents_as_proxy'
|
64
|
+
autoload :OneProxy, 'mongo_mapper/plugins/associations/one_proxy'
|
65
|
+
autoload :OneEmbeddedProxy, 'mongo_mapper/plugins/associations/one_embedded_proxy'
|
66
|
+
autoload :InArrayProxy, 'mongo_mapper/plugins/associations/in_array_proxy'
|
26
67
|
end
|
27
|
-
end
|
28
|
-
|
29
|
-
# @api public
|
30
|
-
def self.connection
|
31
|
-
@@connection ||= Mongo::Connection.new
|
32
|
-
end
|
33
68
|
|
34
|
-
|
35
|
-
|
36
|
-
@@connection = new_connection
|
37
|
-
end
|
38
|
-
|
39
|
-
# @api public
|
40
|
-
def self.logger
|
41
|
-
connection.logger
|
42
|
-
end
|
43
|
-
|
44
|
-
# @api public
|
45
|
-
def self.database=(name)
|
46
|
-
@@database = nil
|
47
|
-
@@database_name = name
|
48
|
-
end
|
49
|
-
|
50
|
-
# @api public
|
51
|
-
def self.database
|
52
|
-
if @@database_name.blank?
|
53
|
-
raise 'You forgot to set the default database name: MongoMapper.database = "foobar"'
|
69
|
+
module DynamicQuerying
|
70
|
+
autoload :DynamicFinder, 'mongo_mapper/plugins/dynamic_querying/dynamic_finder'
|
54
71
|
end
|
55
72
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
def self.config
|
64
|
-
raise 'Set config before connecting. MongoMapper.config = {...}' unless defined?(@@config)
|
65
|
-
@@config
|
66
|
-
end
|
67
|
-
|
68
|
-
# @api private
|
69
|
-
def self.config_for_environment(environment)
|
70
|
-
env = config[environment]
|
71
|
-
return env if env['uri'].blank?
|
72
|
-
|
73
|
-
uri = URI.parse(env['uri'])
|
74
|
-
raise InvalidScheme.new('must be mongodb') unless uri.scheme == 'mongodb'
|
75
|
-
{
|
76
|
-
'host' => uri.host,
|
77
|
-
'port' => uri.port,
|
78
|
-
'database' => uri.path.gsub(/^\//, ''),
|
79
|
-
'username' => uri.user,
|
80
|
-
'password' => uri.password,
|
81
|
-
}
|
82
|
-
end
|
83
|
-
|
84
|
-
def self.connect(environment, options={})
|
85
|
-
raise 'Set config before connecting. MongoMapper.config = {...}' if config.blank?
|
86
|
-
env = config_for_environment(environment)
|
87
|
-
MongoMapper.connection = Mongo::Connection.new(env['host'], env['port'], options)
|
88
|
-
MongoMapper.database = env['database']
|
89
|
-
MongoMapper.database.authenticate(env['username'], env['password']) if env['username'] && env['password']
|
73
|
+
module Keys
|
74
|
+
autoload :Key, 'mongo_mapper/plugins/keys/key'
|
75
|
+
end
|
76
|
+
|
77
|
+
module Querying
|
78
|
+
autoload :Decorator, 'mongo_mapper/plugins/querying/decorator'
|
79
|
+
end
|
90
80
|
end
|
91
81
|
|
92
|
-
|
93
|
-
|
94
|
-
handle_passenger_forking if using_passenger
|
95
|
-
self.config = config
|
96
|
-
connect(environment, options)
|
82
|
+
module Support
|
83
|
+
autoload :DescendantAppends, 'mongo_mapper/support/descendant_appends'
|
97
84
|
end
|
98
85
|
|
99
|
-
|
100
|
-
|
101
|
-
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
102
|
-
connection.connect_to_master if forked
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
86
|
+
extend Connection
|
87
|
+
end
|
106
88
|
|
107
|
-
|
108
|
-
|
109
|
-
autoload :EmbeddedDocument, 'mongo_mapper/embedded_document'
|
110
|
-
autoload :Version, 'mongo_mapper/version'
|
89
|
+
Dir[File.join(File.dirname(__FILE__), 'mongo_mapper', 'extensions', '*.rb')].each do |extension|
|
90
|
+
require extension
|
111
91
|
end
|
112
92
|
|
113
|
-
|
114
|
-
require 'mongo_mapper/plugins'
|
93
|
+
# FIXME: autoload with proxy is failing, need to investigate
|
94
|
+
require 'mongo_mapper/plugins/associations/proxy'
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'uri'
|
3
|
+
|
4
|
+
module MongoMapper
|
5
|
+
module Connection
|
6
|
+
# @api public
|
7
|
+
def connection
|
8
|
+
@@connection ||= Mongo::Connection.new
|
9
|
+
end
|
10
|
+
|
11
|
+
# @api public
|
12
|
+
def connection=(new_connection)
|
13
|
+
@@connection = new_connection
|
14
|
+
end
|
15
|
+
|
16
|
+
# @api public
|
17
|
+
def logger
|
18
|
+
connection.logger
|
19
|
+
end
|
20
|
+
|
21
|
+
# @api public
|
22
|
+
def database=(name)
|
23
|
+
@@database = nil
|
24
|
+
@@database_name = name
|
25
|
+
end
|
26
|
+
|
27
|
+
# @api public
|
28
|
+
def database
|
29
|
+
if @@database_name.blank?
|
30
|
+
raise 'You forgot to set the default database name: MongoMapper.database = "foobar"'
|
31
|
+
end
|
32
|
+
|
33
|
+
@@database ||= MongoMapper.connection.db(@@database_name)
|
34
|
+
end
|
35
|
+
|
36
|
+
def config=(hash)
|
37
|
+
@@config = hash
|
38
|
+
end
|
39
|
+
|
40
|
+
def config
|
41
|
+
raise 'Set config before connecting. MongoMapper.config = {...}' unless defined?(@@config)
|
42
|
+
@@config
|
43
|
+
end
|
44
|
+
|
45
|
+
# @api private
|
46
|
+
def config_for_environment(environment)
|
47
|
+
env = config[environment]
|
48
|
+
return env if env['uri'].blank?
|
49
|
+
|
50
|
+
uri = URI.parse(env['uri'])
|
51
|
+
raise InvalidScheme.new('must be mongodb') unless uri.scheme == 'mongodb'
|
52
|
+
{
|
53
|
+
'host' => uri.host,
|
54
|
+
'port' => uri.port,
|
55
|
+
'database' => uri.path.gsub(/^\//, ''),
|
56
|
+
'username' => uri.user,
|
57
|
+
'password' => uri.password,
|
58
|
+
}
|
59
|
+
end
|
60
|
+
|
61
|
+
def connect(environment, options={})
|
62
|
+
raise 'Set config before connecting. MongoMapper.config = {...}' if config.blank?
|
63
|
+
env = config_for_environment(environment)
|
64
|
+
MongoMapper.connection = Mongo::Connection.new(env['host'], env['port'], options)
|
65
|
+
MongoMapper.database = env['database']
|
66
|
+
MongoMapper.database.authenticate(env['username'], env['password']) if env['username'] && env['password']
|
67
|
+
end
|
68
|
+
|
69
|
+
def setup(config, environment, options={})
|
70
|
+
handle_passenger_forking
|
71
|
+
self.config = config
|
72
|
+
connect(environment, options)
|
73
|
+
end
|
74
|
+
|
75
|
+
def handle_passenger_forking
|
76
|
+
if defined?(PhusionPassenger)
|
77
|
+
PhusionPassenger.on_event(:starting_worker_process) do |forked|
|
78
|
+
connection.connect_to_master if forked
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|