jmongo 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (96) hide show
  1. data/Gemfile +8 -0
  2. data/Gemfile.lock +43 -0
  3. data/Rakefile +72 -0
  4. data/jmongo.gemspec +84 -6
  5. data/lib/jmongo.rb +6 -14
  6. data/lib/jmongo/collection.rb +196 -114
  7. data/lib/jmongo/connection.rb +39 -13
  8. data/lib/jmongo/cursor.rb +161 -63
  9. data/lib/jmongo/db.rb +119 -30
  10. data/lib/jmongo/exceptions.rb +39 -0
  11. data/lib/jmongo/mongo-2.6.5.gb1.jar +0 -0
  12. data/lib/jmongo/mongo/bson.rb +130 -0
  13. data/lib/jmongo/mongo/collection.rb +185 -0
  14. data/lib/jmongo/mongo/connection.rb +45 -0
  15. data/lib/jmongo/mongo/db.rb +31 -0
  16. data/lib/jmongo/mongo/jmongo.rb +44 -0
  17. data/lib/jmongo/mongo/mongo.rb +98 -0
  18. data/lib/jmongo/mongo/ruby_ext.rb +38 -0
  19. data/lib/jmongo/mongo/utils.rb +136 -0
  20. data/lib/jmongo/version.rb +1 -1
  21. data/test-results.txt +98 -0
  22. data/test/auxillary/1.4_features.rb +166 -0
  23. data/test/auxillary/authentication_test.rb +68 -0
  24. data/test/auxillary/autoreconnect_test.rb +41 -0
  25. data/test/auxillary/fork_test.rb +30 -0
  26. data/test/auxillary/repl_set_auth_test.rb +58 -0
  27. data/test/auxillary/slave_connection_test.rb +36 -0
  28. data/test/auxillary/threaded_authentication_test.rb +101 -0
  29. data/test/bson/binary_test.rb +15 -0
  30. data/test/bson/bson_test.rb +657 -0
  31. data/test/bson/byte_buffer_test.rb +208 -0
  32. data/test/bson/hash_with_indifferent_access_test.rb +38 -0
  33. data/test/bson/json_test.rb +17 -0
  34. data/test/bson/object_id_test.rb +138 -0
  35. data/test/bson/ordered_hash_test.rb +245 -0
  36. data/test/bson/test_helper.rb +46 -0
  37. data/test/bson/timestamp_test.rb +46 -0
  38. data/test/collection_test.rb +933 -0
  39. data/test/connection_test.rb +325 -0
  40. data/test/conversions_test.rb +121 -0
  41. data/test/cursor_fail_test.rb +75 -0
  42. data/test/cursor_message_test.rb +43 -0
  43. data/test/cursor_test.rb +547 -0
  44. data/test/data/empty_data +0 -0
  45. data/test/data/sample_data +0 -0
  46. data/test/data/sample_file.pdf +0 -0
  47. data/test/data/small_data.txt +1 -0
  48. data/test/db_api_test.rb +739 -0
  49. data/test/db_connection_test.rb +15 -0
  50. data/test/db_test.rb +325 -0
  51. data/test/grid_file_system_test.rb +260 -0
  52. data/test/grid_io_test.rb +210 -0
  53. data/test/grid_test.rb +259 -0
  54. data/test/load/thin/config.ru +6 -0
  55. data/test/load/thin/config.yml.template +6 -0
  56. data/test/load/thin/load.rb +24 -0
  57. data/test/load/unicorn/config.ru +6 -0
  58. data/test/load/unicorn/load.rb +23 -0
  59. data/test/load/unicorn/unicorn.rb.template +29 -0
  60. data/test/replica_sets/connect_test.rb +111 -0
  61. data/test/replica_sets/connection_string_test.rb +29 -0
  62. data/test/replica_sets/count_test.rb +36 -0
  63. data/test/replica_sets/insert_test.rb +54 -0
  64. data/test/replica_sets/pooled_insert_test.rb +58 -0
  65. data/test/replica_sets/query_secondaries.rb +109 -0
  66. data/test/replica_sets/query_test.rb +52 -0
  67. data/test/replica_sets/read_preference_test.rb +43 -0
  68. data/test/replica_sets/refresh_test.rb +123 -0
  69. data/test/replica_sets/replication_ack_test.rb +71 -0
  70. data/test/replica_sets/rs_test_helper.rb +27 -0
  71. data/test/safe_test.rb +68 -0
  72. data/test/support/hash_with_indifferent_access.rb +186 -0
  73. data/test/support/keys.rb +45 -0
  74. data/test/support_test.rb +19 -0
  75. data/test/test_helper.rb +111 -0
  76. data/test/threading/threading_with_large_pool_test.rb +90 -0
  77. data/test/threading_test.rb +88 -0
  78. data/test/tools/auth_repl_set_manager.rb +14 -0
  79. data/test/tools/keyfile.txt +1 -0
  80. data/test/tools/repl_set_manager.rb +377 -0
  81. data/test/unit/collection_test.rb +128 -0
  82. data/test/unit/connection_test.rb +85 -0
  83. data/test/unit/cursor_test.rb +127 -0
  84. data/test/unit/db_test.rb +96 -0
  85. data/test/unit/grid_test.rb +51 -0
  86. data/test/unit/node_test.rb +73 -0
  87. data/test/unit/pool_manager_test.rb +47 -0
  88. data/test/unit/pool_test.rb +9 -0
  89. data/test/unit/read_test.rb +101 -0
  90. data/test/unit/safe_test.rb +125 -0
  91. data/test/uri_test.rb +92 -0
  92. metadata +170 -99
  93. data/lib/jmongo/ajrb.rb +0 -189
  94. data/lib/jmongo/jmongo_jext.rb +0 -302
  95. data/lib/jmongo/mongo-2.6.3.jar +0 -0
  96. data/lib/jmongo/utils.rb +0 -61
@@ -1,302 +0,0 @@
1
- require 'timeout'
2
- require 'java'
3
-
4
- module JMongo
5
- java_import com.mongodb.BasicDBList
6
- java_import com.mongodb.BasicDBObject
7
- java_import com.mongodb.Bytes
8
- java_import com.mongodb.DB
9
- java_import com.mongodb.DBCollection
10
- java_import com.mongodb.DBCursor
11
- java_import com.mongodb.DBObject
12
- java_import com.mongodb.Mongo
13
- java_import com.mongodb.MongoOptions
14
- java_import com.mongodb.ServerAddress
15
- java_import com.mongodb.WriteConcern
16
- java_import com.mongodb.MongoException
17
- java_import com.mongodb.MongoURI
18
- end
19
-
20
- class Java::ComMongodb::BasicDBObject
21
- if RUBY_PLATFORM == 'java' && JRUBY_VERSION =~ /(1\.[6-9]|[2-9]\.[0-9])..*/
22
- def hashify
23
- self.to_map.to_hash
24
- end
25
- else
26
- def hashify
27
- Hash[self.key_set.to_a.zip(self.values.to_a)]
28
- end
29
- end
30
- end
31
-
32
- class Java::ComMongodb::BasicDBList
33
- def arrayify
34
- self.to_array
35
- end
36
- end
37
-
38
- # add missing BSON::ObjectId ruby methods
39
- class Java::OrgBsonTypes::ObjectId
40
- def self.create_pk(doc)
41
- doc.has_key?(:_id) || doc.has_key?('_id') ? doc : doc.merge!(:_id => self.new)
42
- end
43
-
44
- #"data=", "decode64", "encode64", "decode_b", "b64encode" - shout out if these methods are needed
45
-
46
- def data
47
- self.to_byte_array.to_a.map{|x| x & 0xFF}
48
- end
49
- def inspect
50
- "BSON::ObjectID('#{self.to_s}')"
51
- end
52
- def generation_time
53
- Time.at(self.get_time/1000).utc
54
- end
55
- end
56
-
57
- module BSON
58
-
59
- class Java::OrgBsonTypes::ObjectId
60
- def self.from_string(str)
61
- v = is_valid?(str.to_s)
62
- raise BSON::InvalidObjectId, "illegal ObjectID format" unless v
63
- new(str.to_s)
64
- end
65
- end
66
-
67
- ObjectId = Java::OrgBsonTypes::ObjectId
68
-
69
- OrderedHash = Java::ComMongodb::BasicDBObject
70
-
71
- class Java::ComMongodb::BasicDBObject
72
- def get(key)
73
- self.java_send(:get,key.to_s)
74
- end
75
- end
76
-
77
- class Code < String
78
- # copied verbatim from ruby driver
79
- # Hash mapping identifiers to their values
80
- attr_accessor :scope
81
- def initialize(code, scope={})
82
- super(code)
83
- @scope = scope
84
- end
85
- end
86
-
87
-
88
- # Generic Mongo Ruby Driver exception class.
89
- class MongoRubyError < StandardError; end
90
-
91
- # Raised when MongoDB itself has returned an error.
92
- class MongoDBError < RuntimeError; end
93
-
94
- # This will replace MongoDBError.
95
- class BSONError < MongoDBError; end
96
-
97
- # Raised when given a string is not valid utf-8 (Ruby 1.8 only).
98
- class InvalidStringEncoding < BSONError; end
99
-
100
- # Raised when attempting to initialize an invalid ObjectId.
101
- class InvalidObjectId < BSONError; end
102
- class InvalidObjectID < BSONError; end
103
-
104
- # Raised when trying to insert a document that exceeds the 4MB limit or
105
- # when the document contains objects that can't be serialized as BSON.
106
- class InvalidDocument < BSONError; end
107
-
108
- # Raised when an invalid name is used.
109
- class InvalidKeyName < BSONError; end
110
- end
111
-
112
- module Mongo
113
- def self.logger(logger=nil)
114
- logger ? @logger = logger : @logger
115
- end
116
- # Generic Mongo Ruby Driver exception class.
117
- class MongoRubyError < StandardError; end
118
-
119
- # Raised when MongoDB itself has returned an error.
120
- class MongoDBError < RuntimeError; end
121
-
122
- # Raised when invalid arguments are sent to Mongo Ruby methods.
123
- class MongoArgumentError < MongoRubyError; end
124
-
125
- # Raised on failures in connection to the database server.
126
- class ConnectionError < MongoRubyError; end
127
-
128
- # Raised on failures in connection to the database server.
129
- class ReplicaSetConnectionError < ConnectionError; end
130
-
131
- # Raised on failures in connection to the database server.
132
- class ConnectionTimeoutError < MongoRubyError; end
133
-
134
- # Raised when a connection operation fails.
135
- class ConnectionFailure < MongoDBError; end
136
-
137
- # Raised when authentication fails.
138
- class AuthenticationError < MongoDBError; end
139
-
140
- # Raised when a database operation fails.
141
- class OperationFailure < MongoDBError; end
142
-
143
- # Raised when a socket read operation times out.
144
- class OperationTimeout < MongoDBError; end
145
-
146
- # Raised when a client attempts to perform an invalid operation.
147
- class InvalidOperation < MongoDBError; end
148
-
149
- # Raised when an invalid collection or database name is used (invalid namespace name).
150
- class InvalidNSName < RuntimeError; end
151
-
152
- # Raised when the client supplies an invalid value to sort by.
153
- class InvalidSortValueError < MongoRubyError; end
154
- end
155
-
156
- __END__
157
-
158
- module BasicDBObjectExtentions
159
- def keys
160
- self.key_set.to_a
161
- end
162
- def values
163
- self.java_send(:values).to_a
164
- end
165
- def merge!(other)
166
- self.put_all(other)
167
- self
168
- end
169
- def merge(other)
170
- obj = new
171
- obj.merge!(self)
172
- obj.merge!(other)
173
- end
174
- def put(key,val)
175
- self.java_send(:put,key.to_s,val)
176
- end
177
- def get(key)
178
- self.java_send(:get,key.to_s)
179
- end
180
- def [](key)
181
- self.get(key)
182
- end
183
- end
184
-
185
- include JMongo::BasicDBObjectExtentions
186
-
187
- # ["ordered_keys=", "invert", "rehash", "replace"] - these methods don't make much sense for a BasicBSONObject and derivative classes
188
-
189
- alias :update :merge!
190
- alias :each_pair :each
191
- alias :length :size
192
-
193
- def hashify
194
- Hash[self.keys.zip(self.values)]
195
- end
196
-
197
- def ordered_keys
198
- self.keys
199
- end
200
-
201
- def index(val)
202
- ix = self.values.to_a.index(val)
203
- return nil unless ix
204
- self.key_set.to_a[ix]
205
- end
206
-
207
- def reject!(&block)
208
- n = self.size
209
- self.each do |k,v|
210
- if yield(k, v)
211
- delete(k)
212
- end
213
- end
214
- return nil if n == self.size
215
- self
216
- end
217
-
218
- def each_key
219
- keys_ = self.key_set.to_a
220
- while keys_.length > 0
221
- yield keys_.shift
222
- end
223
- end
224
-
225
- def each_value
226
- vals = self.values
227
- while vals.length > 0
228
- yield vals.shift
229
- end
230
- end
231
-
232
- def fetch(key,default=nil)
233
- v = self.get(key)
234
- return v if !!(v)
235
- return yield(key) if block_given?
236
- return default unless default.nil?
237
- raise "index not found"
238
- end
239
-
240
- def values_at(*args)
241
- ret = []
242
- args.each do |key|
243
- if self.contains_key?(key)
244
- ret << self.get(key)
245
- else
246
- ret << nil
247
- end
248
- end
249
- ret
250
- end
251
- alias :indexes :values_at
252
- alias :indices :values_at
253
-
254
- def shift
255
- if self.size == 0
256
- nil
257
- else
258
- k = self.keys.first
259
- [k, self.remove_field(k)]
260
- end
261
- end
262
-
263
- def []=(key,val)
264
- k = key.kind_of?(String) ? key : key.to_s
265
- self.put(k, val)
266
- end
267
-
268
- def store(key,val)
269
- k = key.kind_of?(String) ? key : key.to_s
270
- self.put(k.dup.freeze, val)
271
- end
272
-
273
- def key?(key)
274
- self.contains_key?(key)
275
- end
276
- alias :has_key? :key?
277
-
278
- def value?(val)
279
- self.contains_value?(val)
280
- end
281
- alias :has_value? :value?
282
-
283
- def inspect
284
- self.to_hash.inspect
285
- end
286
- alias :to_s :inspect
287
-
288
- def delete(key)
289
- unless self.contains_key?(key)
290
- block_given? ? yield(key) : nil
291
- else
292
- self.remove_field(key)
293
- end
294
- end
295
-
296
- def delete_if(&block)
297
- self.each do |k,v|
298
- if yield(k, v)
299
- delete(k)
300
- end
301
- end
302
- end
Binary file
@@ -1,61 +0,0 @@
1
- # Copyright (C) 2010 Chuck Remes
2
- #
3
- # Licensed under the Apache License, Version 2.0 (the "License");
4
- # you may not use this file except in compliance with the License.
5
- # You may obtain a copy of the License at
6
- #
7
- # http://www.apache.org/licenses/LICENSE-2.0
8
- #
9
- # Unless required by applicable law or agreed to in writing, software
10
- # distributed under the License is distributed on an "AS IS" BASIS,
11
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- # See the License for the specific language governing permissions and
13
- # limitations under the License.
14
- module Mongo
15
-
16
- # module Utils
17
- # def to_dbobject obj
18
- # case obj
19
- # when Array
20
- # array_to_dblist obj
21
- # when Hash
22
- # hash_to_dbobject obj
23
- # else
24
- # puts "Un-handled class type [#{obj.class}]"
25
- # obj
26
- # end
27
- # end
28
- #
29
- # def from_dbobject obj
30
- # hsh = {}
31
- # obj.toMap.keySet.each do |key|
32
- # value = obj.get key
33
- # puts "value class [#{value.class}]"
34
- # end
35
- # end
36
- #
37
- # private
38
- #
39
- # def hash_to_dbobject doc
40
- # obj = JMongo::BasicDBObject.new
41
- #
42
- # doc.each_pair do |key, value|
43
- # obj.append(key, to_dbobject(value))
44
- # end
45
- #
46
- # obj
47
- # end
48
- #
49
- # def array_to_dblist ary
50
- # list = JMongo::BasicDBList.new
51
- #
52
- # ary.each_with_index do |element, index|
53
- # list.put(index, to_dbobject(value))
54
- # end
55
- #
56
- # list
57
- # end
58
- #
59
- # end # module Utils
60
-
61
- end # module Mongo