yaml-search-diff 0.1.0 → 0.5.0

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/ysdiff +10 -1
  3. data/lib/yaml_search_diff.rb +50 -33
  4. metadata +19 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63bb8aee38dd3e2c738cbc209ce8b530a4131ba4b43575d85eaa9fd06abc4201
4
- data.tar.gz: 03dcf2c69fb51c0c98bd2de1422002020a60def94dd3f6c76b7d125b384b6073
3
+ metadata.gz: 5e354e9c4e84ded8557e8c2e81e2b2d593fecc4d2c43bb40860f61fff8d1984c
4
+ data.tar.gz: 991c2647aedd8c768e27b25bdd1c1666acd915a3f18d27f6caa1b4ff28aacd30
5
5
  SHA512:
6
- metadata.gz: 216bfd791c95eb4073009b7a6554b4525aa75bee9e3d617d1d9e10fc2c46a75a0e3f2129cceb12bc8f301d728e9d594230fe3ed370292faaf03edf34f1a35df1
7
- data.tar.gz: 3305c740db25e2036ac5ea369993d0fc52dcf2e59c0421d76d35dbdf57ea70ba95858b58421a7f54384f25ad071f1fc2a8ee84326ea1025b7b471ac41782f4ab
6
+ metadata.gz: 11f7371de2a93afb6a1bbdeb661b34bcac376e38d5ca41eb4b75dbed5a92d0d4ec30c6b73aa223348cdb7836161d4d9af452b255d0dd5e931e5eac4903526582
7
+ data.tar.gz: e8ac694b6e5c0b87c600b04e436583914a6cde2acbd0daf6e7cfd58c55da3128520864efcd73fbba520343d77ebc23fae23bf5ed26413615f3eca66f064ea71f
data/bin/ysdiff CHANGED
@@ -12,4 +12,13 @@ file_2 = ARGV[2]
12
12
  yml_1 = open(file_1) {|f| YAML.load(f)}
13
13
  yml_2 = open(file_2) {|f| YAML.load(f)}
14
14
 
15
- puts YamlSearchDiff.run(key: key, yml_1: yml_1, yml_2: yml_2)
15
+ invalid_files = []
16
+ invalid_files << file_1 unless yml_1.is_a?(Hash)
17
+ invalid_files << file_2 unless yml_2.is_a?(Hash)
18
+
19
+ if invalid_files.empty?
20
+ puts YamlSearchDiff.run(key: key, yml_1: yml_1, yml_2: yml_2)
21
+ else
22
+ STDERR.puts "Couldn't parse following files as Hash: #{invalid_files.join(', ')}"
23
+ exit 1
24
+ end
@@ -2,47 +2,64 @@ require 'yaml'
2
2
  require 'diffy'
3
3
 
4
4
  class YamlSearchDiff
5
- def self.run(key:, yml_1:, yml_2:)
6
- partial_1 = dfs(yml_1, key)
7
- partial_2 = dfs(yml_2, key)
8
-
9
- Diffy::Diff.new(
10
- YAML.dump(nested_sort_hash(partial_1)),
11
- YAML.dump(nested_sort_hash(partial_2))
12
- )
13
- end
5
+ class << self
6
+ def run(key:, yml_1:, yml_2:)
7
+ return "" unless yml_1.is_a?(Hash) && yml_2.is_a?(Hash)
14
8
 
15
- private
9
+ searched_1 = catch(:has_key) { dfs(yml_1, key) }
10
+ searched_2 = catch(:has_key) { dfs(yml_2, key) }
16
11
 
17
- def self.dfs(hash, key)
18
- keys = hash.keys.sort_by(&:to_s)
19
- keys.each do |k|
20
- return hash[k] if k == key
21
- dfs(hash[k], key) if hash[k].is_a?(Hash)
22
- end
23
- nil
12
+ sorted_1 = sort_yml(searched_1)
13
+ sorted_2 = sort_yml(searched_2)
14
+
15
+ Diffy::Diff.new(
16
+ YAML.dump(sorted_1),
17
+ YAML.dump(sorted_2)
18
+ )
24
19
  end
25
20
 
26
- def self.nested_sort_hash(hash)
27
- hash.each do |k, v|
28
- if v.is_a?(Hash)
29
- hash[k] = nested_sort_hash(v)
30
- elsif v.is_a?(Array)
31
- hash[k] = nested_sort_array(v)
21
+ private
22
+
23
+ def dfs(hash, key)
24
+ keys = hash.keys.sort_by(&:to_s)
25
+ keys.each do |k|
26
+ throw :has_key, hash[k] if k == key
27
+ dfs(hash[k], key) if hash[k].is_a?(Hash)
32
28
  end
29
+ {}
33
30
  end
34
- hash.sort.to_h
35
- end
36
31
 
37
- def self.nested_sort_array(array)
38
- array.each_with_index do |v, i|
39
- if v.is_a?(Hash)
40
- array[i] = nested_sort_hash(v)
41
- elsif v.is_a?(Array)
42
- array[i] = nested_sort_array(v)
32
+ def sort_yml(yml)
33
+ if yml.is_a?(Hash)
34
+ nested_sort_hash(yml)
35
+ elsif yml.is_a?(Array)
36
+ nested_sort_array(yml)
37
+ else
38
+ yml
43
39
  end
44
40
  end
45
- array.sort_by(&:to_s)
46
- end
41
+
42
+ def nested_sort_hash(hash)
43
+ hash.each do |k, v|
44
+ if v.is_a?(Hash)
45
+ hash[k] = nested_sort_hash(v)
46
+ elsif v.is_a?(Array)
47
+ hash[k] = nested_sort_array(v)
48
+ end
49
+ end
50
+ hash.sort_by { |k, v| k.to_s }.to_h
51
+ end
52
+
53
+ def nested_sort_array(array)
54
+ array.each_with_index do |v, i|
55
+ if v.is_a?(Hash)
56
+ array[i] = nested_sort_hash(v)
57
+ elsif v.is_a?(Array)
58
+ array[i] = nested_sort_array(v)
59
+ end
60
+ end
61
+ array.sort_by(&:to_s)
62
+ end
63
+ end
47
64
  end
48
65
 
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaml-search-diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Natsuki Inoue
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-02 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-07-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: diffy
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.4'
13
27
  description: A commandline tool to showdiff of a specific key in yaml files.
14
28
  email: summertree128@gmail.com
15
29
  executables:
@@ -22,7 +36,8 @@ files:
22
36
  homepage: https://rubygems.org/gems/yaml-search-diff
23
37
  licenses:
24
38
  - MIT
25
- metadata: {}
39
+ metadata:
40
+ documentation_uri: https://github.com/summertree128/yaml-search-diff
26
41
  post_install_message:
27
42
  rdoc_options: []
28
43
  require_paths: