klenod-runtime 0.0.29 → 0.0.30

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: abbebb1c2ddc6e3ac3a9041f496073dcf8d46cc63616be41e7b7eeba92ec74a3
4
- data.tar.gz: 9728a6c0ec91343e1cdfa0cbccb8d9ccd548807054a2455ae5ea3febe82f5f78
3
+ metadata.gz: 00265e43b84cb50bb26c5827f3bb5653f16410e5d792a08afa51bd875140b718
4
+ data.tar.gz: 6feb4d223d955f2bc1d6dc8eae9364012baf32398ca5e780385f878a00801063
5
5
  SHA512:
6
- metadata.gz: 6733f79215872df32f0300290901f345ff3d628805464363db0f9cda2198f7aa70998f492e36045f5bf1099cae286e529cdb464ac8508e8ca84861ba99e2daec
7
- data.tar.gz: 3ce76a4453ec8c7ba8be01a6733969cf03d3bded9d69d3cdf0330600465f67d7f803201a27682348dd639ef1287b2f0c20339d9927c1db6d35aac6e15f450486
6
+ metadata.gz: e854e0bab691cd512ae675665ef6ea8b906a77ad30cc7265ce8c4ddde620650f94add1cfeb01d50359ee7c60d80191f75a9b4b313c1b3b3c5b27d239cb1eceea
7
+ data.tar.gz: c2e862c46a8ca26bededf488e1c2fc80e0b6081c26caa8171dd9fca723ee6253becacc37eaae9042d4a400548e64d110fa7640d13d3f6685b581c6a4c808511f
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "date"
3
4
  require "json"
4
5
 
5
6
  require_relative "asset_url"
@@ -13,7 +14,12 @@ module Klenod
13
14
 
14
15
  module BundleFormat
15
16
  MAGIC = "MODPACK_BUNDLE_V1\n"
16
- FORMAT_VERSION = 3
17
+ FORMAT_VERSION = 4
18
+ NON_FINITE_FLOATS = {
19
+ "Infinity" => Float::INFINITY,
20
+ "-Infinity" => -Float::INFINITY,
21
+ "NaN" => Float::NAN
22
+ }.freeze
17
23
 
18
24
  module_function
19
25
 
@@ -71,7 +77,7 @@ module Klenod
71
77
  raise BundleFormatError, "Malformed Klenod bundle payload" unless payload.is_a?(Hash)
72
78
 
73
79
  version = payload["format_version"]
74
- unless [1, 2, FORMAT_VERSION].include?(version)
80
+ unless [1, 2, 3, FORMAT_VERSION].include?(version)
75
81
  raise BundleFormatError, "Unsupported Klenod bundle format version: #{version.inspect}"
76
82
  end
77
83
 
@@ -212,10 +218,22 @@ module Klenod
212
218
 
213
219
  def encode_value(value)
214
220
  case value
215
- when nil, true, false, String, Integer, Float
221
+ when nil, true, false, String, Integer
216
222
  value
223
+ when Float
224
+ # JSON has no Infinity or NaN, so non-finite floats are tagged.
225
+ value.finite? ? value : {"__klenod_type" => "float", "value" => value.to_s}
217
226
  when Symbol
218
227
  {"__klenod_type" => "symbol", "value" => value.to_s}
228
+ when Time
229
+ {
230
+ "__klenod_type" => "time",
231
+ "seconds" => value.to_i,
232
+ "nanoseconds" => value.nsec,
233
+ "zone" => value.utc? ? "UTC" : value.utc_offset
234
+ }
235
+ when Date
236
+ {"__klenod_type" => "date", "value" => value.iso8601}
219
237
  when Array
220
238
  value.map { |item| encode_value(item) }
221
239
  when Hash
@@ -241,8 +259,14 @@ module Klenod
241
259
  value.map { |item| decode_value(item) }
242
260
  when Hash
243
261
  case value["__klenod_type"]
262
+ when "float"
263
+ NON_FINITE_FLOATS.fetch(value.fetch("value"))
244
264
  when "symbol"
245
265
  value.fetch("value").to_sym
266
+ when "time"
267
+ Time.at(value.fetch("seconds"), value.fetch("nanoseconds"), :nsec, in: value.fetch("zone"))
268
+ when "date"
269
+ Date.iso8601(value.fetch("value"))
246
270
  when "hash"
247
271
  value.fetch("entries").to_h do |key, hash_value|
248
272
  [decode_value(key), decode_value(hash_value)]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Klenod
4
4
  module Runtime
5
- VERSION = "0.0.29"
5
+ VERSION = "0.0.30"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: klenod-runtime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.29
4
+ version: 0.0.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrés Alin