Compare commits
2 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
098739b2dd | ||
|
|
2bf5bbd22f |
3 changed files with 71 additions and 139 deletions
|
|
@ -1,136 +0,0 @@
|
|||
From 0fcb921a65e615c301450d7820b03473acd53898 Mon Sep 17 00:00:00 2001
|
||||
From: utilum <oz@utilum.com>
|
||||
Date: Sun, 20 May 2018 21:22:03 +0200
|
||||
Subject: [PATCH] Allow Range#=== and Range#cover? on Range
|
||||
|
||||
ruby/ruby@989e07c features switching `Range#===` to use internal `r_cover_p`
|
||||
instead of rubyland `include?`. This breaks expected behavior of
|
||||
`ActiveSupport::CoreExt::Range` documented since at least 8b67a02.
|
||||
|
||||
This patch adds overrides on `Range#cover?` and `Range#===` and places all
|
||||
three in a single module, `CompareWithRange`.
|
||||
|
||||
*Requiring core_ext/range/include_range now causes a deprecation warnning*
|
||||
---
|
||||
.../lib/active_support/core_ext/range.rb | 2 +-
|
||||
.../core_ext/range/compare_range.rb | 61 +++++++++++++++++++
|
||||
.../core_ext/range/include_range.rb | 28 ++-------
|
||||
3 files changed, 68 insertions(+), 23 deletions(-)
|
||||
create mode 100644 activesupport/lib/active_support/core_ext/range/compare_range.rb
|
||||
|
||||
diff --git a/activesupport/lib/active_support/core_ext/range.rb b/activesupport/lib/active_support/core_ext/range.rb
|
||||
index 4074e91d17d7..78814fd18961 100644
|
||||
--- a/activesupport/lib/active_support/core_ext/range.rb
|
||||
+++ b/activesupport/lib/active_support/core_ext/range.rb
|
||||
@@ -1,7 +1,7 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require "active_support/core_ext/range/conversions"
|
||||
-require "active_support/core_ext/range/include_range"
|
||||
+require "active_support/core_ext/range/compare_range"
|
||||
require "active_support/core_ext/range/include_time_with_zone"
|
||||
require "active_support/core_ext/range/overlaps"
|
||||
require "active_support/core_ext/range/each"
|
||||
diff --git a/activesupport/lib/active_support/core_ext/range/compare_range.rb b/activesupport/lib/active_support/core_ext/range/compare_range.rb
|
||||
new file mode 100644
|
||||
index 000000000000..704041f6de88
|
||||
--- /dev/null
|
||||
+++ b/activesupport/lib/active_support/core_ext/range/compare_range.rb
|
||||
@@ -0,0 +1,61 @@
|
||||
+# frozen_string_literal: true
|
||||
+
|
||||
+module ActiveSupport
|
||||
+ module CompareWithRange #:nodoc:
|
||||
+ # Extends the default Range#=== to support range comparisons.
|
||||
+ # (1..5) === (1..5) # => true
|
||||
+ # (1..5) === (2..3) # => true
|
||||
+ # (1..5) === (2..6) # => false
|
||||
+ #
|
||||
+ # The native Range#=== behavior is untouched.
|
||||
+ # ('a'..'f') === ('c') # => true
|
||||
+ # (5..9) === (11) # => false
|
||||
+ def ===(value)
|
||||
+ if value.is_a?(::Range)
|
||||
+ # 1...10 includes 1..9 but it does not include 1..10.
|
||||
+ operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
||||
+ super(value.first) && value.last.send(operator, last)
|
||||
+ else
|
||||
+ super
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
+ # Extends the default Range#include? to support range comparisons.
|
||||
+ # (1..5).include?(1..5) # => true
|
||||
+ # (1..5).include?(2..3) # => true
|
||||
+ # (1..5).include?(2..6) # => false
|
||||
+ #
|
||||
+ # The native Range#include? behavior is untouched.
|
||||
+ # ('a'..'f').include?('c') # => true
|
||||
+ # (5..9).include?(11) # => false
|
||||
+ def include?(value)
|
||||
+ if value.is_a?(::Range)
|
||||
+ # 1...10 includes 1..9 but it does not include 1..10.
|
||||
+ operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
||||
+ super(value.first) && value.last.send(operator, last)
|
||||
+ else
|
||||
+ super
|
||||
+ end
|
||||
+ end
|
||||
+
|
||||
+ # Extends the default Range#cover? to support range comparisons.
|
||||
+ # (1..5).cover?(1..5) # => true
|
||||
+ # (1..5).cover?(2..3) # => true
|
||||
+ # (1..5).cover?(2..6) # => false
|
||||
+ #
|
||||
+ # The native Range#cover? behavior is untouched.
|
||||
+ # ('a'..'f').cover?('c') # => true
|
||||
+ # (5..9).cover?(11) # => false
|
||||
+ def cover?(value)
|
||||
+ if value.is_a?(::Range)
|
||||
+ # 1...10 covers 1..9 but it does not cover 1..10.
|
||||
+ operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
||||
+ super(value.first) && value.last.send(operator, last)
|
||||
+ else
|
||||
+ super
|
||||
+ end
|
||||
+ end
|
||||
+ end
|
||||
+end
|
||||
+
|
||||
+Range.prepend(ActiveSupport::CompareWithRange)
|
||||
diff --git a/activesupport/lib/active_support/core_ext/range/include_range.rb b/activesupport/lib/active_support/core_ext/range/include_range.rb
|
||||
index 7ba1011921ba..2da2c587a31f 100644
|
||||
--- a/activesupport/lib/active_support/core_ext/range/include_range.rb
|
||||
+++ b/activesupport/lib/active_support/core_ext/range/include_range.rb
|
||||
@@ -1,25 +1,9 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
-module ActiveSupport
|
||||
- module IncludeWithRange #:nodoc:
|
||||
- # Extends the default Range#include? to support range comparisons.
|
||||
- # (1..5).include?(1..5) # => true
|
||||
- # (1..5).include?(2..3) # => true
|
||||
- # (1..5).include?(2..6) # => false
|
||||
- #
|
||||
- # The native Range#include? behavior is untouched.
|
||||
- # ('a'..'f').include?('c') # => true
|
||||
- # (5..9).include?(11) # => false
|
||||
- def include?(value)
|
||||
- if value.is_a?(::Range)
|
||||
- # 1...10 includes 1..9 but it does not include 1..10.
|
||||
- operator = exclude_end? && !value.exclude_end? ? :< : :<=
|
||||
- super(value.first) && value.last.send(operator, last)
|
||||
- else
|
||||
- super
|
||||
- end
|
||||
- end
|
||||
- end
|
||||
-end
|
||||
+require "active_support/deprecation"
|
||||
|
||||
-Range.prepend(ActiveSupport::IncludeWithRange)
|
||||
+ActiveSupport::Deprecation.warn "You have required `active_support/core_ext/range/include_range`. " \
|
||||
+"This file will be removed in Rails 6.1. You should require `active_support/core_ext/range/compare_range` " \
|
||||
+ "instead."
|
||||
+
|
||||
+require "active_support/core_ext/range/compare_range"
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
From 4f4f8a705a8e713bceee8cacca52e9bce22e28dc Mon Sep 17 00:00:00 2001
|
||||
From: "yuuji.yaginuma" <yuuji.yaginuma@gmail.com>
|
||||
Date: Wed, 18 Dec 2019 19:00:29 +0900
|
||||
Subject: [PATCH] Make `LoadInterlockAwareMonitor` work in Ruby 2.7
|
||||
|
||||
Currently `LoadInterlockAwareMonitorTest` does not pass with Ruby 2.7 [1].
|
||||
This is due to the refactoring of the `monitor` done in Ruby 2.7 [2].
|
||||
|
||||
With this refactoring, the behavior of the method has changed from the
|
||||
expected behavior in `LoadInterlockAwareMonitor`.
|
||||
|
||||
This patch also overwrites `synchronize` so that
|
||||
`LoadInterlockAwareMonitor` works as expected.
|
||||
|
||||
[1]: https://buildkite.com/rails/rails/builds/65877#eec47af5-7595-47cb-97c0-30c589716176/996-2743
|
||||
[2]: https://bugs.ruby-lang.org/issues/16255
|
||||
---
|
||||
.../load_interlock_aware_monitor.rb | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb b/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb
|
||||
index a8455c00483f..480c34c64017 100644
|
||||
--- a/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb
|
||||
+++ b/activesupport/lib/active_support/concurrency/load_interlock_aware_monitor.rb
|
||||
@@ -7,11 +7,29 @@ module Concurrency
|
||||
# A monitor that will permit dependency loading while blocked waiting for
|
||||
# the lock.
|
||||
class LoadInterlockAwareMonitor < Monitor
|
||||
+ EXCEPTION_NEVER = { Exception => :never }.freeze
|
||||
+ EXCEPTION_IMMEDIATE = { Exception => :immediate }.freeze
|
||||
+ private_constant :EXCEPTION_NEVER, :EXCEPTION_IMMEDIATE
|
||||
+
|
||||
# Enters an exclusive section, but allows dependency loading while blocked
|
||||
def mon_enter
|
||||
mon_try_enter ||
|
||||
ActiveSupport::Dependencies.interlock.permit_concurrent_loads { super }
|
||||
end
|
||||
+
|
||||
+ def synchronize
|
||||
+ Thread.handle_interrupt(EXCEPTION_NEVER) do
|
||||
+ mon_enter
|
||||
+
|
||||
+ begin
|
||||
+ Thread.handle_interrupt(EXCEPTION_IMMEDIATE) do
|
||||
+ yield
|
||||
+ end
|
||||
+ ensure
|
||||
+ mon_exit
|
||||
+ end
|
||||
+ end
|
||||
+ end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -3,7 +3,7 @@
|
|||
Name: rubygem-%{gem_name}
|
||||
Epoch: 1
|
||||
Version: 5.2.3
|
||||
Release: 3%{?dist}
|
||||
Release: 4%{?dist}
|
||||
Summary: A support libraries and Ruby core extensions extracted from the Rails framework
|
||||
License: MIT
|
||||
URL: http://rubyonrails.org
|
||||
|
|
@ -15,6 +15,9 @@ Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem
|
|||
# cd rails/activesupport/
|
||||
# git checkout v5.2.3 && tar czvf activesupport-5.2.3-tests.tgz test/
|
||||
Source1: %{gem_name}-%{version}-tests.tgz
|
||||
# Make `LoadInterlockAwareMonitor` work in Ruby 2.7
|
||||
# https://github.com/rails/rails/pull/38069
|
||||
Patch0: rubygem-activesupport-6.1.0-Make-LoadInterlockAwareMonitor-work-in-Ruby-2.7.patch
|
||||
|
||||
# ruby package has just soft dependency on rubygem({bigdecimal,json}), while
|
||||
# ActiveSupport always requires them.
|
||||
|
|
@ -54,7 +57,9 @@ BuildArch: noarch
|
|||
Documentation for %{name}.
|
||||
|
||||
%prep
|
||||
%setup -q -n %{gem_name}-%{version}
|
||||
%setup -q -n %{gem_name}-%{version} -b 1
|
||||
|
||||
%patch0 -p2
|
||||
|
||||
%build
|
||||
gem build ../%{gem_name}-%{version}.gemspec
|
||||
|
|
@ -69,7 +74,7 @@ cp -a .%{gem_dir}/* \
|
|||
%check
|
||||
pushd .%{gem_instdir}
|
||||
# Move the tests into place
|
||||
tar xzvf %{SOURCE1}
|
||||
cp -a %{_builddir}/test test
|
||||
|
||||
# These tests are really unstable, but they seems to be passing upstream :/
|
||||
for f in \
|
||||
|
|
@ -83,6 +88,11 @@ done
|
|||
# https://github.com/rails/rails/issues/25682
|
||||
sed -i '/def test_iso8601_output_and_reparsing$/,/^ end$/ s/^/#/' test/core_ext/duration_test.rb
|
||||
|
||||
# Workaround TransformValuesTest#test_default_procs_do_not_persist_*_mapping
|
||||
# test failures due to bug in Ruby 2.7.{0,1}.
|
||||
# https://bugs.ruby-lang.org/issues/16498
|
||||
sed -i '/assert_nil mapped\[:b\]/ s/^/#/' test/core_ext/hash/transform_values_test.rb
|
||||
|
||||
memcached &
|
||||
mPID=$!
|
||||
sleep 1
|
||||
|
|
@ -103,6 +113,10 @@ popd
|
|||
%doc %{gem_instdir}/README.rdoc
|
||||
|
||||
%changelog
|
||||
* Thu Apr 16 2020 Vít Ondruch <vondruch@redhat.com> - 1:5.2.3-4
|
||||
- Ruby 2.7 compatibility.
|
||||
Resolves: rhbz#1799093
|
||||
|
||||
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 1:5.2.3-3
|
||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue