Skip to content

Commit

Permalink
Merge pull request #48565 from c960657/range-overlap
Browse files Browse the repository at this point in the history
Rename `Range#overlaps?` to `Range#overlap?`
  • Loading branch information
guilleiguaran committed Jun 24, 2023
2 parents 5eccc6a + 11ed5b5 commit 672376c
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 27 deletions.
4 changes: 4 additions & 0 deletions activesupport/CHANGELOG.md
@@ -1,3 +1,7 @@
* Rename `Range#overlaps?` to `#overlap?` and add alias for backwards compatibility

*Christian Schmidt*

* Fix `EncryptedConfiguration` returning incorrect values for some `Hash`
methods

Expand Down
2 changes: 1 addition & 1 deletion activesupport/lib/active_support/core_ext/range.rb
Expand Up @@ -2,5 +2,5 @@

require "active_support/core_ext/range/conversions"
require "active_support/core_ext/range/compare_range"
require "active_support/core_ext/range/overlaps"
require "active_support/core_ext/range/overlap"
require "active_support/core_ext/range/each"
Expand Up @@ -2,9 +2,11 @@

class Range
# Compare two ranges and see if they overlap each other
# (1..5).overlaps?(4..6) # => true
# (1..5).overlaps?(7..9) # => false
def overlaps?(other)
# (1..5).overlap?(4..6) # => true
# (1..5).overlap?(7..9) # => false
def overlap?(other)
other.begin == self.begin || cover?(other.begin) || other.cover?(self.begin)
end

alias :overlaps? :overlap?
end
37 changes: 21 additions & 16 deletions activesupport/test/core_ext/range_ext_test.rb
Expand Up @@ -41,28 +41,33 @@ def test_date_range
assert_instance_of Range, DateTime.new..DateTime::Infinity.new
end

def test_overlaps_last_inclusive
assert((1..5).overlaps?(5..10))
def test_overlap_last_inclusive
assert((1..5).overlap?(5..10))
end

def test_overlaps_last_exclusive
assert_not (1...5).overlaps?(5..10)
def test_overlap_last_exclusive
assert_not (1...5).overlap?(5..10)
end

def test_overlaps_first_inclusive
assert((5..10).overlaps?(1..5))
def test_overlap_first_inclusive
assert((5..10).overlap?(1..5))
end

def test_overlaps_first_exclusive
assert_not (5..10).overlaps?(1...5)
def test_overlap_first_exclusive
assert_not (5..10).overlap?(1...5)
end

def test_overlaps_with_beginless_range
assert((1..5).overlaps?(..10))
def test_overlap_with_beginless_range
assert((1..5).overlap?(..10))
end

def test_overlaps_with_two_beginless_ranges
assert((..5).overlaps?(..10))
def test_overlap_with_two_beginless_ranges
assert((..5).overlap?(..10))
end

def test_overlaps_alias
assert (1..5).overlaps?(5..10)
assert_not (1...5).overlaps?(6..10)
end

def test_should_include_identical_inclusive
Expand Down Expand Up @@ -168,16 +173,16 @@ def test_cover_is_not_override
assert range.method(:include?) != range.method(:cover?)
end

def test_overlaps_on_time
def test_overlap_on_time
time_range_1 = Time.utc(2005, 12, 10, 15, 30)..Time.utc(2005, 12, 10, 17, 30)
time_range_2 = Time.utc(2005, 12, 10, 17, 00)..Time.utc(2005, 12, 10, 18, 00)
assert time_range_1.overlaps?(time_range_2)
assert time_range_1.overlap?(time_range_2)
end

def test_no_overlaps_on_time
def test_no_overlap_on_time
time_range_1 = Time.utc(2005, 12, 10, 15, 30)..Time.utc(2005, 12, 10, 17, 30)
time_range_2 = Time.utc(2005, 12, 10, 17, 31)..Time.utc(2005, 12, 10, 18, 00)
assert_not time_range_1.overlaps?(time_range_2)
assert_not time_range_1.overlap?(time_range_2)
end

def test_each_on_time_with_zone
Expand Down
14 changes: 7 additions & 7 deletions guides/source/active_support_core_extensions.md
Expand Up @@ -3198,19 +3198,19 @@ Active Support extends these methods so that the argument may be another range i

NOTE: Defined in `active_support/core_ext/range/compare_range.rb`.

### `overlaps?`
### `overlap?`

The method [`Range#overlaps?`][Range#overlaps?] says whether any two given ranges have non-void intersection:
The method [`Range#overlap?`][Range#overlap?] says whether any two given ranges have non-void intersection:

```ruby
(1..10).overlaps?(7..11) # => true
(1..10).overlaps?(0..7) # => true
(1..10).overlaps?(11..27) # => false
(1..10).overlap?(7..11) # => true
(1..10).overlap?(0..7) # => true
(1..10).overlap?(11..27) # => false
```

NOTE: Defined in `active_support/core_ext/range/overlaps.rb`.
NOTE: Defined in `active_support/core_ext/range/overlap.rb`.

[Range#overlaps?]: https://api.rubyonrails.org/classes/Range.html#method-i-overlaps-3F
[Range#overlap?]: https://api.rubyonrails.org/classes/Range.html#method-i-overlaps-3F

Extensions to `Date`
--------------------
Expand Down

0 comments on commit 672376c

Please sign in to comment.