From fac58cc49025922ca7e394c6e4da2510ec9221cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADt=20Ondruch?= Date: Tue, 5 Feb 2019 10:04:24 +0100 Subject: [PATCH] Fix Range and BigDecimal compatibility with Ruby 2.6. --- ...y-2.6-BigDecimal-compatibility-issue.patch | 28 ++++ ...t-6.0.0.beta1-Ruby-2.6-Range-support.patch | 136 ++++++++++++++++++ rubygem-activesupport.spec | 18 ++- 3 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 rubygem-activesupport-6.0.0.beta1-Fix-Ruby-2.6-BigDecimal-compatibility-issue.patch create mode 100644 rubygem-activesupport-6.0.0.beta1-Ruby-2.6-Range-support.patch diff --git a/rubygem-activesupport-6.0.0.beta1-Fix-Ruby-2.6-BigDecimal-compatibility-issue.patch b/rubygem-activesupport-6.0.0.beta1-Fix-Ruby-2.6-BigDecimal-compatibility-issue.patch new file mode 100644 index 0000000..4217de8 --- /dev/null +++ b/rubygem-activesupport-6.0.0.beta1-Fix-Ruby-2.6-BigDecimal-compatibility-issue.patch @@ -0,0 +1,28 @@ +From ab631b363e0bb4870fe535f3ef0d1751bfd14ae1 Mon Sep 17 00:00:00 2001 +From: utilum +Date: Tue, 4 Dec 2018 13:46:00 +0100 +Subject: [PATCH] Another Ruby 2.6 BigDecimal compatibility issue + +This patch modifies XmlMini::Parsing["decimal"] to handle a string that +contains an invalid number. Since [ruby/ruby@a0e438c#diff-6b866d482baf2bdfd8433893fb1f6d36R144](https://github.com/ruby/ruby/commit/a0e438cd3c28d2eaf4efa18243d5b6edafa14d88#diff-6b866d482baf2bdfd8433893fb1f6d36R144) this case raises an `ArgumentError`. `String.to_f` returns 0.0 if there is not a valid number at the start of the argument, so current behavior is conserved. + +See https://travis-ci.org/rails/rails/jobs/463180341#L6264 + +Related: #34600, #34601 +--- + activesupport/lib/active_support/xml_mini.rb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/activesupport/lib/active_support/xml_mini.rb b/activesupport/lib/active_support/xml_mini.rb +index e42eee07a3ce..be298bf0a1ec 100644 +--- a/activesupport/lib/active_support/xml_mini.rb ++++ b/activesupport/lib/active_support/xml_mini.rb +@@ -71,7 +71,7 @@ def content_type + begin + BigDecimal(number) + rescue ArgumentError +- BigDecimal("0") ++ BigDecimal(number.to_f.to_s) + end + else + BigDecimal(number) diff --git a/rubygem-activesupport-6.0.0.beta1-Ruby-2.6-Range-support.patch b/rubygem-activesupport-6.0.0.beta1-Ruby-2.6-Range-support.patch new file mode 100644 index 0000000..2f022a6 --- /dev/null +++ b/rubygem-activesupport-6.0.0.beta1-Ruby-2.6-Range-support.patch @@ -0,0 +1,136 @@ +From 0fcb921a65e615c301450d7820b03473acd53898 Mon Sep 17 00:00:00 2001 +From: utilum +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" diff --git a/rubygem-activesupport.spec b/rubygem-activesupport.spec index 4e35761..fb42947 100644 --- a/rubygem-activesupport.spec +++ b/rubygem-activesupport.spec @@ -3,7 +3,7 @@ Name: rubygem-%{gem_name} Epoch: 1 Version: 5.2.2 -Release: 2%{?dist} +Release: 3%{?dist} Summary: A support libraries and Ruby core extensions extracted from the Rails framework License: MIT URL: http://rubyonrails.org @@ -16,6 +16,14 @@ Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem # git checkout v5.2.2 && tar czvf activesupport-5.2.2-tests.tgz test/ Source1: %{gem_name}-%{version}-tests.tgz +# Fix Range compatibility with Ruby 2.6. +# https://github.com/rails/rails/pull/32938/commits/0fcb921a65e615c301450d7820b03473acd53898 +Patch0: rubygem-activesupport-6.0.0.beta1-Ruby-2.6-Range-support.patch + +# Fix BigDecimal Ruby 2.6 compatibility. +# https://github.com/rails/rails/pull/34612 +Patch1: rubygem-activesupport-6.0.0.beta1-Fix-Ruby-2.6-BigDecimal-compatibility-issue.patch + # ruby package has just soft dependency on rubygem({bigdecimal,json}), while # ActiveSupport always requires them. Requires: rubygem(bigdecimal) @@ -56,6 +64,11 @@ Documentation for %{name}. %prep %setup -q -n %{gem_name}-%{version} +%patch0 -p2 +%gemspec_add_file 'lib/active_support/core_ext/range/compare_range.rb' + +%patch1 -p2 + %build gem build ../%{gem_name}-%{version}.gemspec @@ -103,6 +116,9 @@ popd %doc %{gem_instdir}/README.rdoc %changelog +* Mon Feb 04 2019 Vít Ondruch - 1:5.2.2-3 +- Fix Range and BigDecimal compatibility with Ruby 2.6. + * Sat Feb 02 2019 Fedora Release Engineering - 1:5.2.2-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild