Class: Ki::Orm::Db
Overview
This singleton class establishes the database connection and CRUD operations.
Connecting
Db.instance.establish_connection
Queries
db = Db.instance
db.find 'users', {}
db.find 'users', { name: 'Homer' }
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#connection ⇒ Object
readonly
Returns the value of attribute connection.
-
#db ⇒ Object
readonly
Returns the value of attribute db.
Instance Method Summary collapse
-
#collection_names ⇒ Object
Returns.
- #connection_string ⇒ Object
-
#count(name, hash = {}) ⇒ Object
Count the number of hashes found in a specified collection, filtered by a hash attribute.
-
#delete(name, hash) ⇒ Object
Deletes a hash from the database.
-
#establish_connection ⇒ Object
Creates the mongo connection.
-
#find(name, hash = {}) ⇒ Object
Find a hash in the database.
-
#insert(name, hash) ⇒ Object
Insert a hash in the database.
-
#update(name, hash) ⇒ Object
Update a hash from the database.
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
23 24 25 |
# File 'lib/ki/orm.rb', line 23 def config @config end |
#connection ⇒ Object (readonly)
Returns the value of attribute connection.
23 24 25 |
# File 'lib/ki/orm.rb', line 23 def connection @connection end |
#db ⇒ Object (readonly)
Returns the value of attribute db.
23 24 25 |
# File 'lib/ki/orm.rb', line 23 def db @db end |
Instance Method Details
#collection_names ⇒ Object
Returns
An array of all the collection names in the database.
60 61 62 |
# File 'lib/ki/orm.rb', line 60 def collection_names @db.collection_names.delete_if { |name| name =~ /^system/ } end |
#connection_string ⇒ Object
47 48 49 50 51 52 53 54 |
# File 'lib/ki/orm.rb', line 47 def connection_string db = KiConfig.instance.database if ENV['MONGODB_URI'] ENV['MONGODB_URI'] else "#{db['host']}:#{db['port']}/#{db['name']}" end end |
#count(name, hash = {}) ⇒ Object
Count the number of hashes found in a specified collection, filtered by a hash attribute
Attributes
-
name
- the mongo collection name
Options
-
hash
- used for filtering
Returns
The number of objects found.
Examples
db = Db.instance
db.count 'users'
db.count 'users', { name: 'Homer' }
196 197 198 |
# File 'lib/ki/orm.rb', line 196 def count(name, hash = {}) @db[name].count hash end |
#delete(name, hash) ⇒ Object
Deletes a hash from the database
Attributes
-
name
- the mongo collection name -
:hash
- Filter by specific hash attributes. id required
Returns
Empty hash
Examples
db = Db.instance
db.delete 'users', { id: 'id' }
db.delete 'users', {}
167 168 169 170 171 172 173 |
# File 'lib/ki/orm.rb', line 167 def delete(name, hash) hash = nourish_hash_id hash r = @db[name].delete_many hash { deleted_item_count: r.documents[0]['n'] } end |
#establish_connection ⇒ Object
Creates the mongo connection.
It first checks if the env variable “MONGODB_URI” is set. The required format: docs.mongodb.org/manual/reference/connection-string/
If the env variable is not set, it will use the information stored in config.yml.
33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/ki/orm.rb', line 33 def establish_connection Mongo::Logger.logger.level = Logger::FATAL # Mongo::Logger.logger = Logger.new('mongo.log') # Mongo::Logger.logger.level = Logger::INFO @config = KiConfig.instance.database @db = if ENV['MONGODB_URI'] Mongo::Client.new else Mongo::Client.new('mongodb://' + connection_string) end self end |
#find(name, hash = {}) ⇒ Object
Find a hash in the database
Attributes
-
name
- the mongo collection name
Options
-
:hash
- Filter by specific hash attributes
Returns
An array of hashes which match the query criteria
Examples
db = Db.instance
db.find 'users'
db.find 'users', { id: 'id' }
db.find 'users', { name: 'Homer' }
109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/ki/orm.rb', line 109 def find(name, hash = {}) hash = nourish_hash_id hash a = nourish_hash_limit hash hash = a[0] limit = a[1] a = nourish_hash_sort hash hash = a[0] sort = a[1] @db[name].find(hash, limit).sort(sort).to_a.stringify_ids end |
#insert(name, hash) ⇒ Object
Insert a hash in the database.
Attributes
-
name
- the mongo collection name -
hash
- the hash which will be inserted
Returns
The inserted hash.
-
:conditions
- An SQL fragment like “administrator = 1”
Examples
db = Db.instance
db.insert 'users', { name: 'Homer' }
82 83 84 85 86 |
# File 'lib/ki/orm.rb', line 82 def insert(name, hash) item = @db[name].insert_one(hash) hash['id'] = item.inserted_id.to_s hash end |
#update(name, hash) ⇒ Object
Update a hash from the database
The method will update the hash obj with the id specified in the hash attribute.
Attributes
-
name
- the mongo collection name -
hash
- requires at least the id of the hash which needs to beupdated
Returns
The updated hash
Examples
db = Db.instance
db.update('users', { id: 'id', name: 'Sir Homer' })
141 142 143 144 145 146 147 148 |
# File 'lib/ki/orm.rb', line 141 def update(name, hash) hash = nourish_hash_id hash id = hash['_id'].to_s hash.delete('_id') @db[name].update_one({ '_id' => BSON::ObjectId(id) }, hash) hash['id'] = id hash end |