diff --git a/.travis.yml b/.travis.yml index 1ac58d82..2962e9d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ rvm: - 2.4 - 2.5 - 2.6 + - 2.7.0-preview2 - ruby-head - jruby matrix: diff --git a/Rakefile b/Rakefile index ce390952..41f822cd 100644 --- a/Rakefile +++ b/Rakefile @@ -89,7 +89,7 @@ if defined?(Gem) and defined?(Gem::PackageTask) s.require_path = 'lib' s.add_development_dependency 'rake' - s.add_development_dependency 'test-unit', '~> 2.0' + s.add_development_dependency 'test-unit', '~> 3.0' s.extra_rdoc_files << 'README.md' s.rdoc_options << @@ -127,7 +127,7 @@ if defined?(Gem) and defined?(Gem::PackageTask) s.require_path = 'lib' s.add_development_dependency 'rake' - s.add_development_dependency 'test-unit', '~> 2.0' + s.add_development_dependency 'test-unit', '~> 3.0' s.extra_rdoc_files << 'README.md' s.rdoc_options << diff --git a/json-java.gemspec b/json-java.gemspec old mode 100644 new mode 100755 index f3fa0c91..c99ed89d --- a/json-java.gemspec +++ b/json-java.gemspec @@ -19,14 +19,14 @@ spec = Gem::Specification.new do |s| if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then s.add_development_dependency(%q, [">= 0"]) - s.add_development_dependency(%q, ["~> 2.0"]) + s.add_development_dependency(%q, ["~> 3.0"]) else s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.0"]) + s.add_dependency(%q, ["~> 3.0"]) end else s.add_dependency(%q, [">= 0"]) - s.add_dependency(%q, ["~> 2.0"]) + s.add_dependency(%q, ["~> 3.0"]) end end diff --git a/json.gemspec b/json.gemspec index 6e7873fd..4e183b72 100644 Binary files a/json.gemspec and b/json.gemspec differ diff --git a/json_pure.gemspec b/json_pure.gemspec index 1dffb22a..6ee2f4da 100644 --- a/json_pure.gemspec +++ b/json_pure.gemspec @@ -23,16 +23,13 @@ Gem::Specification.new do |s| if s.respond_to? :specification_version then s.specification_version = 4 + end - if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then - s.add_development_dependency(%q.freeze, [">= 0"]) - s.add_development_dependency(%q.freeze, ["~> 2.0"]) - else - s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, ["~> 2.0"]) - end + if s.respond_to? :add_runtime_dependency then + s.add_development_dependency(%q.freeze, [">= 0"]) + s.add_development_dependency(%q.freeze, ["~> 3.0"]) else s.add_dependency(%q.freeze, [">= 0"]) - s.add_dependency(%q.freeze, ["~> 2.0"]) + s.add_dependency(%q.freeze, ["~> 3.0"]) end end diff --git a/lib/json/common.rb b/lib/json/common.rb index 7cc85291..05da9d0f 100644 --- a/lib/json/common.rb +++ b/lib/json/common.rb @@ -153,7 +153,8 @@ class MissingUnicodeSupport < JSONError; end # * *object_class*: Defaults to Hash # * *array_class*: Defaults to Array def parse(source, opts = {}) - Parser.new(source, opts).parse + opts ||= {} + Parser.new(source, **opts).parse end # Parse the JSON document _source_ into a Ruby data structure and return it. @@ -176,7 +177,7 @@ def parse!(source, opts = {}) :max_nesting => false, :allow_nan => true }.merge(opts) - Parser.new(source, opts).parse + Parser.new(source, **opts).parse end # Generate a JSON document from the Ruby data structure _obj_ and return diff --git a/lib/json/pure/generator.rb b/lib/json/pure/generator.rb index ccb6fe42..a1143f8b 100644 --- a/lib/json/pure/generator.rb +++ b/lib/json/pure/generator.rb @@ -250,7 +250,8 @@ def [](name) if respond_to?(name) __send__(name) else - instance_variable_get("@#{name}") + instance_variable_get("@#{name}") if + instance_variables.include?("@#{name}".to_sym) # avoid warning end end diff --git a/lib/json/pure/parser.rb b/lib/json/pure/parser.rb index 3a6343bc..53402964 100644 --- a/lib/json/pure/parser.rb +++ b/lib/json/pure/parser.rb @@ -197,7 +197,15 @@ def parse_string def parse_value case when scan(FLOAT) - @decimal_class && @decimal_class.new(self[1]) || Float(self[1]) + if @decimal_class then + if @decimal_class == BigDecimal then + BigDecimal(self[1]) + else + @decimal_class.new(self[1]) || Float(self[1]) + end + else + Float(self[1]) + end when scan(INTEGER) Integer(self[1]) when scan(TRUE) diff --git a/tests/json_common_interface_test.rb b/tests/json_common_interface_test.rb index de88c6e8..53f335ed 100644 --- a/tests/json_common_interface_test.rb +++ b/tests/json_common_interface_test.rb @@ -27,15 +27,15 @@ def test_index end def test_parser - assert_match /::Parser\z/, JSON.parser.name + assert_match(/::Parser\z/, JSON.parser.name) end def test_generator - assert_match /::Generator\z/, JSON.generator.name + assert_match(/::Generator\z/, JSON.generator.name) end def test_state - assert_match /::Generator::State\z/, JSON.state.name + assert_match(/::Generator::State\z/, JSON.state.name) end def test_create_id diff --git a/tests/json_parser_test.rb b/tests/json_parser_test.rb index 5f454eb1..96e71c50 100644 --- a/tests/json_parser_test.rb +++ b/tests/json_parser_test.rb @@ -92,26 +92,26 @@ def test_parse_numbers assert_raise(JSON::ParserError) { parse('.23') } assert_raise(JSON::ParserError) { parse('023') } assert_equal 23, parse('23') - assert_equal -23, parse('-23') + assert_equal(-23, parse('-23')) assert_equal_float 3.141, parse('3.141') - assert_equal_float -3.141, parse('-3.141') + assert_equal_float(-3.141, parse('-3.141')) assert_equal_float 3.141, parse('3141e-3') assert_equal_float 3.141, parse('3141.1e-3') assert_equal_float 3.141, parse('3141E-3') assert_equal_float 3.141, parse('3141.0E-3') - assert_equal_float -3.141, parse('-3141.0e-3') - assert_equal_float -3.141, parse('-3141e-3') + assert_equal_float(-3.141, parse('-3141.0e-3')) + assert_equal_float(-3.141, parse('-3141e-3')) assert_raise(ParserError) { parse('NaN') } assert parse('NaN', :allow_nan => true).nan? assert_raise(ParserError) { parse('Infinity') } assert_equal 1.0/0, parse('Infinity', :allow_nan => true) assert_raise(ParserError) { parse('-Infinity') } - assert_equal -1.0/0, parse('-Infinity', :allow_nan => true) + assert_equal(-1.0/0, parse('-Infinity', :allow_nan => true)) end def test_parse_bigdecimals assert_equal(BigDecimal, JSON.parse('{"foo": 9.01234567890123456789}', decimal_class: BigDecimal)["foo"].class) - assert_equal(BigDecimal.new("0.901234567890123456789E1"),JSON.parse('{"foo": 9.01234567890123456789}', decimal_class: BigDecimal)["foo"] ) + assert_equal(BigDecimal("0.901234567890123456789E1"), JSON.parse('{"foo": 9.01234567890123456789}', decimal_class: BigDecimal)["foo"] ) end if Array.method_defined?(:permutation)