metanorma-utils 1.3.1 → 1.4.0.1
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/.github/workflows/rake.yml +1 -1
- data/.github/workflows/release.yml +24 -0
- data/lib/metanorma-utils.rb +1 -0
- data/lib/utils/hash_transform_keys.rb +64 -40
- data/lib/utils/main.rb +4 -4
- data/lib/utils/version.rb +1 -1
- data/spec/hash_transform_keys_spec.rb +12 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d3067eb2910d94d8fdea52e4909ca6ff1691d7a1fbe11859c1c7c0163381a43
|
4
|
+
data.tar.gz: 633a4d5dfc20a1fd98832dee94e66ee9f974fe57e9bd0b6252793b57838a558b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0bf2b0ee3f74b32e6dda49771df96f9f7121f32ed9eba76d89e5cba66b55a338da69b25acadd652092b3ad81fd313bc5506db3c8e2e054b9192ab7cfc59f017b
|
7
|
+
data.tar.gz: a1e0079091ba03bd9d173624dd43d764d409c4bf32cc75a052492b079a99a66833056ea8bf6e4f85d75d323835f2f38961de59af865fef0865b0a28492e907a5
|
data/.github/workflows/rake.yml
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
# Auto-generated by Cimas: Do not edit it manually!
|
2
|
+
# See https://github.com/metanorma/cimas
|
3
|
+
name: release
|
4
|
+
|
5
|
+
on:
|
6
|
+
workflow_dispatch:
|
7
|
+
inputs:
|
8
|
+
next_version:
|
9
|
+
description: |
|
10
|
+
Next release version. Possible values: x.y.z, major, minor, patch or pre|rc|etc
|
11
|
+
required: true
|
12
|
+
default: 'skip'
|
13
|
+
push:
|
14
|
+
tags: [ v* ]
|
15
|
+
|
16
|
+
jobs:
|
17
|
+
release:
|
18
|
+
uses: metanorma/ci/.github/workflows/rubygems-release.yml@main
|
19
|
+
with:
|
20
|
+
next_version: ${{ github.event.inputs.next_version }}
|
21
|
+
secrets:
|
22
|
+
rubygems-api-key: ${{ secrets.METANORMA_CI_RUBYGEMS_API_KEY }}
|
23
|
+
pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
|
24
|
+
|
data/lib/metanorma-utils.rb
CHANGED
@@ -1,51 +1,75 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
1
|
+
module Metanorma
|
2
|
+
module Utils
|
3
|
+
module Array
|
4
|
+
def stringify_all_keys
|
5
|
+
map do |v|
|
6
|
+
case v
|
7
|
+
when ::Hash, ::Array
|
8
|
+
v.stringify_all_keys
|
9
|
+
else
|
10
|
+
v
|
11
|
+
end
|
12
|
+
end
|
9
13
|
end
|
10
|
-
end
|
11
|
-
end
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
def symbolize_all_keys
|
16
|
+
map do |v|
|
17
|
+
case v
|
18
|
+
when ::Hash, ::Array
|
19
|
+
v.symbolize_all_keys
|
20
|
+
else
|
21
|
+
v
|
22
|
+
end
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
29
|
+
module Metanorma
|
30
|
+
module Utils
|
31
|
+
module Hash
|
32
|
+
def stringify_all_keys
|
33
|
+
result = {}
|
34
|
+
each do |k, v|
|
35
|
+
result[k.to_s] = case v
|
36
|
+
when ::Hash, ::Array
|
37
|
+
v.stringify_all_keys
|
38
|
+
else
|
39
|
+
v
|
40
|
+
end
|
41
|
+
end
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
def symbolize_all_keys
|
46
|
+
result = {}
|
47
|
+
each do |k, v|
|
48
|
+
result[k.to_sym] = case v
|
49
|
+
when ::Hash, ::Array
|
50
|
+
v.symbolize_all_keys
|
51
|
+
else
|
52
|
+
v
|
53
|
+
end
|
54
|
+
end
|
55
|
+
result
|
56
|
+
end
|
38
57
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
58
|
+
def deep_merge(second)
|
59
|
+
merger = proc { |_, v1, v2|
|
60
|
+
if ::Hash === v1 && ::Hash === v2
|
61
|
+
v1.merge(v2, &merger)
|
62
|
+
elsif ::Array === v1 && ::Array === v2
|
63
|
+
v1 | v2
|
64
|
+
elsif [:undefined, nil,
|
65
|
+
:nil].include?(v2)
|
66
|
+
v1
|
67
|
+
else
|
68
|
+
v2
|
69
|
+
end
|
70
|
+
}
|
71
|
+
merge(second.to_h, &merger)
|
72
|
+
end
|
48
73
|
end
|
49
|
-
result
|
50
74
|
end
|
51
75
|
end
|
data/lib/utils/main.rb
CHANGED
@@ -73,17 +73,17 @@ module Metanorma
|
|
73
73
|
def set_nested_value(hash, keys, new_val)
|
74
74
|
key = keys[0]
|
75
75
|
if keys.length == 1
|
76
|
-
hash[key] = if hash[key].is_a?(Array) then (hash[key] << new_val)
|
76
|
+
hash[key] = if hash[key].is_a?(::Array) then (hash[key] << new_val)
|
77
77
|
else hash[key].nil? ? new_val : [hash[key], new_val]
|
78
78
|
end
|
79
|
-
elsif hash[key].is_a?(Array)
|
79
|
+
elsif hash[key].is_a?(::Array)
|
80
80
|
hash[key][-1] = {} if !hash[key].empty? && hash[key][-1].nil?
|
81
|
-
hash[key] << {} if hash[key].empty? || !hash[key][-1].is_a?(Hash)
|
81
|
+
hash[key] << {} if hash[key].empty? || !hash[key][-1].is_a?(::Hash)
|
82
82
|
set_nested_value(hash[key][-1], keys[1..-1], new_val)
|
83
83
|
elsif hash[key].nil? || hash[key].empty?
|
84
84
|
hash[key] = {}
|
85
85
|
set_nested_value(hash[key], keys[1..-1], new_val)
|
86
|
-
elsif hash[key].is_a?(Hash) && !hash[key][keys[1]]
|
86
|
+
elsif hash[key].is_a?(::Hash) && !hash[key][keys[1]]
|
87
87
|
set_nested_value(hash[key], keys[1..-1], new_val)
|
88
88
|
elsif !hash[key][keys[1]]
|
89
89
|
hash[key] = [hash[key], {}]
|
data/lib/utils/version.rb
CHANGED
@@ -3,6 +3,8 @@ require "utils/hash_transform_keys"
|
|
3
3
|
|
4
4
|
RSpec.describe Metanorma::Utils do
|
5
5
|
it "deep stringify hash but skip values" do
|
6
|
+
Hash.include Metanorma::Utils::Hash
|
7
|
+
Array.include Metanorma::Utils::Array
|
6
8
|
result = {
|
7
9
|
test0: :test0,
|
8
10
|
test1: false,
|
@@ -27,6 +29,8 @@ RSpec.describe Metanorma::Utils do
|
|
27
29
|
end
|
28
30
|
|
29
31
|
it "deep symbolize hash but skip values" do
|
32
|
+
Hash.include Metanorma::Utils::Hash
|
33
|
+
Array.include Metanorma::Utils::Array
|
30
34
|
result = {
|
31
35
|
test0: "test0",
|
32
36
|
test1: false,
|
@@ -49,4 +53,12 @@ RSpec.describe Metanorma::Utils do
|
|
49
53
|
expect(result[:test4][0]).to include(:test41)
|
50
54
|
expect(result[:test4][0][:test41]).to eq("test41")
|
51
55
|
end
|
56
|
+
|
57
|
+
it "deep merges hashes" do
|
58
|
+
Hash.include Metanorma::Utils::Hash
|
59
|
+
hash1 = { a: [1, 2], b: "c", c: 4, e: { f: { g: "1" } } }
|
60
|
+
hash2 = { a: [3], b: "d", d: 5, e: { f: { h: "2" } } }
|
61
|
+
expect(hash1.deep_merge(hash2)).to eq({ a: [1, 2, 3], b: "d", c: 4,
|
62
|
+
d: 5, e: { f: { g: "1", h: "2" } } })
|
63
|
+
end
|
52
64
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metanorma-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-09-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: asciidoctor
|
@@ -300,6 +300,7 @@ extensions: []
|
|
300
300
|
extra_rdoc_files: []
|
301
301
|
files:
|
302
302
|
- ".github/workflows/rake.yml"
|
303
|
+
- ".github/workflows/release.yml"
|
303
304
|
- ".gitignore"
|
304
305
|
- ".hound.yml"
|
305
306
|
- ".rubocop.yml"
|
@@ -327,7 +328,7 @@ homepage: https://github.com/metanorma/metanorma-utils
|
|
327
328
|
licenses:
|
328
329
|
- BSD-2-Clause
|
329
330
|
metadata: {}
|
330
|
-
post_install_message:
|
331
|
+
post_install_message:
|
331
332
|
rdoc_options: []
|
332
333
|
require_paths:
|
333
334
|
- lib
|
@@ -342,8 +343,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
343
|
- !ruby/object:Gem::Version
|
343
344
|
version: '0'
|
344
345
|
requirements: []
|
345
|
-
rubygems_version: 3.
|
346
|
-
signing_key:
|
346
|
+
rubygems_version: 3.1.6
|
347
|
+
signing_key:
|
347
348
|
specification_version: 4
|
348
349
|
summary: metanorma-utils
|
349
350
|
test_files: []
|