Module: MongoMapper::Connection

Included in:
MongoMapper
Defined in:
lib/mongo_mapper/connection.rb

Constant Summary

@@connection =
nil
@@database =
nil
@@database_name =
nil
@@config =
nil

Instance Method Summary (collapse)

Instance Method Details

- (Object) config



47
48
49
50
# File 'lib/mongo_mapper/connection.rb', line 47

def config
  raise 'Set config before connecting. MongoMapper.config = {...}' unless defined?(@@config)
  @@config
end

- (Object) config=(hash)



43
44
45
# File 'lib/mongo_mapper/connection.rb', line 43

def config=(hash)
  @@config = hash
end

- (Object) config_for_environment(environment)

This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.

Raises:



53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/mongo_mapper/connection.rb', line 53

def config_for_environment(environment)
  env = config[environment.to_s] || {}
  return env if env['uri'].blank?

  uri = URI.parse(env['uri'])
  raise InvalidScheme.new('must be mongodb') unless uri.scheme == 'mongodb'
  {
    'host'     => uri.host,
    'port'     => uri.port,
    'database' => uri.path.gsub(/^\//, ''),
    'username' => uri.user,
    'password' => uri.password,
  }
end

- (Object) connect(environment, options = {})



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/mongo_mapper/connection.rb', line 68

def connect(environment, options={})
  raise 'Set config before connecting. MongoMapper.config = {...}' if config.blank?
  env = config_for_environment(environment)

  if env['options'].is_a?(Hash)
    options = env['options'].symbolize_keys.merge(options)
  end
  options[:read] = options[:read].to_sym if options[:read].is_a? String

  if env.key?('ssl')
    options[:ssl] = env['ssl']
  end

  MongoMapper.connection = if env['hosts']
    if env['hosts'].first.is_a?(String)
      Mongo::MongoReplicaSetClient.new( env['hosts'], options )
    else
      Mongo::MongoReplicaSetClient.new( *env['hosts'].push(options) )
    end
  else
    Mongo::MongoClient.new(env['host'], env['port'], options)
  end

  MongoMapper.database = env['database']
  MongoMapper.database.authenticate(env['username'], env['password']) if env['username'] && env['password']
end

- (Object) connection



12
13
14
# File 'lib/mongo_mapper/connection.rb', line 12

def connection
  @@connection ||= Mongo::MongoClient.new
end

- (Object) connection=(new_connection)



21
22
23
# File 'lib/mongo_mapper/connection.rb', line 21

def connection=(new_connection)
  @@connection = new_connection
end

- (Boolean) connection?

Returns:



16
17
18
# File 'lib/mongo_mapper/connection.rb', line 16

def connection?
  !!@@connection
end

- (Object) database



37
38
39
40
41
# File 'lib/mongo_mapper/connection.rb', line 37

def database
  return nil if @@database_name.blank?

  @@database ||= MongoMapper.connection.db(@@database_name)
end

- (Object) database=(name)



31
32
33
34
# File 'lib/mongo_mapper/connection.rb', line 31

def database=(name)
  @@database = nil
  @@database_name = name
end

- (Object) handle_passenger_forking



101
102
103
104
105
106
107
108
109
# File 'lib/mongo_mapper/connection.rb', line 101

def handle_passenger_forking
  # :nocov:
  if defined?(PhusionPassenger)
    PhusionPassenger.on_event(:starting_worker_process) do |forked|
      connection.connect if forked
    end
  end
  # :nocov:
end

- (Object) logger



26
27
28
# File 'lib/mongo_mapper/connection.rb', line 26

def logger
  connection.logger
end

- (Object) setup(config, environment, options = {})



95
96
97
98
99
# File 'lib/mongo_mapper/connection.rb', line 95

def setup(config, environment, options={})
  handle_passenger_forking
  self.config = config
  connect(environment, options)
end