jmongo 1.0.3 → 1.1.0

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.
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
metadata CHANGED
@@ -1,120 +1,191 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: jmongo
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
4
5
  prerelease:
5
- version: 1.0.3
6
6
  platform: ruby
7
- authors:
8
- - Chuck Remes
9
- - Guy Boertje
10
- - Lee Henson
7
+ authors:
8
+ - Chuck Remes
9
+ - Guy Boertje
10
+ - Lee Henson
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
-
15
- date: 2011-09-16 00:00:00 Z
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
18
- name: require_all
19
- prerelease: false
20
- requirement: &id001 !ruby/object:Gem::Requirement
21
- none: false
22
- requirements:
23
- - - ~>
24
- - !ruby/object:Gem::Version
25
- version: "1.2"
26
- type: :runtime
27
- version_requirements: *id001
28
- - !ruby/object:Gem::Dependency
29
- name: awesome_print
30
- prerelease: false
31
- requirement: &id002 !ruby/object:Gem::Requirement
32
- none: false
33
- requirements:
34
- - - ~>
35
- - !ruby/object:Gem::Version
36
- version: "0.4"
37
- type: :development
38
- version_requirements: *id002
39
- - !ruby/object:Gem::Dependency
40
- name: fuubar
41
- prerelease: false
42
- requirement: &id003 !ruby/object:Gem::Requirement
43
- none: false
44
- requirements:
45
- - - ~>
46
- - !ruby/object:Gem::Version
47
- version: "0.0"
48
- type: :development
49
- version_requirements: *id003
50
- - !ruby/object:Gem::Dependency
51
- name: rspec
52
- prerelease: false
53
- requirement: &id004 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ~>
57
- - !ruby/object:Gem::Version
58
- version: "2.6"
59
- type: :development
60
- version_requirements: *id004
14
+ date: 2011-10-03 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: require_all
18
+ requirement: &21113940 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: '1.2'
24
+ type: :runtime
25
+ prerelease: false
26
+ version_requirements: *21113940
27
+ - !ruby/object:Gem::Dependency
28
+ name: awesome_print
29
+ requirement: &21113180 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '0.4'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *21113180
38
+ - !ruby/object:Gem::Dependency
39
+ name: fuubar
40
+ requirement: &21112600 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: '0.0'
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *21112600
49
+ - !ruby/object:Gem::Dependency
50
+ name: rspec
51
+ requirement: &21112020 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: '2.6'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *21112020
61
60
  description: Thin jruby wrapper around Mongo Java Driver
62
- email:
63
- - cremes@mac.com
64
- - guyboertje@gmail.com
65
- - lee.m.henson@gmail.com
66
- executables:
67
- - jmongo
61
+ email:
62
+ - cremes@mac.com
63
+ - guyboertje@gmail.com
64
+ - lee.m.henson@gmail.com
65
+ executables:
66
+ - jmongo
68
67
  extensions: []
69
-
70
68
  extra_rdoc_files: []
71
-
72
- files:
73
- - History.txt
74
- - LICENSE.txt
75
- - README.txt
76
- - Rakefile
77
- - bin/jmongo
78
- - jmongo.gemspec
79
- - lib/jmongo.rb
80
- - lib/jmongo/ajrb.rb
81
- - lib/jmongo/collection.rb
82
- - lib/jmongo/connection.rb
83
- - lib/jmongo/cursor.rb
84
- - lib/jmongo/db.rb
85
- - lib/jmongo/exceptions.rb
86
- - lib/jmongo/jmongo_jext.rb
87
- - lib/jmongo/mongo-2.6.3.jar
88
- - lib/jmongo/utils.rb
89
- - lib/jmongo/version.rb
90
- - spec/jmongo_spec.rb
91
- - spec/spec_helper.rb
69
+ files:
70
+ - Gemfile
71
+ - Gemfile.lock
72
+ - History.txt
73
+ - LICENSE.txt
74
+ - README.txt
75
+ - Rakefile
76
+ - bin/jmongo
77
+ - jmongo.gemspec
78
+ - lib/jmongo.rb
79
+ - lib/jmongo/collection.rb
80
+ - lib/jmongo/connection.rb
81
+ - lib/jmongo/cursor.rb
82
+ - lib/jmongo/db.rb
83
+ - lib/jmongo/exceptions.rb
84
+ - lib/jmongo/mongo-2.6.5.gb1.jar
85
+ - lib/jmongo/mongo/bson.rb
86
+ - lib/jmongo/mongo/collection.rb
87
+ - lib/jmongo/mongo/connection.rb
88
+ - lib/jmongo/mongo/db.rb
89
+ - lib/jmongo/mongo/jmongo.rb
90
+ - lib/jmongo/mongo/mongo.rb
91
+ - lib/jmongo/mongo/ruby_ext.rb
92
+ - lib/jmongo/mongo/utils.rb
93
+ - lib/jmongo/version.rb
94
+ - spec/jmongo_spec.rb
95
+ - spec/spec_helper.rb
96
+ - test-results.txt
97
+ - test/auxillary/1.4_features.rb
98
+ - test/auxillary/authentication_test.rb
99
+ - test/auxillary/autoreconnect_test.rb
100
+ - test/auxillary/fork_test.rb
101
+ - test/auxillary/repl_set_auth_test.rb
102
+ - test/auxillary/slave_connection_test.rb
103
+ - test/auxillary/threaded_authentication_test.rb
104
+ - test/bson/binary_test.rb
105
+ - test/bson/bson_test.rb
106
+ - test/bson/byte_buffer_test.rb
107
+ - test/bson/hash_with_indifferent_access_test.rb
108
+ - test/bson/json_test.rb
109
+ - test/bson/object_id_test.rb
110
+ - test/bson/ordered_hash_test.rb
111
+ - test/bson/test_helper.rb
112
+ - test/bson/timestamp_test.rb
113
+ - test/collection_test.rb
114
+ - test/connection_test.rb
115
+ - test/conversions_test.rb
116
+ - test/cursor_fail_test.rb
117
+ - test/cursor_message_test.rb
118
+ - test/cursor_test.rb
119
+ - test/data/empty_data
120
+ - test/data/sample_data
121
+ - test/data/sample_file.pdf
122
+ - test/data/small_data.txt
123
+ - test/db_api_test.rb
124
+ - test/db_connection_test.rb
125
+ - test/db_test.rb
126
+ - test/grid_file_system_test.rb
127
+ - test/grid_io_test.rb
128
+ - test/grid_test.rb
129
+ - test/load/thin/config.ru
130
+ - test/load/thin/config.yml.template
131
+ - test/load/thin/load.rb
132
+ - test/load/unicorn/config.ru
133
+ - test/load/unicorn/load.rb
134
+ - test/load/unicorn/unicorn.rb.template
135
+ - test/replica_sets/connect_test.rb
136
+ - test/replica_sets/connection_string_test.rb
137
+ - test/replica_sets/count_test.rb
138
+ - test/replica_sets/insert_test.rb
139
+ - test/replica_sets/pooled_insert_test.rb
140
+ - test/replica_sets/query_secondaries.rb
141
+ - test/replica_sets/query_test.rb
142
+ - test/replica_sets/read_preference_test.rb
143
+ - test/replica_sets/refresh_test.rb
144
+ - test/replica_sets/replication_ack_test.rb
145
+ - test/replica_sets/rs_test_helper.rb
146
+ - test/safe_test.rb
147
+ - test/support/hash_with_indifferent_access.rb
148
+ - test/support/keys.rb
149
+ - test/support_test.rb
150
+ - test/test_helper.rb
151
+ - test/threading/threading_with_large_pool_test.rb
152
+ - test/threading_test.rb
153
+ - test/tools/auth_repl_set_manager.rb
154
+ - test/tools/keyfile.txt
155
+ - test/tools/repl_set_manager.rb
156
+ - test/unit/collection_test.rb
157
+ - test/unit/connection_test.rb
158
+ - test/unit/cursor_test.rb
159
+ - test/unit/db_test.rb
160
+ - test/unit/grid_test.rb
161
+ - test/unit/node_test.rb
162
+ - test/unit/pool_manager_test.rb
163
+ - test/unit/pool_test.rb
164
+ - test/unit/read_test.rb
165
+ - test/unit/safe_test.rb
166
+ - test/uri_test.rb
92
167
  homepage: http://github.com/guyboertje/jmongo
93
168
  licenses: []
94
-
95
169
  post_install_message:
96
170
  rdoc_options: []
97
-
98
- require_paths:
99
- - lib
100
- required_ruby_version: !ruby/object:Gem::Requirement
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
101
174
  none: false
102
- requirements:
103
- - - ">="
104
- - !ruby/object:Gem::Version
105
- version: "0"
106
- required_rubygems_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ! '>='
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
180
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- version: "0"
181
+ requirements:
182
+ - - ! '>='
183
+ - !ruby/object:Gem::Version
184
+ version: '0'
112
185
  requirements: []
113
-
114
186
  rubyforge_project:
115
- rubygems_version: 1.8.10
187
+ rubygems_version: 1.8.6
116
188
  signing_key:
117
189
  specification_version: 3
118
190
  summary: Thin ruby wrapper around Mongo Java Driver; for JRuby only
119
191
  test_files: []
120
-
@@ -1,189 +0,0 @@
1
- # Copyright (C) 2010 Guy Boertje
2
- #
3
- # Mongo::JavaImpl::Connection_
4
- # Mongo::JavaImpl::Db_
5
- # Mongo::JavaImpl::Collection_
6
- # Mongo::JavaImpl::Utils
7
- #
8
-
9
- module Mongo
10
-
11
- module JavaImpl
12
-
13
- module Connection_
14
- module InstanceMethods
15
- private
16
- def get_db_names
17
- @connection.get_database_names
18
- end
19
- def drop_a_db name
20
- @connection.drop_database(name)
21
- end
22
- def _server_version
23
- @connection.get_version
24
- end
25
- end
26
- module ClassMethods
27
- URI_RE = /^mongodb:\/\/(([-.\w]+):([^@]+)@)?([-.\w]+)(:([\w]+))?(\/([-\w]+))?/
28
- OPTS_KEYS = %W[maxpoolsize waitqueuemultiple waitqueuetimeoutms connecttimeoutms sockettimeoutms
29
- autoconnectretry slaveok safe w wtimeout fsync]
30
-
31
- def _from_uri uri, opts={}
32
- optarr = []
33
- unless uri =~ URI_RE
34
- raise MongoArgumentError, "MongoDB URI incorrect"
35
- end
36
- pieces = uri.split("//")
37
- extra = pieces.last.count('/') == 0 ? "/" : ""
38
- opts.each do|k,v|
39
- if OPTS_KEYS.include?(k.to_s) && !v.nil?
40
- (optarr << "#{k}=#{v}")
41
- end
42
- end
43
- unless optarr.empty?
44
- uri << "#{extra}?" << optarr.join("&")
45
- end
46
- puts "+++++++++++++++ _from_uri uri: #{uri.inspect}"
47
- muri = Java::ComMongodb::MongoURI.new(uri)
48
- opts[:new_from_uri] = JMongo::Mongo.new(muri)
49
- new("",0,opts)
50
- end
51
- end
52
- end
53
-
54
- module Db_
55
- SYSTEM_NAMESPACE_COLLECTION = "system.namespaces"
56
- #SYSTEM_INDEX_COLLECTION = "system.indexes"
57
- #SYSTEM_PROFILE_COLLECTION = "system.profile"
58
- #SYSTEM_USER_COLLECTION = "system.users"
59
- #SYSTEM_COMMAND_COLLECTION = "$cmd"
60
-
61
- private
62
- def exec_command(cmd)
63
- cmd_res = @j_db.command(to_dbobject({cmd => true}))
64
- from_dbobject(cmd_res)
65
- end
66
- def has_coll(name)
67
- @j_db.collection_exists(name)
68
- end
69
- end
70
-
71
- module Collection_
72
- private
73
- def create_indexes(obj,opts)
74
- return @j_collection.ensureIndex("#{obj}") if obj.is_a?(String) || obj.is_a?(Symbol)
75
-
76
- obj = Hash[obj] if obj.is_a?(Array)
77
-
78
- return @j_collection.ensureIndex(to_dbobject(obj),to_dbobject(opts)) if opts.is_a?(Hash)
79
- @j_collection.ensureIndex(to_dbobject(obj),generate_index_name(obj),!!(opts))
80
- end
81
-
82
- def remove_documents(obj, safe=nil)
83
- wr = @j_collection.remove(to_dbobject(obj), write_concern(safe))
84
- wr.get_error.nil? && wr.get_n > 0
85
- end
86
-
87
- def insert_documents(obj, safe=nil)
88
- dbo = to_dbobject(obj)
89
- @j_collection.insert(dbo, write_concern(safe))
90
- obj.collect { |o| o['_id'] || o[:_id] }
91
- end
92
-
93
- def find_and_modify_document(query,fields,sort,remove,update,new_,upsert)
94
- from_dbobject @j_collection.find_and_modify(to_dbobject(query),to_dbobject(fields),to_dbobject(sort),remove,to_dbobject(update),new_,upsert)
95
- end
96
-
97
- def find_one_document(document, fields)
98
- from_dbobject @j_collection.findOne(to_dbobject(document),to_dbobject(fields))
99
- end
100
-
101
- def update_documents(selector, document, upsert=false, multi=false, safe=nil)
102
- @j_collection.update(to_dbobject(selector),to_dbobject(document), upsert, multi, write_concern(safe))
103
- end
104
-
105
- def save_document(obj, safe=nil)
106
- id = obj.delete(:_id) || obj.delete('_id')
107
- obj['_id'] = id || BSON::ObjectId.new
108
- db_obj = to_dbobject(obj)
109
- @j_collection.save(db_obj, write_concern(safe))
110
- obj['_id']
111
- end
112
- end
113
- module NoImplYetClass
114
- def raise_not_implemented
115
- raise NoMethodError, "This method hasn't been implemented yet."
116
- end
117
- end
118
- module Utils
119
- def raise_not_implemented
120
- raise NoMethodError, "This method hasn't been implemented yet."
121
- end
122
-
123
- def to_dbobject obj
124
- if obj.respond_to?(:merge)
125
- hash_to_dbobject(obj)
126
- elsif obj.respond_to?(:compact)
127
- array_to_dblist(obj)
128
- elsif obj.class == Symbol
129
- obj.to_s
130
- else
131
- # primitive value, no conversion necessary
132
- #puts "Un-handled class type [#{obj.class}]"
133
- obj
134
- end
135
- end
136
-
137
- def from_dbobject obj
138
- # for better upstream compatibility make the objects into ruby hash or array
139
- if obj.class == Java::ComMongodb::BasicDBObject
140
- h = obj.hashify
141
- Hash[h.keys.zip(h.values.map{|v| from_dbobject(v)})]
142
- elsif obj.class == Java::ComMongodb::BasicDBList
143
- obj.arrayify.map{|v| from_dbobject(v)}
144
- elsif obj.class == Java::JavaUtil::Date
145
- Time.at(obj.get_time/1000.0)
146
- else
147
- obj
148
- end
149
- end
150
-
151
- private
152
-
153
- def hash_to_dbobject doc
154
- obj = JMongo::BasicDBObject.new
155
- doc.each_pair do |key, value|
156
- obj.put(key.to_s, to_dbobject(value))
157
- end
158
- obj
159
- end
160
-
161
- def array_to_dblist ary
162
- list = [] #Java::ComMongodb::DBObject[ary.length].new
163
- ary.each_with_index do |ele, i|
164
- list[i] = to_dbobject(ele)
165
- end
166
- list
167
- end
168
-
169
- #@collection.save({:doc => 'foo'}, :safe => nil) ---> NONE = new WriteConcern(-1)
170
- #@collection.save({:doc => 'foo'}, :safe => true) ---> NORMAL = new WriteConcern(0)
171
- #@collection.save({:doc => 'foo'}, :safe => {:w => 2}) ---> new WriteConcern( 2 , 0 , false)
172
- #@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200}) ---> new WriteConcern( 2 , 200 , false)
173
- #@collection.save({:doc => 'foo'}, :safe => {:w => 2, :wtimeout => 200, :fsync => true}) ---> new WriteConcern( 2 , 0 , true)
174
- #@collection.save({:doc => 'foo'}, :safe => {:fsync => true}) ---> FSYNC_SAFE = new WriteConcern( 1 , 0 , true)
175
-
176
- def write_concern(safe)
177
- return JMongo::WriteConcern.new(-1) if safe.nil?
178
- return JMongo::WriteConcern.new(0) if safe.is_a?(FalseClass)
179
- return JMongo::WriteConcern.new(1) if safe.is_a?(TrueClass)
180
- return JMongo::WriteConcern.new(0) unless safe.is_a?(Hash)
181
- w = safe[:w] || 1
182
- t = safe[:wtimeout] || 0
183
- f = !!(safe[:fsync] || false)
184
- JMongo::WriteConcern.new(w, t, f) #dont laugh!
185
- end
186
- end
187
- end
188
- end
189
-