mongodb-mongo_record 0.0.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 ADDED
@@ -0,0 +1,68 @@
1
+ = Welcome to MongoRecord
2
+
3
+ MongoRecord is an ActiveRecord-like framework for the 10gen
4
+ Mongo[http://www.mongodb.org/] database.
5
+
6
+ This document assumes you have read the Mongo documentation.
7
+
8
+ A quick code sample:
9
+
10
+ require 'rubygems'
11
+ require 'mongo'
12
+ require 'mongo_record'
13
+
14
+ class Track < MongoRecord::Base
15
+ collection_name :tracks
16
+ fields :artist, :album, :song, :track
17
+ def to_s
18
+ "artist: #{artist}, album: #{album}, song: #@song, track: #{@track ? @track.to_i : nil}"
19
+ end
20
+ end
21
+
22
+ MongoRecord::Base.connection =
23
+ XGen::Mongo::Driver::Mongo.new.db('mongorecord-test')
24
+
25
+ t = Track.new(:artist => 'Level 42', :album => 'Standing In The Light',
26
+ :song => 'Micro-Kid', :track => 1)
27
+ t.save
28
+ puts "There are #{Track.count()} tracks."
29
+ t = Track.find(:first, :conditions => {:song => 'Micro-Kid'})
30
+ Track.find(:all, :sort => 'song').each { |t| puts t.to_s }
31
+
32
+ == Installation
33
+
34
+ $ gem sources -a http://gems.github.com
35
+ $ sudo gem install mongodb-mongo-activerecord-ruby
36
+
37
+ MongoRecord depends on the Mongo Ruby Driver. Installing the MongoRecord gem
38
+ will also install the Mongo Ruby Driver if you don't have it already.
39
+
40
+ The source code is available at http://github.com/mongodb/mongo-ruby-driver.
41
+ You can either clone the git repository or download a tarball or zip file.
42
+ Once you have the source, you can use it from wherever you downloaded it or
43
+ you can install it as a gem from the source by typing
44
+
45
+ $ rake gem:install
46
+
47
+
48
+ == Getting Started
49
+
50
+ See the examples, read the MongoRecord::Base and MongoRecord::Cursor
51
+ documentation, and look at tests/test_mongo.rb.
52
+
53
+ === Persistence
54
+
55
+ You can use MongoRecord::Base or talk to the database (stored in the $db
56
+ object) directly.
57
+
58
+ See MongoRecord::Base and MongoRecord::Cursor.
59
+
60
+ === Logger
61
+
62
+ See MongoRecord::LogDevice. When running outside of the cloud (for example,
63
+ during development), all log messages are echoed to $stderr which is normally
64
+ the console.
65
+
66
+ == To Do
67
+
68
+ * DBRefs
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ require 'rubygems'
2
+ require 'rubygems/specification'
3
+ require 'fileutils'
4
+ require 'rake'
5
+ require 'rake/testtask'
6
+ require 'rake/gempackagetask'
7
+ require 'rake/contrib/rubyforgepublisher'
8
+
9
+
10
+ # NOTE: some of the tests assume Mongo is running
11
+ Rake::TestTask.new do |t|
12
+ t.test_files = FileList['tests/test*.rb']
13
+ end
14
+
15
+ desc "Generate documentation"
16
+ task :rdoc do
17
+ FileUtils.rm_rf('html')
18
+ system "rdoc --main README.rdoc --op html --inline-source --quiet README.rdoc `find lib -name '*.rb'`"
19
+ end
20
+
21
+ namespace :gem do
22
+
23
+ desc "Install the gem locally"
24
+ task :install do
25
+ sh <<EOS
26
+ gem build mongo-activerecord-ruby.gemspec &&
27
+ sudo gem install mongo_record*.gem &&
28
+ rm mongo_record-*.gem
29
+ EOS
30
+ end
31
+
32
+ end
33
+
34
+ task :default => :list
35
+
36
+ task :list do
37
+ system 'rake -T'
38
+ end
@@ -0,0 +1,107 @@
1
+ # Use the local copy, even if this gem is already installed.
2
+ $LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '../lib')
3
+
4
+ require 'rubygems'
5
+ require 'mongo'
6
+ require 'mongo_record'
7
+
8
+ class Track < MongoRecord::Base
9
+ collection_name :tracks
10
+ fields :artist, :album, :song, :track
11
+ def to_s
12
+ # Uses both accessor methods and ivars themselves
13
+ "artist: #{artist}, album: #{album}, song: #@song, track: #{@track ? @track.to_i : nil}"
14
+ end
15
+ end
16
+
17
+ MongoRecord::Base.connection = XGen::Mongo::Driver::Mongo.new.db('mongorecord-test')
18
+
19
+ # Create data
20
+
21
+ puts "Creating 6 records using \"raw\" Mongo access..."
22
+ db = MongoRecord::Base.connection
23
+ coll = db.collection('tracks')
24
+ coll.remove({})
25
+ coll.insert({:_id => XGen::Mongo::Driver::ObjectID.new, :artist => 'Thomas Dolby', :album => 'Aliens Ate My Buick', :song => 'The Ability to Swing'})
26
+ coll.insert({:_id => XGen::Mongo::Driver::ObjectID.new, :artist => 'Thomas Dolby', :album => 'Aliens Ate My Buick', :song => 'Budapest by Blimp'})
27
+ coll.insert({:_id => XGen::Mongo::Driver::ObjectID.new, :artist => 'Thomas Dolby', :album => 'The Golden Age of Wireless', :song => 'Europa and the Pirate Twins'})
28
+ coll.insert({:_id => XGen::Mongo::Driver::ObjectID.new, :artist => 'XTC', :album => 'Oranges & Lemons', :song => 'Garden Of Earthly Delights', :track => 1})
29
+ coll.insert({:_id => XGen::Mongo::Driver::ObjectID.new, :artist => 'XTC', :album => 'Oranges & Lemons', :song => 'The Mayor Of Simpleton', :track => 2})
30
+ song_id = XGen::Mongo::Driver::ObjectID.new
31
+ coll.insert({:_id => song_id, :artist => 'XTC', :album => 'Oranges & Lemons', :song => 'King For A Day', :track => 3})
32
+ puts "Data created. One song_id = #{song_id}."
33
+ puts "There are #{coll.count()} records in the tracks collection."
34
+
35
+
36
+ puts "\nSimple find"
37
+ puts Track.find(song_id).to_s
38
+ puts Track.find(song_id, :select => :album).to_s
39
+ puts Track.find_by_id(song_id).to_s
40
+ puts Track.find_by_song("Budapest by Blimp").to_s
41
+
42
+ puts "\nCount"
43
+ puts "Yup; there are indeed #{Track.count} records in the tracks collection."
44
+
45
+ puts "\nUpdate"
46
+ x = Track.find_by_track(2)
47
+ x.track = 99
48
+ x.save
49
+ puts Track.find_by_track(99).to_s
50
+
51
+ puts "\nComplex find"
52
+ puts Track.find_by_song('The Mayor Of Simpleton').to_s
53
+
54
+ puts "\nFind all"
55
+ Track.find(:all).each { |t| puts t.to_s }
56
+
57
+ puts "\nFind song /to/"
58
+ Track.find(:all, :conditions => {:song => /to/}).each { |row| puts row.to_s }
59
+
60
+ puts "\nFind limit 2"
61
+ Track.find(:all, :limit => 2).each { |t| puts t.to_s }
62
+
63
+ puts "\nFind by album"
64
+ Track.find(:all, :conditions => {:album => 'Aliens Ate My Buick'}).each { |t| puts t.to_s }
65
+
66
+ puts "\nFind first"
67
+ puts Track.find(:first).to_s
68
+
69
+ puts "\nFind track 3"
70
+ puts Track.find(:first, :conditions => {:track => 3}).to_s
71
+
72
+ puts "\nfind_by_album"
73
+ Track.find_all_by_album('Oranges & Lemons').each { |t| puts t.to_s }
74
+
75
+ puts "\nSorting"
76
+ Track.find(:all, :order => 'album desc').each { |t| puts t.to_s }
77
+
78
+ puts "\nTrack.new"
79
+
80
+ puts Track.new.to_s
81
+
82
+ t = Track.new(:artist => 'Level 42', :album => 'Standing In The Light', :song => 'Micro-Kid', :track => 1)
83
+ puts t.to_s
84
+ puts "save returned #{t.save}"
85
+
86
+ puts "\nTrack.find_or_create_by_song"
87
+
88
+ s, a = 'The Ability to Swing', 'ignored because song found'
89
+ puts Track.find_or_create_by_song(s, :artist => a).to_s
90
+
91
+ s, ar, al = 'New Song', 'New Artist', 'New Album'
92
+ puts Track.find_or_create_by_song(s, :artist => ar, :album => al).to_s
93
+
94
+ puts "\nTrack.find(:first, :conditions => {:song => 'King For A Day'}).delete"
95
+ t = Track.find(:first, :conditions => {:song => 'King For A Day'}).delete
96
+ Track.find(:all).each { |t| puts t.to_s }
97
+
98
+ puts "\nTrack.find('bogus_id')"
99
+ puts "I should see an exception here:"
100
+ begin
101
+ Track.find('bogus_id')
102
+ rescue => ex
103
+ puts ex.to_s
104
+ end
105
+
106
+ puts "\nexplain()"
107
+ puts Track.find(:all, :conditions => {:song => 'King For A Day'}).explain().inspect