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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fd89605d15a5973a46c4fbc9b88c024191e6a809e4255f34db32d57bab198cc3
4
- data.tar.gz: 167f7c09e8b6347c0f5990656775cba5ec5cdc05a2b715690451e3c02f80fb65
3
+ metadata.gz: 5d3067eb2910d94d8fdea52e4909ca6ff1691d7a1fbe11859c1c7c0163381a43
4
+ data.tar.gz: 633a4d5dfc20a1fd98832dee94e66ee9f974fe57e9bd0b6252793b57838a558b
5
5
  SHA512:
6
- metadata.gz: 1baca64c93f1598bd4f6285ac62c912a519a36c9a9ee08dfe883fe5af0cd721983cc3be513d2dd3d8329ff9efbcc940f0f207ed40791e93556a477ac230c6bb0
7
- data.tar.gz: f4a13c5846b93d6fa7262736a5e177e809ddf72340713c890a7bcddad8d2ba2526e71ee5eff0dd3900e10a6c45b0f00cf7944a30ab1343feef34d3679428e795
6
+ metadata.gz: 0bf2b0ee3f74b32e6dda49771df96f9f7121f32ed9eba76d89e5cba66b55a338da69b25acadd652092b3ad81fd313bc5506db3c8e2e054b9192ab7cfc59f017b
7
+ data.tar.gz: a1e0079091ba03bd9d173624dd43d764d409c4bf32cc75a052492b079a99a66833056ea8bf6e4f85d75d323835f2f38961de59af865fef0865b0a28492e907a5
@@ -10,6 +10,6 @@ on:
10
10
 
11
11
  jobs:
12
12
  rake:
13
- uses: metanorma/metanorma-build-scripts/.github/workflows/generic-rake.yml@main
13
+ uses: metanorma/ci/.github/workflows/generic-rake.yml@main
14
14
  secrets:
15
15
  pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
@@ -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
+
@@ -1,4 +1,5 @@
1
1
  require_relative "utils/version"
2
+ require_relative "utils/hash_transform_keys"
2
3
  require_relative "utils/main"
3
4
  require_relative "utils/image"
4
5
  require_relative "utils/log"
@@ -1,51 +1,75 @@
1
- class Array
2
- def stringify_all_keys
3
- map do |v|
4
- case v
5
- when Hash, Array
6
- v.stringify_all_keys
7
- else
8
- v
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
- def symbolize_all_keys
14
- map do |v|
15
- case v
16
- when Hash, Array
17
- v.symbolize_all_keys
18
- else
19
- v
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
- class Hash
26
- def stringify_all_keys
27
- result = {}
28
- each do |k, v|
29
- result[k.to_s] = case v
30
- when Hash, Array
31
- v.stringify_all_keys
32
- else
33
- v
34
- end
35
- end
36
- result
37
- end
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
- def symbolize_all_keys
40
- result = {}
41
- each do |k, v|
42
- result[k.to_sym] = case v
43
- when Hash, Array
44
- v.symbolize_all_keys
45
- else
46
- v
47
- end
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
@@ -1,5 +1,5 @@
1
1
  module Metanorma
2
2
  module Utils
3
- VERSION = "1.3.1".freeze
3
+ VERSION = "1.4.0.1".freeze
4
4
  end
5
5
  end
@@ -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.3.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-08-20 00:00:00.000000000 Z
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.3.16
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: []