json 2.7.5-java → 2.7.6-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1d3fdaebab78d84d87a9879ef6ec0a84d4b7aee6ee05c89e38901af049c889c4
4
- data.tar.gz: 104fe018bcff2685bd814e3c2b4c950ea3754c6c0de6bccb51619856f715a030
3
+ metadata.gz: bc7f91e45f97a190ae906fd62628096c4ca094ce9594fb847e4c85805f7b77a8
4
+ data.tar.gz: b7ef29eec1f9ef2aabecbe36d93efe0011356f030fc5ebc9daf6af0e2b2ab06d
5
5
  SHA512:
6
- metadata.gz: 58818379e7b2d8e01d18ce12ffbb2c4c90a4c50e6e0128b1470e4dfb01247b210d2e4ca141dbcdbbc2209253229648bed23cab5b86db902ff6a1c00544ba6982
7
- data.tar.gz: 82d6865515b4c730a12961884d59feaed0d322da9a41e611f4efbcf053d1bb6d7bc35a5184d1c731bb470d960c982f798aaf7c7bef64de882c29c6f9e6cc867b
6
+ metadata.gz: 1e9788d9a961fc4778bbf0c23fd29fa3f99357652c51e6377479238c9e15ab7bbf628e9f2d4a2255417fdf1ef341c8882c9bc81babdb85458038573bd3f79173
7
+ data.tar.gz: 26e5c02ca4ea4882b0c58b41eb23a53a8ba101625ed0b8bc444f21af50248c1ef185667c47b9c2f50433e335c135792709af8cf601af4e82bc92eb30f18962a6
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changes
2
2
 
3
+ ### 2024-11-04 (2.7.6)
4
+
5
+ * Fix a regression in JSON.generate when dealing with Hash keys that are string subclasses, call `to_json` on them.
6
+
3
7
  ### 2024-10-25 (2.7.5)
4
8
 
5
9
  * Fix a memory leak when `#to_json` methods raise an exception.
@@ -301,19 +301,30 @@ module JSON
301
301
 
302
302
  # Handles @allow_nan, @buffer_initial_length, other ivars must be the default value (see above)
303
303
  private def generate_json(obj, buf)
304
- case obj
305
- when Hash
304
+ klass = obj.class
305
+ if klass == Hash
306
306
  buf << '{'
307
307
  first = true
308
308
  obj.each_pair do |k,v|
309
309
  buf << ',' unless first
310
- fast_serialize_string(k.to_s, buf)
310
+
311
+ key_str = k.to_s
312
+ if key_str.is_a?(::String)
313
+ if key_str.class == ::String
314
+ fast_serialize_string(key_str, buf)
315
+ else
316
+ generate_json(key_str, buf)
317
+ end
318
+ else
319
+ raise TypeError, "#{k.class}#to_s returns an instance of #{key_str.class}, expected a String"
320
+ end
321
+
311
322
  buf << ':'
312
323
  generate_json(v, buf)
313
324
  first = false
314
325
  end
315
326
  buf << '}'
316
- when Array
327
+ elsif klass == Array
317
328
  buf << '['
318
329
  first = true
319
330
  obj.each do |e|
@@ -322,9 +333,9 @@ module JSON
322
333
  first = false
323
334
  end
324
335
  buf << ']'
325
- when String
336
+ elsif klass == String
326
337
  fast_serialize_string(obj, buf)
327
- when Integer
338
+ elsif klass == Integer
328
339
  buf << obj.to_s
329
340
  else
330
341
  # Note: Float is handled this way since Float#to_s is slow anyway
@@ -414,7 +425,15 @@ module JSON
414
425
  each { |key, value|
415
426
  result << delim unless first
416
427
  result << state.indent * depth if indent
417
- result = +"#{result}#{key.to_s.to_json(state)}#{state.space_before}:#{state.space}"
428
+
429
+ key_str = key.to_s
430
+ key_json = if key_str.is_a?(::String)
431
+ key_str = key_str.to_json(state)
432
+ else
433
+ raise TypeError, "#{key.class}#to_s returns an instance of #{key_str.class}, expected a String"
434
+ end
435
+
436
+ result = +"#{result}#{key_json}#{state.space_before}:#{state.space}"
418
437
  if state.strict? && !(false == value || true == value || nil == value || String === value || Array === value || Hash === value || Integer === value || Float === value)
419
438
  raise GeneratorError, "#{value.class} not allowed in JSON"
420
439
  elsif value.respond_to?(:to_json)
data/lib/json/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JSON
4
- VERSION = '2.7.5'
4
+ VERSION = '2.7.6'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.5
4
+ version: 2.7.6
5
5
  platform: java
6
6
  authors:
7
7
  - Daniel Luz
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-30 00:00:00.000000000 Z
11
+ date: 2024-11-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A JSON implementation as a JRuby extension.
14
14
  email: dev+ruby@mernen.com