mongodb-mongo_record 0.3 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -3
- data/lib/mongo_record/base.rb +35 -0
- data/mongo-activerecord-ruby.gemspec +1 -1
- data/tests/test_mongo.rb +17 -0
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -18,6 +18,8 @@ A quick code sample:
|
|
18
18
|
class Track < MongoRecord::Base
|
19
19
|
collection_name :tracks
|
20
20
|
fields :artist, :album, :song, :track
|
21
|
+
index :artist
|
22
|
+
|
21
23
|
def to_s
|
22
24
|
"artist: #{artist}, album: #{album}, song: #@song, track: #{@track ? @track.to_i : nil}"
|
23
25
|
end
|
@@ -81,6 +83,5 @@ Jim Mulholland, jim at squeejee dot com
|
|
81
83
|
* Assigning created_at and updated_at fields even if they are not declared
|
82
84
|
* Alias methods for "first", "last" and "all"
|
83
85
|
|
84
|
-
|
85
|
-
|
86
|
-
* DBRefs
|
86
|
+
Clinton R. Nixon, crnixon at gmail dot com
|
87
|
+
* Ability to define and query indexes from models
|
data/lib/mongo_record/base.rb
CHANGED
@@ -147,6 +147,41 @@ module MongoRecord
|
|
147
147
|
# Return the field names.
|
148
148
|
def field_names; @field_names; end
|
149
149
|
|
150
|
+
# Creates an index for this collection.
|
151
|
+
# +fields+ should be either a single field name (:title)
|
152
|
+
# or an array of fields ([:title, :author, :date])
|
153
|
+
# or an array of a field name and direction ([:title, :asc] or [:title, :desc])
|
154
|
+
# or an array of field names and directions ([[:title, :asc], [:author, :desc]])
|
155
|
+
# +unique+ should be true or false and indicates whether this index
|
156
|
+
# should enforce a uniqueness constraint.
|
157
|
+
def index(fields, unique = false)
|
158
|
+
fields = Array(fields)
|
159
|
+
|
160
|
+
if fields.length == 2 &&
|
161
|
+
( fields[1].to_s == 'asc' || fields[1].to_s == 'desc' ||
|
162
|
+
fields[1] == XGen::Mongo::ASCENDING || fields[1] == XGen::Mongo::DESCENDING )
|
163
|
+
fields = [fields]
|
164
|
+
end
|
165
|
+
|
166
|
+
fields = fields.map do |field|
|
167
|
+
field = field.respond_to?(:[]) ? field : [field, :asc]
|
168
|
+
field[1] = (field[1] == :desc) ? XGen::Mongo::DESCENDING : XGen::Mongo::ASCENDING
|
169
|
+
field
|
170
|
+
end
|
171
|
+
|
172
|
+
collection.create_index(fields, unique)
|
173
|
+
end
|
174
|
+
|
175
|
+
# Returns list of indexes for model, unless fields are passed.
|
176
|
+
# In that case, creates an index.
|
177
|
+
def indexes(*fields)
|
178
|
+
if fields.empty?
|
179
|
+
collection.index_information
|
180
|
+
else
|
181
|
+
index(*fields)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
150
185
|
# Return the names of all instance variables that hold objects
|
151
186
|
# declared using has_one. The names do not start with '@'.
|
152
187
|
#
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'mongo_record'
|
3
|
-
s.version = '0.3'
|
3
|
+
s.version = '0.3.1'
|
4
4
|
s.platform = Gem::Platform::RUBY
|
5
5
|
s.summary = 'ActiveRecord-like models for the 10gen Mongo DB'
|
6
6
|
s.description = 'MongoRecord is an ActiveRecord-like framework for the 10gen Mongo database. For more information about Mongo, see http://www.mongodb.org.'
|
data/tests/test_mongo.rb
CHANGED
@@ -24,6 +24,7 @@ require File.join(File.dirname(__FILE__), 'class_in_module')
|
|
24
24
|
class Track < MongoRecord::Base
|
25
25
|
collection_name :tracks
|
26
26
|
fields :artist, :album, :song, :track, :created_at
|
27
|
+
|
27
28
|
def to_s
|
28
29
|
# Uses both accessor methods and ivars themselves
|
29
30
|
"artist: #{artist}, album: #{album}, song: #@song, track: #{@track ? @track.to_i : nil}"
|
@@ -743,4 +744,20 @@ class MongoTest < Test::Unit::TestCase
|
|
743
744
|
assert_equal p.artist, "Nickleback"
|
744
745
|
end
|
745
746
|
|
747
|
+
def test_indexing
|
748
|
+
Track.index :artist
|
749
|
+
Track.index [:artist, :created_at]
|
750
|
+
Track.index [:song, :desc], true
|
751
|
+
Track.index [:artist, [:album, :desc]]
|
752
|
+
Track.index [:created_at, XGen::Mongo::ASCENDING]
|
753
|
+
|
754
|
+
assert_equal([ {"artist" => 1},
|
755
|
+
{"artist" => 1, "created_at" => 1},
|
756
|
+
{"song" => -1},
|
757
|
+
{"artist" => 1, "album" => -1},
|
758
|
+
{"created_at" => 1} ],
|
759
|
+
Track.indexes.map {|index| index[:keys]}.delete_if { |keys|
|
760
|
+
keys.has_key? "_id" })
|
761
|
+
end
|
762
|
+
|
746
763
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongodb-mongo_record
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Menard
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-
|
13
|
+
date: 2009-05-16 00:00:00 -07:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|