
Research
Security News
Malicious npm Packages Use Telegram to Exfiltrate BullX Credentials
Socket uncovers an npm Trojan stealing crypto wallets and BullX credentials via obfuscated code and Telegram exfiltration.
h1. MongoDoc
Version: 0.2.1 1/18/10
2010-01-23 Tracking MongoDoc with @git@? READ THIS NOTE[1]
h2. Introduction
MongoDoc is a simple and easy to use ActiveRecord-like object mapper for "mongoDB":http://www.mongodb.org in Ruby.
MongoDoc is also an extension of the "Mongo Ruby Driver":http://github.com/mongodb/mongo-ruby-driver making it a snap to get Ruby in and out of mongoDB.
MongoDoc is not ActiveRecord for mongoDB. We do not have callbacks, nor do we have dynamic finders. We do have associations, named scopes, and other features.
MongoDoc is simple, easy-to-use, and fast. And it works with Rails (2.3.x at the moment, 3 soonish?).
MongoDoc is designed to work with document data, if you are looking to map relational data in mongoDB, you will have to look elsewhere.
h2. Ruby objects in mongoDB
Lets just get right into it and save some Ruby objects in mongoDB!
bc.. class Contact attr_accessor :name, :addresses, :interests end
class Address attr_accessor :street, :city, :state, :zip, :phone_number end
p. With MongoDoc, instead of saving JSON[2], we can save an object directly:
bc.. contact = Contact.new contact.name = 'Hashrocket' contact.interests = ['ruby', 'rails', 'agile']
address = Address.new address.street = '320 First Street North, #712' address.city = 'Jacksonville Beach' address.state = 'FL' address.zip = '32250' address.phone_number = '877 885 8846' contact.addresses = [address]
collection.save(contact)
p. We can query using the powerful mongoDB query syntax, and have it return Ruby objects:
bc.. results = collection.find('addresses.state' => 'FL') hashrocket = results.to_a.find {|contact| contact.name == 'Hashrocket'} puts hashrocket.addresses.first.phone_number
p. Take a look in the examples directory for more code.
h2. Mapping Documents
MongoDoc provides ActiveRecord-like persistence, associations, named scopes, and validations (from "Validatable":http://github.com/durran/validatable) as well as a mongoDB query language (from "Mongoid":http://mongoid.org/home). MongoDoc also plays nicely with Rails.
@MongoDoc::Document@ provides all these features as a mixin. A @MongoDoc::Document@ can either be a top-level mongoDB document, or an embedded document contained within a top-level document. Top-level documents are stored in collections named after their class: @Contact@ objects are stored in the 'contacts' collection (much like ActiveRecord).
Lets define a @Contact@ document with an @Address@ embedded document:
bc.. class Address include MongoDoc::Document
key :street key :city key :state key :zip_code key :phone_number end
class Contact include MongoDoc::Document
key :name key :interests has_many :addresses
named_scope :in_state, lambda {|state| {:where => {'addresses.state' => state}}} end
p. Since a mongoDB document has no fixed schema, we define the composition of a document directly in our classes. Please note we do not specify types! We can also specify @has_one@ or @has_many@ associations.
Building and saving a document is easy:
bc.. contact = Contact.new(:name => 'Hashrocket', :interests => ['ruby', 'rails', 'agile']) contact.addresses << Address.new(:street => '320 1st Street North, #712', :city => 'Jacksonville Beach', :state => 'FL', :zip_code => '32250', :phone_number => '877 885 8846') contact.save
p. Now that we have some data, we can query using our named scope:
bc. hashrocket = Contact.in_state('FL').find {|contact| contact.name == 'Hashrocket'}
p. And we can even perform partial updates:
bc. hashrocket.addresses.first.update_attributes(:street => '320 First Street North, #712')
h2. Installation
MongoDoc requires mongoDB v1.3.2 or later.
bc. sudo gem install mongodoc
h2. Connecting
By default, MongoDoc will read its configuration from @./mongodb.yml@. If that file does not exist, it will attempt to connect to a standard MongoDB local server setup and use a database name of @"mongodoc"@.
h3. With Rails
If you are using Rails, MongoDoc will look for its configuration in @config/mongodb.yml@. If that file does not exist, it will attempt to connect to a standard MongoDB local server setup and use a database name of @#{Rails.root.basename}_#{Rails.env}@.
h3. Database configuration file
The file is similar to the Rails database.yml file, with environment definitions containing the database configuration attributes. For example:
bc. development: name: development host: localhost port: 27017 options: auto_reconnect: true test: name: test host: localhost port: 27017 options: auto_reconnect: true
If you are not using Rails, the default environment is @development@ and you can set the current environment in your code:
bc. MongoDoc::Connection.env = 'test'
You can also change the location of the configuration file:
bc. MongoDoc::Connection.config_path = './config/mongodb.yml'
h3. Programmatically setting the database connection information
Finally, if you do not want to use the database configuration file, you can also set the database name, host, port, options, and strict values directly; for example, to set the database name to @stats@:
bc. MongoDoc::Connection.name = 'stats'
h2. Credits
Les Hill, leshill on github
h3. Thanks
Thanks to Sandro and Durran for some great conversations and some lovely code.
h2. Note on Patches/Pull Requests
h2. Copyright
Copyright (c) 2009 - 2010 Les Hill. See LICENSE for details.
fn1. Building from @HEAD@? MongoDoc requires mongoDB v1.3.2 or later. That means you must be using the 1.3.x nightly build as of 2010-01-22 .
fn2. The Ruby driver exposes an API that understands JSON.
FAQs
Unknown package
We found that mongodoc demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket uncovers an npm Trojan stealing crypto wallets and BullX credentials via obfuscated code and Telegram exfiltration.
Research
Security News
Malicious npm packages posing as developer tools target macOS Cursor IDE users, stealing credentials and modifying files to gain persistent backdoor access.
Security News
AI-generated slop reports are making bug bounty triage harder, wasting maintainer time, and straining trust in vulnerability disclosure programs.