bson_ext 1.7.1 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,190 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ Copyright 2008-2010 10gen, Inc.
179
+
180
+ Licensed under the Apache License, Version 2.0 (the "License");
181
+ you may not use this file except in compliance with the License.
182
+ You may obtain a copy of the License at
183
+
184
+ http://www.apache.org/licenses/LICENSE-2.0
185
+
186
+ Unless required by applicable law or agreed to in writing, software
187
+ distributed under the License is distributed on an "AS IS" BASIS,
188
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
189
+ See the License for the specific language governing permissions and
190
+ limitations under the License.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.8.0
@@ -1,26 +1,21 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
- require 'bson'
3
-
4
- VERSION_HEADER = File.open(File.join(File.dirname(__FILE__), 'ext', 'cbson', 'version.h'), "r")
5
- VERSION = VERSION_HEADER.read.scan(/VERSION "(\d[^"]+)"/)[0][0]
6
1
  Gem::Specification.new do |s|
7
- s.name = 'bson_ext'
2
+ s.name = 'bson_ext'
8
3
 
9
- s.version = VERSION
10
- s.platform = Gem::Platform::RUBY
11
- s.summary = 'C extensions for Ruby BSON.'
12
- s.description = 'C extensions to accelerate the Ruby BSON serialization. For more information about BSON, see http://bsonspec.org. For information about MongoDB, see http://www.mongodb.org.'
4
+ s.version = File.read(File.join(File.dirname(__FILE__), 'VERSION'))
5
+ s.platform = Gem::Platform::RUBY
6
+ s.authors = ['Tyler Brock', 'Gary Murakami', 'Emily Stolfo', 'Brandon Black']
7
+ s.email = 'mongodb-dev@googlegroups.com'
8
+ s.homepage = 'http://www.mongodb.org'
9
+ s.summary = 'C extensions for Ruby BSON.'
10
+ s.description = 'C extensions to accelerate the Ruby BSON serialization. For more information about BSON, see http://bsonspec.org. For information about MongoDB, see http://www.mongodb.org.'
11
+ s.rubyforge_project = 'bson_ext'
13
12
 
14
- s.require_paths = ['ext']
15
- s.files = ['Rakefile', 'bson_ext.gemspec']
16
- s.files += Dir['ext/**/*.rb'] + Dir['ext/**/*.c'] + Dir['ext/**/*.h']
17
- s.test_files = []
13
+ s.files = ['bson_ext.gemspec', 'LICENSE', 'VERSION']
14
+ s.files += Dir['ext/**/*.rb'] + Dir['ext/**/*.c'] + Dir['ext/**/*.h']
18
15
 
19
- s.has_rdoc = false
20
- s.extensions << 'ext/cbson/extconf.rb'
16
+ s.require_paths = ['ext/bson_ext']
17
+ s.extensions = ['ext/cbson/extconf.rb']
18
+ s.has_rdoc = 'yard'
21
19
 
22
- s.authors = ['Mike Dirolf', 'Kyle Banker', 'Tyler Brock', 'Gary Murakami']
23
- s.email = 'mongodb-dev@googlegroups.com'
24
- s.homepage = 'http://www.mongodb.org'
25
- s.add_dependency('bson', "~> #{BSON::VERSION}")
26
- end
20
+ s.add_dependency('bson', "~> #{s.version}")
21
+ end
@@ -457,6 +457,16 @@ static int write_element(VALUE key, VALUE value, VALUE extra, int allow_id) {
457
457
  rb_raise(InvalidDocument, "Cannot serialize the Numeric type %s as BSON; only Bignum, Fixnum, and Float are supported.", cls);
458
458
  break;
459
459
  }
460
+ if (strcmp(cls, "ActiveSupport::Multibyte::Chars") == 0) {
461
+ int length;
462
+ VALUE str = StringValue(value);
463
+ write_name_and_type(buffer, key, 0x02);
464
+ length = RSTRING_LENINT(str) + 1;
465
+ SAFE_WRITE(buffer, (char*)&length, 4);
466
+ write_utf8(buffer, str, 0);
467
+ SAFE_WRITE(buffer, &zero, 1);
468
+ break;
469
+ }
460
470
  bson_buffer_free(buffer);
461
471
  rb_raise(InvalidDocument, "Cannot serialize an object of class %s into BSON.", cls);
462
472
  break;
@@ -935,7 +945,7 @@ static VALUE objectid_generate(int argc, VALUE* args, VALUE self)
935
945
  MEMCPY(&oid_bytes[7], &pid, unsigned char, 2);
936
946
 
937
947
  /* No need to synchronize modification of this counter between threads;
938
- * MRI global interpreter lock guarantees serializaility.
948
+ * MRI global interpreter lock guarantees serializability.
939
949
  *
940
950
  * Compiler should optimize out impossible branch.
941
951
  */
@@ -14,4 +14,4 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- #define VERSION "1.7.1"
17
+ #define VERSION "1.8.0"
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bson_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.1
4
+ version: 1.8.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Mike Dirolf
9
- - Kyle Banker
10
8
  - Tyler Brock
11
9
  - Gary Murakami
10
+ - Emily Stolfo
11
+ - Brandon Black
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2012-11-15 00:00:00.000000000 Z
15
+ date: 2012-11-27 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bson
@@ -21,7 +21,7 @@ dependencies:
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 1.7.1
24
+ version: 1.8.0
25
25
  type: :runtime
26
26
  prerelease: false
27
27
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  requirements:
30
30
  - - ~>
31
31
  - !ruby/object:Gem::Version
32
- version: 1.7.1
32
+ version: 1.8.0
33
33
  description: C extensions to accelerate the Ruby BSON serialization. For more information
34
34
  about BSON, see http://bsonspec.org. For information about MongoDB, see http://www.mongodb.org.
35
35
  email: mongodb-dev@googlegroups.com
@@ -38,30 +38,28 @@ extensions:
38
38
  - ext/cbson/extconf.rb
39
39
  extra_rdoc_files: []
40
40
  files:
41
- - Rakefile
42
41
  - bson_ext.gemspec
42
+ - LICENSE
43
+ - VERSION
43
44
  - ext/cbson/extconf.rb
44
- - ext/cbson/bson_buffer.c
45
- - ext/cbson/cbson.c
46
45
  - ext/cbson/encoding_helpers.c
47
- - ext/cbson/bson_buffer.h
46
+ - ext/cbson/cbson.c
47
+ - ext/cbson/bson_buffer.c
48
48
  - ext/cbson/encoding_helpers.h
49
49
  - ext/cbson/version.h
50
+ - ext/cbson/bson_buffer.h
50
51
  homepage: http://www.mongodb.org
51
52
  licenses: []
52
53
  post_install_message:
53
54
  rdoc_options: []
54
55
  require_paths:
55
- - ext
56
+ - ext/bson_ext
56
57
  required_ruby_version: !ruby/object:Gem::Requirement
57
58
  none: false
58
59
  requirements:
59
60
  - - ! '>='
60
61
  - !ruby/object:Gem::Version
61
62
  version: '0'
62
- segments:
63
- - 0
64
- hash: 2150322211376192916
65
63
  required_rubygems_version: !ruby/object:Gem::Requirement
66
64
  none: false
67
65
  requirements:
@@ -69,10 +67,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
69
67
  - !ruby/object:Gem::Version
70
68
  version: '0'
71
69
  requirements: []
72
- rubyforge_project:
70
+ rubyforge_project: bson_ext
73
71
  rubygems_version: 1.8.24
74
72
  signing_key:
75
73
  specification_version: 3
76
74
  summary: C extensions for Ruby BSON.
77
75
  test_files: []
78
- has_rdoc: false
76
+ has_rdoc: yard
data/Rakefile DELETED
@@ -1,333 +0,0 @@
1
- # -*- mode: ruby; -*-
2
- if RUBY_VERSION < '1.9.0'
3
- require 'rubygems'
4
- require 'rubygems/specification'
5
- end
6
-
7
- require 'fileutils'
8
- require 'rake/testtask'
9
- require 'rake'
10
- require 'rake/extensiontask'
11
- require 'rake/javaextensiontask'
12
-
13
- begin
14
- require 'git'
15
- require 'devkit'
16
- require 'ci/reporter/rake/test_unit'
17
- rescue LoadError
18
- end
19
-
20
- ENV['TEST_MODE'] = 'TRUE'
21
-
22
- Rake::ExtensionTask.new('cbson') do |ext|
23
- ext.lib_dir = "lib/bson_ext"
24
- end
25
-
26
- #Rake::JavaExtensionTask.new('jbson') do |ext| # not yet functional
27
- # ext.ext_dir = 'ext/src/org/jbson'
28
- #end
29
-
30
- desc "Compiles and tests MongoDB Ruby driver w/ C extensions."
31
- task :c do
32
- Rake::Task['compile:cbson'].invoke
33
- Rake::Task['test:c'].invoke
34
- end
35
-
36
- task :java do
37
- Rake::Task['build:java'].invoke
38
- Rake::Task['test:ruby'].invoke
39
- end
40
-
41
- namespace :build do
42
- desc "Build the java extensions."
43
- task :java do
44
- puts "Building Java extensions..."
45
- java_dir = File.join(File.dirname(__FILE__), 'ext', 'java')
46
- jar_dir = File.join(java_dir, 'jar')
47
-
48
- jruby_jar = File.join(jar_dir, 'jruby.jar')
49
- mongo_jar = File.join(jar_dir, 'mongo-2.6.5.jar')
50
-
51
- src_base = File.join(java_dir, 'src')
52
-
53
- system("javac -Xlint:deprecation -Xlint:unchecked -classpath #{jruby_jar}:#{mongo_jar} #{File.join(src_base, 'org', 'jbson', '*.java')}")
54
- system("cd #{src_base} && jar cf #{File.join(jar_dir, 'jbson.jar')} #{File.join('.', 'org', 'jbson', '*.class')}")
55
- end
56
- end
57
-
58
- desc "Test the MongoDB Ruby driver."
59
- task :test do
60
- puts "\nTo test the driver with the C-extensions:\nrake test:c\n\n"
61
- puts "To test the pure ruby driver: \nrake test:ruby\n\n"
62
- end
63
-
64
- task :path do
65
- $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
66
- end
67
-
68
- namespace :test do
69
-
70
- desc "Test the driver with the C extension enabled."
71
- task :c => :path do
72
- ENV['C_EXT'] = 'TRUE'
73
- if ENV['TEST']
74
- Rake::Task['test:functional'].invoke
75
- else
76
- Rake::Task['test:unit'].invoke
77
- Rake::Task['test:functional'].invoke
78
- Rake::Task['test:bson'].invoke
79
- Rake::Task['test:pooled_threading'].invoke
80
- Rake::Task['test:drop_databases'].invoke
81
- end
82
- ENV['C_EXT'] = nil
83
- end
84
-
85
- desc "Test the driver using pure ruby (no C extension)"
86
- task :ruby => :path do
87
- ENV['C_EXT'] = nil
88
- if ENV['TEST']
89
- Rake::Task['test:functional'].invoke
90
- else
91
- Rake::Task['test:unit'].invoke
92
- Rake::Task['test:functional'].invoke
93
- Rake::Task['test:bson'].invoke
94
- Rake::Task['test:pooled_threading'].invoke
95
- Rake::Task['test:drop_databases'].invoke
96
- end
97
- end
98
-
99
- desc "Run the replica set test suite"
100
- Rake::TestTask.new(:rs) do |t|
101
- t.test_files = FileList['test/replica_sets/*_test.rb']
102
- t.ruby_opts << '-w'
103
- end
104
-
105
- desc "Run the replica set test suite"
106
- Rake::TestTask.new(:rs_no_threads) do |t|
107
- t.test_files = FileList['test/replica_sets/*_test.rb'] - ["test/replica_sets/refresh_with_threads_test.rb"]
108
- t.ruby_opts << '-w'
109
- end
110
-
111
- desc "Run the sharded cluster test suite"
112
- Rake::TestTask.new(:sc) do |t|
113
- t.test_files = FileList['test/sharded_cluster/*_test.rb']
114
- t.ruby_opts << '-w'
115
- end
116
-
117
- Rake::TestTask.new(:unit) do |t|
118
- t.test_files = FileList['test/unit/*_test.rb']
119
- t.ruby_opts << '-w'
120
- end
121
-
122
- Rake::TestTask.new(:functional) do |t|
123
- t.test_files = FileList['test/*_test.rb']
124
- t.ruby_opts << '-w'
125
- end
126
-
127
- Rake::TestTask.new(:pooled_threading) do |t|
128
- t.test_files = FileList['test/threading/*_test.rb']
129
- t.ruby_opts << '-w'
130
- end
131
-
132
- Rake::TestTask.new(:auto_reconnect) do |t|
133
- t.test_files = FileList['test/auxillary/autoreconnect_test.rb']
134
- t.ruby_opts << '-w'
135
- end
136
-
137
- Rake::TestTask.new(:authentication) do |t|
138
- t.test_files = FileList['test/auxillary/authentication_test.rb']
139
- t.ruby_opts << '-w'
140
- end
141
-
142
- Rake::TestTask.new(:new_features) do |t|
143
- t.test_files = FileList['test/auxillary/1.4_features.rb']
144
- t.ruby_opts << '-w'
145
- end
146
-
147
- Rake::TestTask.new(:bson) do |t|
148
- t.test_files = FileList['test/bson/*_test.rb']
149
- t.ruby_opts << '-w'
150
- end
151
-
152
- task :drop_databases => :path do |t|
153
- puts "Dropping test databases..."
154
- require 'mongo'
155
- con = Mongo::Connection.new(ENV['MONGO_RUBY_DRIVER_HOST'] || 'localhost',
156
- ENV['MONGO_RUBY_DRIVER_PORT'] || Mongo::Connection::DEFAULT_PORT)
157
- con.database_names.each do |name|
158
- con.drop_database(name) if name =~ /^ruby-test/
159
- end
160
- end
161
- end
162
-
163
- desc "Generate RDOC documentation"
164
- task :rdoc do
165
- version = eval(File.read("mongo.gemspec")).version
166
- out = File.join('html', version.to_s)
167
- FileUtils.rm_rf('html')
168
- system "rdoc --main README.md --op #{out} --inline-source --quiet README.md `find lib -name '*.rb'`"
169
- end
170
-
171
- desc "Generate YARD documentation"
172
- task :ydoc do
173
- require './lib/mongo/version.rb'
174
- out = File.join('ydoc', Mongo::VERSION)
175
- FileUtils.rm_rf('ydoc')
176
- system "yardoc -o #{out} --title MongoRuby-#{Mongo::VERSION}"
177
- end
178
-
179
- namespace :jenkins do
180
- task :ci_reporter do
181
- begin
182
- require 'ci/reporter/rake/test_unit'
183
- rescue LoadError
184
- warn "Warning: Unable to load ci_reporter gem."
185
- end
186
- end
187
-
188
- namespace :test do
189
- task :ruby do
190
- Rake::Task['test:ruby'].invoke
191
- end
192
-
193
- task :c do
194
- Rake::Task['gem:install_extensions'].invoke
195
- Rake::Task['test:c'].invoke
196
- end
197
- end
198
- end
199
-
200
- namespace :gem do
201
- desc "Install the gem locally"
202
- task :install do
203
- `gem build bson.gemspec`
204
- `gem install --no-rdoc --no-ri bson-*.gem`
205
-
206
- `gem build mongo.gemspec`
207
- `gem install --no-rdoc --no-ri mongo-*.gem`
208
-
209
- `rm mongo-*.gem`
210
- `rm bson-*.gem`
211
- end
212
-
213
- desc "Uninstall the optional c extensions"
214
- task :uninstall_extensions do
215
- `gem uninstall bson_ext`
216
- end
217
-
218
- desc "Install the optional c extensions"
219
- task :install_extensions do
220
- `gem build bson_ext.gemspec`
221
- `gem install --no-rdoc --no-ri bson_ext-*.gem`
222
- `rm bson_ext-*.gem`
223
- end
224
- end
225
-
226
- namespace :ci do
227
- namespace :test do
228
- task :c => :path do
229
- Rake::Task['gem:install'].invoke
230
- Rake::Task['gem:install_extensions'].invoke
231
- Rake::Task['test:c'].invoke
232
- end
233
- end
234
- end
235
-
236
- # Deployment
237
- VERSION_FILES = %w(lib/bson/version.rb lib/mongo/version.rb ext/cbson/version.h)
238
- GEMSPECS = %w(bson.gemspec bson.java.gemspec bson_ext.gemspec mongo.gemspec)
239
-
240
- def gem_list(version)
241
- files = []
242
- files << "bson-#{version}.gem"
243
- files << "bson-#{version}-java.gem"
244
- files << "bson_ext-#{version}.gem"
245
- files << "mongo-#{version}.gem"
246
- return files
247
- end
248
-
249
- def check_gem_list_existence(version)
250
- gem_list(version).each do |filename|
251
- if !File.exists?(filename)
252
- raise "#{filename} does not exist!"
253
- end
254
- end
255
- end
256
-
257
- def check_version(version)
258
- if !(version =~ /(\d).(\d).(\d)(.rc(\d))?/)
259
- raise "Must specify a valid version (e.g., x.y.z)"
260
- end
261
- end
262
-
263
- def current_version
264
- f = File.open("lib/mongo/version.rb")
265
- str = f.read
266
- str =~ /VERSION\s+=\s+([.\drc"]+)$/
267
- return $1
268
- end
269
-
270
- def change_version(new_version)
271
- version = current_version
272
- puts "Changing version from #{version} to #{new_version}"
273
- VERSION_FILES.each do |filename|
274
- f = File.open(filename)
275
- str = f.read
276
- f.close
277
- str.gsub!(version, "\"#{new_version}\"")
278
- File.open(filename, 'w') do |f|
279
- f.write(str)
280
- end
281
- end
282
- end
283
-
284
- namespace :deploy do
285
- desc "Change version to new release"
286
- task :change_version, [:version] do |t, args|
287
- check_version(args[:version])
288
- change_version(args[:version])
289
- end
290
-
291
- desc "Add version files, commit, tag release"
292
- task :git_prepare do |t, args|
293
- g = Git.open(Dir.getwd())
294
- version = current_version
295
- to_commit = VERSION_FILES << 'docs/HISTORY.md'
296
- g.add(to_commit)
297
- g.commit "RELEASE #{version}"
298
- g.add_tag("#{version}")
299
- end
300
-
301
- desc "Push release to github"
302
- task :git_push do
303
- g = Git.open(Dir.getwd())
304
- g.push
305
- end
306
-
307
- desc "Build all gems"
308
- task :gem_build do
309
- `rm *.gem`
310
- `gem build mongo.gemspec`
311
- `gem build bson.gemspec`
312
- `gem build bson.java.gemspec`
313
- `gem build bson_ext.gemspec`
314
- puts `ls *.gem`
315
- end
316
-
317
- desc "Push all gems to RubyGems"
318
- task :gem_push do |t, args|
319
- check_gem_list_existence(current_version)
320
- gem_list.each do |gem|
321
- puts "Push #{gem} to RubyGems? (y/N)"
322
- if gets.chomp! == 'y'
323
- system "gem push #{gem}"
324
- end
325
- end
326
- end
327
- end
328
-
329
- task :default => :list
330
-
331
- task :list do
332
- system 'rake -T'
333
- end