diff --git a/lib/sprockets/utils.rb b/lib/sprockets/utils.rb index 4689b628a..11ff9443e 100644 --- a/lib/sprockets/utils.rb +++ b/lib/sprockets/utils.rb @@ -14,11 +14,15 @@ module Utils # # Returns false if .dup would raise a TypeError, otherwise true. def duplicable?(obj) - case obj - when NilClass, FalseClass, TrueClass, Symbol, Numeric - false - else + if RUBY_VERSION >= "2.4.0" true + else + case obj + when NilClass, FalseClass, TrueClass, Symbol, Numeric + false + else + true + end end end diff --git a/test/test_utils.rb b/test/test_utils.rb index eb49d42a6..04a723361 100644 --- a/test/test_utils.rb +++ b/test/test_utils.rb @@ -4,7 +4,24 @@ class TestUtils < MiniTest::Test include Sprockets::Utils - def test_duplicable + def test_duplicable_pre_ruby_2_4 + skip if RUBY_VERSION >= "2.4" + + objs = [nil, true, false, 1, "foo", :foo, [], {}] + objs.each do |obj| + begin + obj.dup + rescue TypeError + refute duplicable?(obj), "can't dup: #{obj.inspect}" + else + assert duplicable?(obj), "can dup: #{obj.inspect}" + end + end + end + + def test_duplicable_post_ruby_2_4 + skip if RUBY_VERSION < "2.4" + objs = [nil, true, false, 1, "foo", :foo, [], {}] objs.each do |obj| begin