mongo 0.15 → 0.15.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -311,6 +311,7 @@ Jon Crosby, jon@joncrosby.me
311
311
  John Nunemaker, http://railstips.org
312
312
  * Collection#create_index takes symbols as well as strings
313
313
  * Fix for Collection#save
314
+ * Add logger convenience methods to connection and database
314
315
 
315
316
  David James, djames@sunlightfoundation.com
316
317
  * Fix dates to return as UTC
@@ -319,8 +320,9 @@ Paul Dlug, paul.dlug@gmail.com
319
320
  * Generate _id on the client side if not provided
320
321
  * Collection#insert and Collection#save return _id
321
322
 
322
- Durran Jordan and Les Hill, durran@gmail.com
323
+ Durran Jordan, durran@gmail.com
323
324
  * DB#collections
325
+ * Support for specifying sort order as array of [key, direction] pairs
324
326
 
325
327
  Cyril Mougel, cyril.mougel@gmail.com
326
328
  * Initial logging support
@@ -15,5 +15,5 @@ module Mongo
15
15
  ASCENDING = 1
16
16
  DESCENDING = -1
17
17
 
18
- VERSION = "0.15"
18
+ VERSION = "0.15.1"
19
19
  end
@@ -91,9 +91,9 @@ module Mongo
91
91
  # :skip :: Number of documents to omit (from the start of the result set)
92
92
  # when returning the results
93
93
  # :limit :: Maximum number of records to return
94
- # :sort :: Either hash of field names as keys and 1/-1 as values; 1 ==
95
- # ascending, -1 == descending, or array of field names (all
96
- # assumed to be sorted in ascending order).
94
+ # :sort :: An array of [key, direction] pairs to sort by. Direction should
95
+ # be specified as Mongo::ASCENDING (or :ascending / :asc) or
96
+ # Mongo::DESCENDING (or :descending / :desc)
97
97
  # :hint :: See #hint. This option overrides the collection-wide value.
98
98
  # :snapshot :: If true, snapshot mode will be used for this query.
99
99
  # Snapshot mode assures no duplicates are returned, or
@@ -94,6 +94,10 @@ module Mongo
94
94
  def db(db_name, options={})
95
95
  DB.new(db_name, @pair, @options.merge(options))
96
96
  end
97
+
98
+ def logger
99
+ @options[:logger]
100
+ end
97
101
 
98
102
  # Returns a hash containing database names as keys and disk space for
99
103
  # each as values.
@@ -75,16 +75,24 @@ module Mongo
75
75
 
76
76
  # Sort this cursor's result
77
77
  #
78
- # Takes either a hash of field names as keys and 1/-1 as values; 1 ==
79
- # ascending, -1 == descending, or array of field names (all assumed to be
80
- # sorted in ascending order).
78
+ # Takes either a single key and a direction, or an array of [key,
79
+ # direction] pairs. Directions should be specified as Mongo::ASCENDING
80
+ # or Mongo::DESCENDING (or :ascending or :descending) (or :asc or :desc).
81
81
  #
82
- # Raises InvalidOperation if this cursor has already been used.
82
+ # Raises InvalidOperation if this cursor has already been used. Raises
83
+ # InvalidSortValueError if specified order is invalid.
83
84
  #
84
85
  # This method overrides any sort order specified in the Collection#find
85
86
  # method, and only the last sort applied has an effect
86
- def sort(order)
87
+ def sort(key_or_list, direction=nil)
87
88
  check_modifiable
89
+
90
+ if !direction.nil?
91
+ order = [[key_or_list, direction]]
92
+ else
93
+ order = key_or_list
94
+ end
95
+
88
96
  @query.order_by = order
89
97
  self
90
98
  end
@@ -58,6 +58,9 @@ module Mongo
58
58
 
59
59
  # The database's socket. For internal (and Cursor) use only.
60
60
  attr_reader :socket
61
+
62
+ # The logger instance if :logger is passed to initialize
63
+ attr_reader :logger
61
64
 
62
65
  def slave_ok?; @slave_ok; end
63
66
  def auto_reconnect?; @auto_reconnect; end
@@ -23,4 +23,7 @@ module Mongo
23
23
 
24
24
  # Raised when an invalid name is used.
25
25
  class InvalidName < RuntimeError; end
26
+
27
+ # Raised when the client supplies an invalid value to sort by.
28
+ class InvalidSortValueError < RuntimeError; end
26
29
  end
@@ -16,11 +16,12 @@
16
16
 
17
17
  require 'mongo/message/message'
18
18
  require 'mongo/message/opcodes'
19
+ require 'mongo/util/conversions'
19
20
  require 'mongo/util/ordered_hash'
20
21
 
21
22
  module Mongo
22
-
23
23
  class QueryMessage < Message
24
+ include Mongo::Conversions
24
25
 
25
26
  attr_reader :query
26
27
 
@@ -36,27 +37,17 @@ module Mongo
36
37
  if query.contains_special_fields
37
38
  sel = OrderedHash.new
38
39
  sel['query'] = query.selector
39
- if query.order_by && query.order_by.length > 0
40
- sel['orderby'] = case query.order_by
41
- when String
42
- {query.order_by => 1}
43
- when Array
44
- h = OrderedHash.new
45
- query.order_by.each { |ob|
46
- case ob
47
- when String
48
- h[ob] = 1
49
- when Hash # should have one entry; will handle all
50
- ob.each { |k,v| h[k] = v }
51
- else
52
- raise "illegal query order_by value #{query.order_by.inspect}"
53
- end
54
- }
55
- h
40
+ if query.order_by
41
+ order_by = query.order_by
42
+ sel['orderby'] = case order_by
43
+ when String then string_as_sort_parameters(order_by)
44
+ when Symbol then symbol_as_sort_parameters(order_by)
45
+ when Array then array_as_sort_parameters(order_by)
56
46
  when Hash # Should be an ordered hash, but this message doesn't care
57
- query.order_by
47
+ warn_if_deprecated(order_by)
48
+ order_by
58
49
  else
59
- raise "illegal order_by: is a #{query.order_by.class.name}, must be String, Array, Hash, or OrderedHash"
50
+ raise InvalidSortValueError.new("illegal order_by: is a #{query.order_by.class.name}, must be String, Array, Hash, or OrderedHash")
60
51
  end
61
52
  end
62
53
  sel['$hint'] = query.hint if query.hint && query.hint.length > 0
@@ -108,7 +108,7 @@ module Mongo
108
108
  end
109
109
 
110
110
  def contains_special_fields
111
- (@order_by != nil && @order_by.length > 0) || @explain || @hint || @snapshot
111
+ @order_by || @explain || @hint || @snapshot
112
112
  end
113
113
 
114
114
  def to_s
@@ -0,0 +1,110 @@
1
+ # --
2
+ # Copyright (C) 2008-2009 10gen Inc.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+ # ++
16
+ module Mongo #:nodoc:
17
+
18
+ # Utility module to include when needing to convert certain types of
19
+ # objects to mongo-friendly parameters.
20
+ module Conversions
21
+
22
+ ASCENDING = ["ascending", "asc", "1"]
23
+ DESCENDING = ["descending", "desc", "-1"]
24
+
25
+ # Converts the supplied +Array+ to a +Hash+ to pass to mongo as
26
+ # sorting parameters. The returned +Hash+ will vary depending
27
+ # on whether the passed +Array+ is one or two dimensional.
28
+ #
29
+ # Example:
30
+ #
31
+ # *DEPRECATED
32
+ #
33
+ # <tt>array_as_sort_parameters(["field1", "field2"])</tt> =>
34
+ # <tt>{ "field1" => "1", "field2" => "1" }</tt>
35
+ #
36
+ # *New Syntax:
37
+ #
38
+ # <tt>array_as_sort_parameters([["field1", :asc], ["field2", :desc]])</tt> =>
39
+ # <tt>{ "field1" => 1, "field2" => -1}</tt>
40
+ def array_as_sort_parameters(value)
41
+ warn_if_deprecated(value)
42
+ order_by = OrderedHash.new
43
+ value.each do |param|
44
+ if (param.class.name == "String")
45
+ order_by[param] = 1
46
+ else
47
+ order_by[param[0]] = sort_value(param[1]) unless param[1].nil?
48
+ end
49
+ end
50
+ order_by
51
+ end
52
+
53
+ # Converts the supplied +String+ to a +Hash+ to pass to mongo as
54
+ # a sorting parameter with ascending order. If the +String+
55
+ # is empty then an empty +Hash+ will be returned.
56
+ #
57
+ # Example:
58
+ #
59
+ # *DEPRECATED
60
+ #
61
+ # <tt>string_as_sort_parameters("field")</tt> => <tt>{ "field" => 1 }</tt>
62
+ # <tt>string_as_sort_parameters("")</tt> => <tt>{}</tt>
63
+ def string_as_sort_parameters(value)
64
+ warn_if_deprecated(value)
65
+ return {} if value.empty?
66
+ { value => 1 }
67
+ end
68
+
69
+ # Converts the supplied +Symbol+ to a +Hash+ to pass to mongo as
70
+ # a sorting parameter with ascending order.
71
+ #
72
+ # Example:
73
+ #
74
+ # *DEPRECATED
75
+ #
76
+ # <tt>symbol_as_sort_parameters(:field)</tt> => <tt>{ "field" => 1 }</tt>
77
+ def symbol_as_sort_parameters(value)
78
+ warn_if_deprecated(value)
79
+ { value.to_s => 1 }
80
+ end
81
+
82
+ # Converts the +String+, +Symbol+, or +Integer+ to the
83
+ # corresponding sort value in MongoDB.
84
+ #
85
+ # Valid conversions (case-insensitive):
86
+ #
87
+ # <tt>ascending, asc, :ascending, :asc, 1</tt> => <tt>1</tt>
88
+ # <tt>descending, desc, :descending, :desc, -1</tt> => <tt>-1</tt>
89
+ #
90
+ # If the value is invalid then an error will be raised.
91
+ def sort_value(value)
92
+ val = value.to_s.downcase
93
+ return 1 if ASCENDING.include?(val)
94
+ return -1 if DESCENDING.include?(val)
95
+ raise InvalidSortValueError.new(
96
+ "#{self} was supplied as a sort direction when acceptable values are: " +
97
+ "Mongo::ASCENDING, 'ascending', 'asc', :ascending, :asc, 1, Mongo::DESCENDING, 'descending', 'desc', :descending, :desc, -1.")
98
+ end
99
+
100
+ # This is the method to call when the client needs to be warned of
101
+ # deprecation in the way sorting parameters are supplied.
102
+ def warn_if_deprecated(value)
103
+ unless value.is_a?(Array) && value.first.is_a?(Array)
104
+ warn("Specifying sort order as #{value.inspect} has been deprecated in favor of a new syntax: \n" +
105
+ " :sort => [['field1', '(ascending|descending)'], ['field2', '(ascending|descending)']]")
106
+ end
107
+ end
108
+
109
+ end
110
+ end
@@ -45,6 +45,7 @@ PACKAGE_FILES = ['README.rdoc', 'Rakefile', 'mongo-ruby-driver.gemspec',
45
45
  'lib/mongo/types/regexp_of_holding.rb',
46
46
  'lib/mongo/util/bson.rb',
47
47
  'lib/mongo/util/byte_buffer.rb',
48
+ 'lib/mongo/util/conversions.rb',
48
49
  'lib/mongo/util/ordered_hash.rb',
49
50
  'lib/mongo/util/xml_to_ruby.rb',
50
51
  'lib/mongo.rb']
@@ -68,6 +69,7 @@ TEST_FILES = ['test/mongo-qa/_common.rb',
68
69
  'test/test_chunk.rb',
69
70
  'test/test_collection.rb',
70
71
  'test/test_connection.rb',
72
+ 'test/test_conversions.rb',
71
73
  'test/test_cursor.rb',
72
74
  'test/test_db.rb',
73
75
  'test/test_db_api.rb',
@@ -83,7 +85,7 @@ Gem::Specification.new do |s|
83
85
  s.name = 'mongo'
84
86
 
85
87
  # be sure to change this constant in lib/mongo.rb as well
86
- s.version = '0.15'
88
+ s.version = '0.15.1'
87
89
 
88
90
  s.platform = Gem::Platform::RUBY
89
91
  s.summary = 'Ruby driver for the MongoDB'
@@ -66,6 +66,17 @@ class TestConnection < Test::Unit::TestCase
66
66
  assert output.string.include?("db.test.find")
67
67
  assert !output.string.include?("db.test.remove")
68
68
  end
69
+
70
+ def test_connection_logger
71
+ output = StringIO.new
72
+ logger = Logger.new(output)
73
+ logger.level = Logger::DEBUG
74
+ connection = Connection.new(@host, @port, :logger => logger)
75
+ assert_equal logger, connection.logger
76
+
77
+ connection.logger.debug 'testing'
78
+ assert output.string.include?('testing')
79
+ end
69
80
 
70
81
  def test_drop_database
71
82
  db = @mongo.db('ruby-mongo-will-be-deleted')
@@ -0,0 +1,121 @@
1
+ $LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
2
+ require 'mongo/errors'
3
+ require 'mongo/util/conversions'
4
+ require 'mongo/util/ordered_hash'
5
+ require 'test/unit'
6
+
7
+ class ConversionsTest < Test::Unit::TestCase
8
+ include Mongo::Conversions
9
+
10
+ def test_array_as_sort_parameters_with_array_of_strings
11
+ params = array_as_sort_parameters(["field1", "field2"])
12
+ assert_equal({ "field1" => 1, "field2" => 1 }, params)
13
+ end
14
+
15
+ def test_array_as_sort_parameters_with_array_of_string_and_values
16
+ params = array_as_sort_parameters([["field1", :asc], ["field2", :desc]])
17
+ assert_equal({ "field1" => 1, "field2" => -1 }, params)
18
+ end
19
+
20
+ def test_string_as_sort_parameters_with_string
21
+ params = string_as_sort_parameters("field")
22
+ assert_equal({ "field" => 1 }, params)
23
+ end
24
+
25
+ def test_string_as_sort_parameters_with_empty_string
26
+ params = string_as_sort_parameters("")
27
+ assert_equal({}, params)
28
+ end
29
+
30
+ def test_symbol_as_sort_parameters
31
+ params = symbol_as_sort_parameters(:field)
32
+ assert_equal({ "field" => 1 }, params)
33
+ end
34
+
35
+ def test_sort_value_when_value_is_one
36
+ assert_equal 1, sort_value(1)
37
+ end
38
+
39
+ def test_sort_value_when_value_is_one_as_a_string
40
+ assert_equal 1, sort_value("1")
41
+ end
42
+
43
+ def test_sort_value_when_value_is_negative_one
44
+ assert_equal -1, sort_value(-1)
45
+ end
46
+
47
+ def test_sort_value_when_value_is_negative_one_as_a_string
48
+ assert_equal -1, sort_value("-1")
49
+ end
50
+
51
+ def test_sort_value_when_value_is_ascending
52
+ assert_equal 1, sort_value("ascending")
53
+ end
54
+
55
+ def test_sort_value_when_value_is_asc
56
+ assert_equal 1, sort_value("asc")
57
+ end
58
+
59
+ def test_sort_value_when_value_is_uppercase_ascending
60
+ assert_equal 1, sort_value("ASCENDING")
61
+ end
62
+
63
+ def test_sort_value_when_value_is_uppercase_asc
64
+ assert_equal 1, sort_value("ASC")
65
+ end
66
+
67
+ def test_sort_value_when_value_is_symbol_ascending
68
+ assert_equal 1, sort_value(:ascending)
69
+ end
70
+
71
+ def test_sort_value_when_value_is_symbol_asc
72
+ assert_equal 1, sort_value(:asc)
73
+ end
74
+
75
+ def test_sort_value_when_value_is_symbol_uppercase_ascending
76
+ assert_equal 1, sort_value(:ASCENDING)
77
+ end
78
+
79
+ def test_sort_value_when_value_is_symbol_uppercase_asc
80
+ assert_equal 1, sort_value(:ASC)
81
+ end
82
+
83
+ def test_sort_value_when_value_is_descending
84
+ assert_equal -1, sort_value("descending")
85
+ end
86
+
87
+ def test_sort_value_when_value_is_desc
88
+ assert_equal -1, sort_value("desc")
89
+ end
90
+
91
+ def test_sort_value_when_value_is_uppercase_descending
92
+ assert_equal -1, sort_value("DESCENDING")
93
+ end
94
+
95
+ def test_sort_value_when_value_is_uppercase_desc
96
+ assert_equal -1, sort_value("DESC")
97
+ end
98
+
99
+ def test_sort_value_when_value_is_symbol_descending
100
+ assert_equal -1, sort_value(:descending)
101
+ end
102
+
103
+ def test_sort_value_when_value_is_symbol_desc
104
+ assert_equal -1, sort_value(:desc)
105
+ end
106
+
107
+ def test_sort_value_when_value_is_uppercase_symbol_descending
108
+ assert_equal -1, sort_value(:DESCENDING)
109
+ end
110
+
111
+ def test_sort_value_when_value_is_uppercase_symbol_desc
112
+ assert_equal -1, sort_value(:DESC)
113
+ end
114
+
115
+ def test_sort_value_when_value_is_invalid
116
+ assert_raise Mongo::InvalidSortValueError do
117
+ sort_value(2)
118
+ end
119
+ end
120
+
121
+ end
@@ -62,22 +62,30 @@ class CursorTest < Test::Unit::TestCase
62
62
  @@coll.clear
63
63
  5.times{|x| @@coll.insert({"a" => x}) }
64
64
 
65
- assert_kind_of Cursor, @@coll.find().sort({:a => 1})
65
+ assert_kind_of Cursor, @@coll.find().sort(:a, 1)
66
66
 
67
- assert_equal 0, @@coll.find().sort({:a => 1}).next_object["a"]
68
- assert_equal 4, @@coll.find().sort({:a => -1}).next_object["a"]
69
- assert_equal 0, @@coll.find().sort(["a"]).next_object["a"]
67
+ assert_equal 0, @@coll.find().sort(:a, 1).next_object["a"]
68
+ assert_equal 4, @@coll.find().sort(:a, -1).next_object["a"]
69
+ assert_equal 0, @@coll.find().sort([["a", :asc]]).next_object["a"]
70
70
 
71
- assert_kind_of Cursor, @@coll.find().sort({:a => -1, :b => 1})
71
+ assert_kind_of Cursor, @@coll.find().sort([[:a, -1], [:b, 1]])
72
72
 
73
- assert_equal 4, @@coll.find().sort({:a => 1}).sort({:a => -1}).next_object["a"]
74
- assert_equal 0, @@coll.find().sort({:a => -1}).sort({:a => 1}).next_object["a"]
73
+ assert_equal 4, @@coll.find().sort(:a, 1).sort(:a, -1).next_object["a"]
74
+ assert_equal 0, @@coll.find().sort(:a, -1).sort(:a, 1).next_object["a"]
75
75
 
76
76
  cursor = @@coll.find()
77
77
  cursor.next_object()
78
78
  assert_raise InvalidOperation do
79
79
  cursor.sort(["a"])
80
80
  end
81
+
82
+ assert_raise InvalidSortValueError do
83
+ @@coll.find().sort(:a, 25).next_object
84
+ end
85
+
86
+ assert_raise InvalidSortValueError do
87
+ @@coll.find().sort(25).next_object
88
+ end
81
89
  end
82
90
 
83
91
  def test_limit
@@ -2,6 +2,8 @@ $LOAD_PATH[0,0] = File.join(File.dirname(__FILE__), '..', 'lib')
2
2
  require 'digest/md5'
3
3
  require 'mongo'
4
4
  require 'test/unit'
5
+ require 'stringio'
6
+ require 'logger'
5
7
 
6
8
  class TestPKFactory
7
9
  def create_pk(row)
@@ -45,6 +47,17 @@ class DBTest < Test::Unit::TestCase
45
47
  @@users = @@db.collection('system.users')
46
48
  end
47
49
  end
50
+
51
+ def test_logger
52
+ output = StringIO.new
53
+ logger = Logger.new(output)
54
+ logger.level = Logger::DEBUG
55
+ db = Connection.new(@host, @port, :logger => logger).db('ruby-mongo-test')
56
+ assert_equal logger, db.logger
57
+
58
+ db.logger.debug 'testing'
59
+ assert output.string.include?('testing')
60
+ end
48
61
 
49
62
  def test_full_coll_name
50
63
  coll = @@db.collection('test')
@@ -149,7 +149,7 @@ class DBAPITest < Test::Unit::TestCase
149
149
  @@coll.insert('a' => 4, 'b' => 1)
150
150
 
151
151
  # Sorting (ascending)
152
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => {'a' => 1}).to_a
152
+ docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => [['a', 1]]).to_a
153
153
  assert_equal 4, docs.size
154
154
  assert_equal 1, docs[0]['a']
155
155
  assert_equal 2, docs[1]['a']
@@ -157,7 +157,7 @@ class DBAPITest < Test::Unit::TestCase
157
157
  assert_equal 4, docs[3]['a']
158
158
 
159
159
  # Sorting (descending)
160
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => {'a' => -1}).to_a
160
+ docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => [['a', -1]]).to_a
161
161
  assert_equal 4, docs.size
162
162
  assert_equal 4, docs[0]['a']
163
163
  assert_equal 3, docs[1]['a']
@@ -187,16 +187,10 @@ class DBAPITest < Test::Unit::TestCase
187
187
  assert_equal 1, docs[2]['a']
188
188
  assert_equal 3, docs[3]['a']
189
189
 
190
- # Sorting using empty array; no order guarantee (Mongo bug #898) but
191
- # should not blow up.
190
+ # Sorting using empty array; no order guarantee should not blow up.
192
191
  docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => []).to_a
193
192
  assert_equal 4, docs.size
194
193
 
195
- # Sorting using array of hashes; no order guarantee (Mongo bug #898) but
196
- # should not blow up.
197
- docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => [{'b' => 1}, {'a' => -1}]).to_a
198
- assert_equal 4, docs.size
199
-
200
194
  # Sorting using ordered hash. You can use an unordered one, but then the
201
195
  # order of the keys won't be guaranteed thus your sort won't make sense.
202
196
  oh = OrderedHash.new
@@ -208,16 +202,15 @@ class DBAPITest < Test::Unit::TestCase
208
202
  assert_equal 2, docs[2]['a']
209
203
  assert_equal 1, docs[3]['a']
210
204
 
211
- # TODO this will not pass due to known Mongo bug #898
212
- # oh = OrderedHash.new
213
- # oh['b'] = -1
214
- # oh['a'] = 1
215
- # docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => oh).to_a
216
- # assert_equal 4, docs.size
217
- # assert_equal 1, docs[0]['a']
218
- # assert_equal 3, docs[1]['a']
219
- # assert_equal 2, docs[2]['a']
220
- # assert_equal 4, docs[3]['a']
205
+ oh = OrderedHash.new
206
+ oh['b'] = -1
207
+ oh['a'] = 1
208
+ docs = @@coll.find({'a' => { '$lt' => 10 }}, :sort => oh).to_a
209
+ assert_equal 4, docs.size
210
+ assert_equal 1, docs[0]['a']
211
+ assert_equal 3, docs[1]['a']
212
+ assert_equal 2, docs[2]['a']
213
+ assert_equal 4, docs[3]['a']
221
214
  end
222
215
 
223
216
  def test_find_limits
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.15"
4
+ version: 0.15.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-10-05 00:00:00 -04:00
13
+ date: 2009-10-08 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -70,6 +70,7 @@ files:
70
70
  - lib/mongo/types/regexp_of_holding.rb
71
71
  - lib/mongo/util/bson.rb
72
72
  - lib/mongo/util/byte_buffer.rb
73
+ - lib/mongo/util/conversions.rb
73
74
  - lib/mongo/util/ordered_hash.rb
74
75
  - lib/mongo/util/xml_to_ruby.rb
75
76
  - lib/mongo.rb
@@ -124,6 +125,7 @@ test_files:
124
125
  - test/test_chunk.rb
125
126
  - test/test_collection.rb
126
127
  - test/test_connection.rb
128
+ - test/test_conversions.rb
127
129
  - test/test_cursor.rb
128
130
  - test/test_db.rb
129
131
  - test/test_db_api.rb