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 +4 -4
- data/lib/klenod/runtime/bundle_format.rb +27 -3
- data/lib/klenod/runtime/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 00265e43b84cb50bb26c5827f3bb5653f16410e5d792a08afa51bd875140b718
|
|
4
|
+
data.tar.gz: 6feb4d223d955f2bc1d6dc8eae9364012baf32398ca5e780385f878a00801063
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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 =
|
|
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
|
|
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)]
|