From 135bebd9abd9a2761f53054dda8995cd42b2e106 Mon Sep 17 00:00:00 2001 From: Kyle Banker Date: Mon, 9 May 2011 14:17:56 -0400 Subject: [PATCH] RUBY-270 support 's' regex option. Note: Ruby includes dotall 's' semantics on 'm' option. --- ext/cbson/cbson.c | 5 +++++ ext/java/jar/jbson.jar | Bin 14014 -> 14054 bytes ext/java/src/org/jbson/RubyBSONCallback.java | 3 +++ ext/java/src/org/jbson/RubyBSONEncoder.java | 4 +++- lib/bson/bson_ruby.rb | 6 +++++- test/bson/bson_test.rb | 5 +++++ test/db_api_test.rb | 12 ++++++++++++ 7 files changed, 33 insertions(+), 2 deletions(-) diff --git a/ext/cbson/cbson.c b/ext/cbson/cbson.c index e75a56e..17cd4e7 100644 --- a/ext/cbson/cbson.c +++ b/ext/cbson/cbson.c @@ -495,7 +495,9 @@ static int write_element(VALUE key, VALUE value, VALUE extra, int allow_id) { } if (flags & MULTILINE) { char multiline = 'm'; + char dotall = 's'; SAFE_WRITE(buffer, &multiline, 1); + SAFE_WRITE(buffer, &dotall, 1); } if (flags & EXTENDED) { char extended = 'x'; @@ -759,6 +761,9 @@ static VALUE get_value(const char* buffer, int* position, int type) { else if (flag == 'm') { flags |= MULTILINE; } + else if (flag == 's') { + flags |= MULTILINE; + } else if (flag == 'x') { flags |= EXTENDED; } diff --git a/ext/java/jar/jbson.jar b/ext/java/jar/jbson.jar index dc5a7d8adac3d58058b5ec029bd0036eac56943b..61d191609e9115d68a2b64ef033515df6d09cee2 100644 GIT binary patch delta 13470 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 Y-E<_6#~}zE3#&#SC7D)MqxgE;lZa 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 diff --git a/ext/java/src/org/jbson/RubyBSONCallback.java b/ext/java/src/org/jbson/RubyBSONCallback.java index b20ec2c..ed70640 100644 --- a/ext/java/src/org/jbson/RubyBSONCallback.java +++ b/ext/java/src/org/jbson/RubyBSONCallback.java @@ -234,6 +234,9 @@ public class RubyBSONCallback implements BSONCallback { if(flags.contains("m")) { f = f | ReOptions.RE_OPTION_MULTILINE; } + if(flags.contains("s")) { + f = f | ReOptions.RE_OPTION_MULTILINE; + } if(flags.contains("x")) { f = f | ReOptions.RE_OPTION_EXTENDED; } diff --git a/ext/java/src/org/jbson/RubyBSONEncoder.java b/ext/java/src/org/jbson/RubyBSONEncoder.java index 5b63be9..e7f8b79 100644 --- a/ext/java/src/org/jbson/RubyBSONEncoder.java +++ b/ext/java/src/org/jbson/RubyBSONEncoder.java @@ -642,8 +642,10 @@ public class RubyBSONEncoder extends BSONEncoder { if( (regexOptions & ReOptions.RE_OPTION_IGNORECASE) != 0 ) options = options.concat( "i" ); - if( (regexOptions & ReOptions.RE_OPTION_MULTILINE) != 0 ) + if( (regexOptions & ReOptions.RE_OPTION_MULTILINE) != 0 ) { options = options.concat( "m" ); + options = options.concat( "s" ); + } if( (regexOptions & ReOptions.RE_OPTION_EXTENDED) != 0 ) options = options.concat( "x" ); diff --git a/lib/bson/bson_ruby.rb b/lib/bson/bson_ruby.rb index de3440f..de7bff0 100644 --- a/lib/bson/bson_ruby.rb +++ b/lib/bson/bson_ruby.rb @@ -343,6 +343,7 @@ module BSON opts = 0 opts |= Regexp::IGNORECASE if options_str.include?('i') opts |= Regexp::MULTILINE if options_str.include?('m') + opts |= Regexp::MULTILINE if options_str.include?('s') opts |= Regexp::EXTENDED if options_str.include?('x') Regexp.new(str, opts) end @@ -500,7 +501,10 @@ module BSON options = val.options options_str = '' options_str << 'i' if ((options & Regexp::IGNORECASE) != 0) - options_str << 'm' if ((options & Regexp::MULTILINE) != 0) + if ((options & Regexp::MULTILINE) != 0) + options_str << 'm' + options_str << 's' + end options_str << 'x' if ((options & Regexp::EXTENDED) != 0) options_str << val.extra_options_str if val.respond_to?(:extra_options_str) # Must store option chars in alphabetical order diff --git a/test/bson/bson_test.rb b/test/bson/bson_test.rb index 27dff22..fe2d097 100644 --- a/test/bson/bson_test.rb +++ b/test/bson/bson_test.rb @@ -245,6 +245,11 @@ class BSONTest < Test::Unit::TestCase assert_doc_pass(doc) end + def test_regex_multiline + doc = {'doc' => /foobar/m} + assert_doc_pass(doc) + end + def test_boolean doc = {'doc' => true} assert_doc_pass(doc) diff --git a/test/db_api_test.rb b/test/db_api_test.rb index 1bb5b9c..da48803 100644 --- a/test/db_api_test.rb +++ b/test/db_api_test.rb @@ -396,6 +396,18 @@ class DBAPITest < Test::Unit::TestCase end end + def test_regex_multi_line + if @@version >= "1.9.1" +doc = < doc}) + assert @@coll.find_one({:doc => /n.*x/m}) + @@coll.remove + end + end + def test_non_oid_id # Note: can't use Time.new because that will include fractional seconds, # which Mongo does not store.