Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
define Range#match? if Ruby < 2.4
See the rationale in the documentation included in this patch.
We are going to gradually introduce this predicate in the code base.
- Loading branch information
|
|
@@ -1,3 +1,9 @@ |
|
|
* Defines `Regexp.match?` for Ruby versions prior to 2.4. The predicate |
|
|
has the same interface, but it does not have the performance boost. It's |
|
|
purpose is to be able to write 2.4 compatible code. |
|
|
|
|
|
*Xavier Noria* |
|
|
|
|
|
* Allow MessageEncryptor to take advantage of authenticated encryption modes. |
|
|
|
|
|
AEAD modes like `aes-256-gcm` provide both confidentiality and data |
|
@@ -55,7 +61,7 @@ |
|
|
|
|
|
*John Gesimondo* |
|
|
|
|
|
* `travel/travel_to` travel time helpers, now raise on nested calls, |
|
|
* `travel/travel_to` travel time helpers, now raise on nested calls, |
|
|
as this can lead to confusing time stubbing. |
|
|
|
|
|
Instead of: |
|
@@ -69,7 +75,7 @@ |
|
|
|
|
|
preferred way to achieve above is: |
|
|
|
|
|
travel 2.days do |
|
|
travel 2.days do |
|
|
# 2 days from today |
|
|
end |
|
|
|
|
|
|
@@ -2,4 +2,8 @@ class Regexp #:nodoc: |
|
|
def multiline? |
|
|
options & MULTILINE == MULTILINE |
|
|
end |
|
|
|
|
|
def match?(string, pos=0) |
|
|
!! match(string, pos) |
|
|
end unless //.respond_to?(:match?) |
|
|
end |
|
@@ -7,4 +7,28 @@ def test_multiline |
|
|
assert_equal false, //.multiline? |
|
|
assert_equal false, /(?m:)/.multiline? |
|
|
end |
|
|
|
|
|
# Based on https://github.com/ruby/ruby/blob/trunk/test/ruby/test_regexp.rb. |
|
|
def test_match_p |
|
|
/back(...)/ =~ 'backref' |
|
|
# must match here, but not in a separate method, e.g., assert_send, |
|
|
# to check if $~ is affected or not. |
|
|
assert_equal false, //.match?(nil) |
|
|
assert_equal true, //.match?("") |
|
|
assert_equal true, /.../.match?(:abc) |
|
|
assert_raise(TypeError) { /.../.match?(Object.new) } |
|
|
assert_equal true, /b/.match?('abc') |
|
|
assert_equal true, /b/.match?('abc', 1) |
|
|
assert_equal true, /../.match?('abc', 1) |
|
|
assert_equal true, /../.match?('abc', -2) |
|
|
assert_equal false, /../.match?("abc", -4) |
|
|
assert_equal false, /../.match?("abc", 4) |
|
|
assert_equal true, /\z/.match?("") |
|
|
assert_equal true, /\z/.match?("abc") |
|
|
assert_equal true, /R.../.match?("Ruby") |
|
|
assert_equal false, /R.../.match?("Ruby", 1) |
|
|
assert_equal false, /P.../.match?("Ruby") |
|
|
assert_equal 'backref', $& |
|
|
assert_equal 'ref', $1 |
|
|
end |
|
|
end |
|
@@ -2916,6 +2916,24 @@ end |
|
|
|
|
|
NOTE: Defined in `active_support/core_ext/regexp.rb`. |
|
|
|
|
|
### `match?` |
|
|
|
|
|
Rails implements `Regexp#match?` for Ruby versions prior to 2.4: |
|
|
|
|
|
```ruby |
|
|
/oo/.match?('foo') # => true |
|
|
/oo/.match?('bar') # => false |
|
|
/oo/.match?('foo', 1) # => true |
|
|
``` |
|
|
|
|
|
The backport has the same interface and lack of side-effects in the caller like |
|
|
not setting `$1` and friends, but it does not have the speed benefits. Its |
|
|
purpose is to be able to write 2.4 compatible code. Rails itself uses this |
|
|
predicate internally for example. |
|
|
|
|
|
Active Support defines `Regexp#match?` only if not present, so code running |
|
|
under 2.4 or later does run the original one and gets the performance boost. |
|
|
|
|
|
Extensions to `Range` |
|
|
--------------------- |
|
|
|
|
|
we usually don't put the space after the
!