bson_ext 1.2.4 → 1.3.0.rc0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -77,41 +77,49 @@ namespace :test do
77
77
  Rake::TestTask.new(:rs) do |t|
78
78
  t.test_files = FileList['test/replica_sets/*_test.rb']
79
79
  t.verbose = true
80
+ t.ruby_opts << '-w'
80
81
  end
81
82
 
82
83
  Rake::TestTask.new(:unit) do |t|
83
84
  t.test_files = FileList['test/unit/*_test.rb']
84
85
  t.verbose = true
86
+ t.ruby_opts << '-w'
85
87
  end
86
88
 
87
89
  Rake::TestTask.new(:functional) do |t|
88
90
  t.test_files = FileList['test/*_test.rb']
89
91
  t.verbose = true
92
+ t.ruby_opts << '-w'
90
93
  end
91
94
 
92
95
  Rake::TestTask.new(:pooled_threading) do |t|
93
96
  t.test_files = FileList['test/threading/*_test.rb']
94
97
  t.verbose = true
98
+ t.ruby_opts << '-w'
95
99
  end
96
100
 
97
101
  Rake::TestTask.new(:auto_reconnect) do |t|
98
102
  t.test_files = FileList['test/auxillary/autoreconnect_test.rb']
99
103
  t.verbose = true
104
+ t.ruby_opts << '-w'
100
105
  end
101
106
 
102
107
  Rake::TestTask.new(:authentication) do |t|
103
108
  t.test_files = FileList['test/auxillary/authentication_test.rb']
104
109
  t.verbose = true
110
+ t.ruby_opts << '-w'
105
111
  end
106
112
 
107
113
  Rake::TestTask.new(:new_features) do |t|
108
114
  t.test_files = FileList['test/auxillary/1.4_features.rb']
109
115
  t.verbose = true
116
+ t.ruby_opts << '-w'
110
117
  end
111
118
 
112
119
  Rake::TestTask.new(:bson) do |t|
113
120
  t.test_files = FileList['test/bson/*_test.rb']
114
121
  t.verbose = true
122
+ t.ruby_opts << '-w'
115
123
  end
116
124
 
117
125
  task :drop_databases do |t|
@@ -138,7 +146,7 @@ task :ydoc do
138
146
  require File.join(File.dirname(__FILE__), 'lib', 'mongo')
139
147
  out = File.join('ydoc', Mongo::VERSION)
140
148
  FileUtils.rm_rf('ydoc')
141
- system "yardoc lib/**/*.rb lib/mongo/**/*.rb lib/bson/**/*.rb -e yard/yard_ext.rb -p yard/templates -o #{out} --title MongoRuby-#{Mongo::VERSION} --files docs/TUTORIAL.md,docs/GridFS.md,docs/FAQ.md,docs/REPLICA_SETS.md,docs/WRITE_CONCERN.md,docs/HISTORY.md,docs/CREDITS.md,docs/1.0_UPGRADE.md"
149
+ system "yardoc lib/**/*.rb lib/mongo/**/*.rb lib/bson/**/*.rb -e yard/yard_ext.rb -p yard/templates -o #{out} --title MongoRuby-#{Mongo::VERSION} --files docs/TUTORIAL.md,docs/GridFS.md,docs/FAQ.md,docs/REPLICA_SETS.md,docs/WRITE_CONCERN.md,docs/HISTORY.md,docs/CREDITS.md,docs/1.0_UPGRADE.md,docs/RELEASES.md"
142
150
  end
143
151
 
144
152
  namespace :bamboo do
data/bson_ext.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  require './lib/bson'
2
2
  VERSION_HEADER = File.open(File.join(File.dirname(__FILE__), 'ext', 'cbson', 'version.h'), "r")
3
- VERSION = VERSION_HEADER.read.scan(/VERSION\s+"(\d+\.\d+(\.[\w\d]+\w*)?)\"/)[0][0]
3
+ VERSION = VERSION_HEADER.read.scan(/VERSION "(\d[^"]+)"/)[0][0]
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'bson_ext'
6
6
 
data/ext/cbson/cbson.c CHANGED
@@ -86,6 +86,7 @@ static VALUE DBRef;
86
86
  static VALUE Code;
87
87
  static VALUE MinKey;
88
88
  static VALUE MaxKey;
89
+ static VALUE Timestamp;
89
90
  static VALUE Regexp;
90
91
  static VALUE OrderedHash;
91
92
  static VALUE InvalidKeyName;
@@ -107,21 +108,12 @@ static int max_bson_size;
107
108
  } \
108
109
  _str; \
109
110
  })
110
- /* MUST call TO_UTF8 before calling write_utf8. */
111
111
  #define TO_UTF8(string) rb_str_export_to_enc((string), rb_utf8_encoding())
112
- static void write_utf8(buffer_t buffer, VALUE string, char check_null) {
113
- result_t status = check_string(RSTRING_PTR(string), RSTRING_LENINT(string),
114
- 0, check_null);
115
- if (status == HAS_NULL) {
116
- buffer_free(buffer);
117
- rb_raise(InvalidDocument, "Key names / regex patterns must not contain the NULL byte");
118
- }
119
- SAFE_WRITE(buffer, RSTRING_PTR(string), RSTRING_LENINT(string));
120
- }
121
112
  #else
122
113
  #define STR_NEW(p,n) rb_str_new((p), (n))
123
- /* MUST call TO_UTF8 before calling write_utf8. */
124
114
  #define TO_UTF8(string) (string)
115
+ #endif
116
+
125
117
  static void write_utf8(buffer_t buffer, VALUE string, char check_null) {
126
118
  result_t status = check_string(RSTRING_PTR(string), RSTRING_LEN(string),
127
119
  1, check_null);
@@ -132,9 +124,9 @@ static void write_utf8(buffer_t buffer, VALUE string, char check_null) {
132
124
  buffer_free(buffer);
133
125
  rb_raise(InvalidStringEncoding, "String not valid UTF-8");
134
126
  }
127
+ string = TO_UTF8(string);
135
128
  SAFE_WRITE(buffer, RSTRING_PTR(string), RSTRING_LEN(string));
136
129
  }
137
- #endif
138
130
 
139
131
  // this sucks. but for some reason these moved around between 1.8 and 1.9
140
132
  #ifdef ONIGURUMA_H
@@ -211,7 +203,6 @@ static VALUE pack_extra(buffer_t buffer, VALUE check_keys) {
211
203
 
212
204
  static void write_name_and_type(buffer_t buffer, VALUE name, char type) {
213
205
  SAFE_WRITE(buffer, &type, 1);
214
- name = TO_UTF8(name);
215
206
  write_utf8(buffer, name, 1);
216
207
  SAFE_WRITE(buffer, &zero, 1);
217
208
  }
@@ -340,7 +331,6 @@ static int write_element(VALUE key, VALUE value, VALUE extra, int allow_id) {
340
331
  {
341
332
  int length;
342
333
  write_name_and_type(buffer, key, 0x02);
343
- value = TO_UTF8(value);
344
334
  length = RSTRING_LENINT(value) + 1;
345
335
  SAFE_WRITE(buffer, (char*)&length, 4);
346
336
  write_utf8(buffer, value, 0);
@@ -444,6 +434,17 @@ static int write_element(VALUE key, VALUE value, VALUE extra, int allow_id) {
444
434
  write_name_and_type(buffer, key, 0xff);
445
435
  break;
446
436
  }
437
+ if (strcmp(cls, "BSON::Timestamp") == 0) {
438
+ write_name_and_type(buffer, key, 0x11);
439
+ int seconds = FIX2INT(
440
+ rb_funcall(value, rb_intern("seconds"), 0));
441
+ int increment = FIX2INT(
442
+ rb_funcall(value, rb_intern("increment"), 0));
443
+
444
+ SAFE_WRITE(buffer, (const char*)&increment, 4);
445
+ SAFE_WRITE(buffer, (const char*)&seconds, 4);
446
+ break;
447
+ }
447
448
  if (strcmp(cls, "DateTime") == 0 || strcmp(cls, "Date") == 0 || strcmp(cls, "ActiveSupport::TimeWithZone") == 0) {
448
449
  buffer_free(buffer);
449
450
  rb_raise(InvalidDocument, "%s is not currently supported; use a UTC Time instance instead.", cls);
@@ -485,7 +486,6 @@ static int write_element(VALUE key, VALUE value, VALUE extra, int allow_id) {
485
486
 
486
487
  write_name_and_type(buffer, key, 0x0B);
487
488
 
488
- pattern = TO_UTF8(pattern);
489
489
  write_utf8(buffer, pattern, 1);
490
490
  SAFE_WRITE(buffer, &zero, 1);
491
491
 
@@ -825,11 +825,13 @@ static VALUE get_value(const char* buffer, int* position, int type) {
825
825
  }
826
826
  case 17:
827
827
  {
828
- int i;
829
- int j;
830
- memcpy(&i, buffer + *position, 4);
831
- memcpy(&j, buffer + *position + 4, 4);
832
- value = rb_ary_new3(2, LL2NUM(i), LL2NUM(j));
828
+ int sec, inc;
829
+ VALUE argv[2];
830
+ memcpy(&inc, buffer + *position, 4);
831
+ memcpy(&sec, buffer + *position + 4, 4);
832
+ argv[0] = INT2FIX(sec);
833
+ argv[1] = INT2FIX(inc);
834
+ value = rb_class_new_instance(2, argv, Timestamp);
833
835
  *position += 8;
834
836
  break;
835
837
  }
@@ -881,7 +883,7 @@ static VALUE method_deserialize(VALUE self, VALUE bson) {
881
883
  return elements_to_hash(buffer, remaining);
882
884
  }
883
885
 
884
- static VALUE objectid_generate(VALUE self)
886
+ static VALUE objectid_generate(int argc, VALUE* args, VALUE self)
885
887
  {
886
888
  VALUE oid;
887
889
  unsigned char oid_bytes[12];
@@ -889,7 +891,11 @@ static VALUE objectid_generate(VALUE self)
889
891
  unsigned short pid;
890
892
  int i;
891
893
 
892
- t = htonl((int)time(NULL));
894
+ if(argc == 0 || (argc == 1 && *args == Qnil)) {
895
+ t = htonl((int)time(NULL));
896
+ } else {
897
+ t = htonl(FIX2INT(rb_funcall(*args, rb_intern("to_i"), 0)));
898
+ }
893
899
  MEMCPY(&oid_bytes, &t, unsigned char, 4);
894
900
 
895
901
  MEMCPY(&oid_bytes[4], hostname_digest, unsigned char, 3);
@@ -948,6 +954,8 @@ void Init_cbson() {
948
954
  rb_require("bson/types/min_max_keys");
949
955
  MinKey = rb_const_get(bson, rb_intern("MinKey"));
950
956
  MaxKey = rb_const_get(bson, rb_intern("MaxKey"));
957
+ rb_require("bson/types/timestamp");
958
+ Timestamp = rb_const_get(bson, rb_intern("Timestamp"));
951
959
  Regexp = rb_const_get(rb_cObject, rb_intern("Regexp"));
952
960
  rb_require("bson/exceptions");
953
961
  InvalidKeyName = rb_const_get(bson, rb_intern("InvalidKeyName"));
@@ -969,7 +977,7 @@ void Init_cbson() {
969
977
  Digest = rb_const_get(rb_cObject, rb_intern("Digest"));
970
978
  DigestMD5 = rb_const_get(Digest, rb_intern("MD5"));
971
979
 
972
- rb_define_method(ObjectId, "generate", objectid_generate, 0);
980
+ rb_define_method(ObjectId, "generate", objectid_generate, -1);
973
981
 
974
982
  if (gethostname(hostname, MAX_HOSTNAME_LENGTH) != 0) {
975
983
  rb_raise(rb_eRuntimeError, "failed to get hostname");
data/ext/cbson/version.h CHANGED
@@ -14,4 +14,4 @@
14
14
  * limitations under the License.
15
15
  */
16
16
 
17
- #define VERSION "1.2.4"
17
+ #define VERSION "1.3.0.rc0"
metadata CHANGED
@@ -1,13 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bson_ext
3
3
  version: !ruby/object:Gem::Version
4
- hash: 23
5
- prerelease: false
6
- segments:
7
- - 1
8
- - 2
9
- - 4
10
- version: 1.2.4
4
+ prerelease: 6
5
+ version: 1.3.0.rc0
11
6
  platform: ruby
12
7
  authors:
13
8
  - Mike Dirolf
@@ -15,7 +10,7 @@ autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
12
 
18
- date: 2011-02-23 00:00:00 -05:00
13
+ date: 2011-03-29 00:00:00 -04:00
19
14
  default_executable:
20
15
  dependencies: []
21
16
 
@@ -37,7 +32,7 @@ files:
37
32
  - ext/cbson/buffer.h
38
33
  - ext/cbson/encoding_helpers.h
39
34
  - ext/cbson/version.h
40
- has_rdoc: false
35
+ has_rdoc: true
41
36
  homepage: http://www.mongodb.org
42
37
  licenses: []
43
38
 
@@ -51,23 +46,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
51
46
  requirements:
52
47
  - - ">="
53
48
  - !ruby/object:Gem::Version
54
- hash: 3
55
- segments:
56
- - 0
57
49
  version: "0"
58
50
  required_rubygems_version: !ruby/object:Gem::Requirement
59
51
  none: false
60
52
  requirements:
61
- - - ">="
53
+ - - ">"
62
54
  - !ruby/object:Gem::Version
63
- hash: 3
64
- segments:
65
- - 0
66
- version: "0"
55
+ version: 1.3.1
67
56
  requirements: []
68
57
 
69
58
  rubyforge_project:
70
- rubygems_version: 1.3.7
59
+ rubygems_version: 1.5.2
71
60
  signing_key:
72
61
  specification_version: 3
73
62
  summary: C extensions for Ruby BSON.