diff --git a/.travis.yml b/.travis.yml index d99dcc4dc..d9c9b8027 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,6 +9,7 @@ rvm: - 2.1 - 2.2 - 2.3.1 + - 2.4.0-rc1 matrix: include: diff --git a/bin/sprockets b/bin/sprockets index a3fb6510d..97214c687 100755 --- a/bin/sprockets +++ b/bin/sprockets @@ -1,4 +1,5 @@ #!/usr/bin/env ruby +$VERBOSE = nil require 'sprockets' require 'optparse' diff --git a/lib/sprockets/digest_utils.rb b/lib/sprockets/digest_utils.rb index 2551941f6..7dbcd976f 100644 --- a/lib/sprockets/digest_utils.rb +++ b/lib/sprockets/digest_utils.rb @@ -44,12 +44,8 @@ def detect_digest_class(bytes) digest << 'Symbol'.freeze digest << val.to_s }, - Fixnum => ->(val, digest) { - digest << 'Fixnum'.freeze - digest << val.to_s - }, - Bignum => ->(val, digest) { - digest << 'Bignum'.freeze + Integer => ->(val, digest) { + digest << 'Integer'.freeze digest << val.to_s }, Array => ->(val, digest) { @@ -73,6 +69,16 @@ def detect_digest_class(bytes) digest << val.name }, } + if 0.class != Integer # Ruby < 2.4 + ADD_VALUE_TO_DIGEST[Fixnum] = ->(val, digest) { + digest << 'Integer'.freeze + digest << val.to_s + } + ADD_VALUE_TO_DIGEST[Bignum] = ->(val, digest) { + digest << 'Integer'.freeze + digest << val.to_s + } + end ADD_VALUE_TO_DIGEST.default_proc = ->(_, val) { raise TypeError, "couldn't digest #{ val }" } diff --git a/lib/sprockets/processor_utils.rb b/lib/sprockets/processor_utils.rb index 8b5e3660e..422f9d4eb 100644 --- a/lib/sprockets/processor_utils.rb +++ b/lib/sprockets/processor_utils.rb @@ -107,12 +107,10 @@ def processors_cache_keys(processors) VALID_METADATA_VALUE_TYPES = Set.new([ String, Symbol, - Fixnum, - Bignum, TrueClass, FalseClass, NilClass - ]).freeze + ] + (0.class == Integer ? [Integer] : [Bignum, Fixnum])).freeze # Internal: Set of all nested compound metadata types that can nest values. VALID_METADATA_COMPOUND_TYPES = Set.new([ 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_digest_utils.rb b/test/test_digest_utils.rb index 9840af7b5..e8e1764c3 100644 --- a/test/test_digest_utils.rb +++ b/test/test_digest_utils.rb @@ -25,16 +25,16 @@ def test_digest assert_equal "9bda381dac87b1c16b04f996abb623f43f1cdb89ce8be7dda3f67319dc440bc5", hexdigest(nil) assert_equal "92de503a8b413365fc38050c7dd4bacf28b0f705e744dacebcaa89f2032dcd67", hexdigest(true) assert_equal "bdfd64a7c8febcc3b0b8fb05d60c8e2a4cb6b8c081fcba20db1c9778e9beaf89", hexdigest(false) - assert_equal "0d4af38194cb7dc915a75b04926886f6753ffc5b4f54513adfc582fdf3642e8c", hexdigest(42) - assert_equal "abed5dfa575e89eb850242440d64c316071f76de0db48dd8d416f4aa5ece6afd", hexdigest(2 ** 128) + assert_equal "291e87109f89e59ad717aebe4ffc9657c700e74da45db789ecd19d6b797baee2", hexdigest(42) + assert_equal "d1312b90a6258e9bda7d10e5e1ab1468d92786eca72a65b5ab077169e36bcb1e", hexdigest(2 ** 128) assert_equal "2c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae", hexdigest("foo") assert_equal "dea6712e86478d2ee22a35a8c5ac9627e7cbc5ce2407a7da7c645fea2434fe9b", hexdigest(:foo) assert_equal "f0cf39d0be3efbb6f86ac2404100ff7e055c17ded946a06808d66f89ca03a811", hexdigest([]) assert_equal "ed98cc300019b22ca15e7cd5934028a79e7af4c75f7eeea810f43a3a4353a04d", hexdigest(["foo"]) assert_equal "54edcfe382f4abaa9ebe93efa9977b05b786c9058496609797989b7fdf8208d4", hexdigest({"foo" => "bar"}) assert_equal "62427aa539a0b78e90fd710dc0e15f2960771ba44214b5d41d4a93a8b2940a38", hexdigest({"foo" => "baz"}) - assert_equal "905e6cc86eccb1849ae6c1e0bb01b96fedb3e341ad3d60f828e93e9b5e469a4f", hexdigest([[:foo, 1]]) - assert_equal "9500d3562922431a8ccce61bd510d341ca8d61cf6b6e5ae620e7b1598436ed73", hexdigest([{:foo => 1}]) + assert_equal "b6054efd9929004bdd0a1c09eb2d12961325396da749143def3e9a4050aa703e", hexdigest([[:foo, 1]]) + assert_equal "79a19ffe41ecebd5dc35e95363e0b4aa79b139a22bc650384df57eb09842f099", hexdigest([{:foo => 1}]) assert_equal "94ee40cca7c2c6d2a134033d2f5a31c488cad5d3dcc61a3dbb5e2a858635874b", hexdigest("foo".force_encoding('UTF-8').encoding) assert_raises(TypeError) do 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