dorian-yaml-compare 0.3.1 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d04aae43888d5b7e10630c507246ed9e5808ed6445f38272ecb8ecc2e163e237
4
- data.tar.gz: 626a3f19c97012e67af790fc6c48c33e1d1c2b8b3438ddd4f9d4e9e738010471
3
+ metadata.gz: 0a61a09c5ae8574d6ff57f6355e6d05618a2018c061874d860902ea419707cb4
4
+ data.tar.gz: a0cd44f5ef8521d815319e6ffc27689e82403c1b81627002f90f57b04a5fa466
5
5
  SHA512:
6
- metadata.gz: e40c1edf694258fffb0359adc010c101382e0b3b149e738a961baaa0cd73ab5e41299042f7b62d53ddf01755dbf6d997625e4ca3da0d71383efed01003bca05e
7
- data.tar.gz: 79aa89ad7b386cd5d78eb0f8fc2b82296e659a426586e5dc88010809a67e7fec8687dc71588a99437fe7a3dc77547b086a58adc7e172ff047219e6b6c88fa2be
6
+ metadata.gz: 257acd3703e8b1428b7e284801cfdcf5c9dde36796586bf82cc849f001a254fae985686b7e13051ee0afcc6fa6e2361e1820501a5d910e879fbdb183ecbe224e
7
+ data.tar.gz: c670e51c2c16c85321f5c4a546a1a69724d90990a67a1512ac8808bdecfae406f59b591973509c2cfca1cf5334c98f2c8de3e22e7fbe312b3e2d102be764a921
data/bin/yaml-compare CHANGED
@@ -1,5 +1,52 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- require "dorian/yaml/compare"
5
- Dorian::Yaml::Compare.run
4
+ require "yaml"
5
+
6
+ def compare(hash1, hash2, current: "")
7
+ if hash1.is_a?(Array)
8
+ hash1.each.with_index { |_, i| compare(hash1[i], hash2[i], current:) }
9
+ elsif hash1.is_a?(String) || hash2.is_a?(String)
10
+ if !hash1.is_a?(String)
11
+ puts "key \"#{current}\" is a string in #{ARGV[1]}"
12
+ elsif !hash2.is_a?(String)
13
+ puts "key \"#{current}\" is a string in #{ARGV[0]}"
14
+ end
15
+ else
16
+ (hash1.keys + hash2.keys).uniq.each do |key|
17
+ full_key = [current, key].reject(&:empty?).join(".")
18
+ if !hash1.key?(key)
19
+ puts "missing key \"#{full_key}\" from #{ARGV[0]}"
20
+ elsif !hash2.key?(key)
21
+ puts "missing key \"#{full_key}\" from #{ARGV[1]}"
22
+ else
23
+ compare(hash1[key], hash2[key], current: full_key)
24
+ end
25
+ end
26
+ end
27
+ end
28
+
29
+ def with_captured_stdout(&block)
30
+ original_stdout = $stdout
31
+ $stdout = StringIO.new
32
+ block.call
33
+ $stdout.string
34
+ ensure
35
+ $stdout = original_stdout
36
+ end
37
+
38
+ if ARGV.size < 2 || ARGV.size > 4
39
+ puts "USAGE: yaml-compare FILE1 FILE2 [ROOT1] [ROOT2]"
40
+ exit
41
+ end
42
+
43
+ file1 = YAML.safe_load_file(ARGV[0])
44
+ file2 = YAML.safe_load_file(ARGV[1])
45
+ root1 = ARGV[2]
46
+ root2 = ARGV[3]
47
+ file1 = file1[root1] unless root1.nil?
48
+ file2 = file2[root2] unless root2.nil?
49
+
50
+ output = with_captured_stdout { compare(file1, file2) }
51
+
52
+ abort output unless output.empty?
metadata CHANGED
@@ -1,27 +1,26 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dorian-yaml-compare
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dorian Marié
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-02-08 00:00:00.000000000 Z
11
+ date: 2024-03-09 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |-
14
14
  Compares keys of two YAML files, typically locales files in a Ruby on Rails application
15
15
 
16
16
  e.g. `yaml-compare config/locales/en.yml config/locales/fr.yml en fr`
17
- email: dorian@dorianmarie.fr
17
+ email: dorian@dorianmarie.com
18
18
  executables:
19
19
  - yaml-compare
20
20
  extensions: []
21
21
  extra_rdoc_files: []
22
22
  files:
23
23
  - bin/yaml-compare
24
- - lib/dorian/yaml/compare.rb
25
24
  homepage: https://github.com/dorianmariecom/yaml-compare
26
25
  licenses:
27
26
  - MIT
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "yaml"
4
-
5
- module Dorian
6
- module Yaml
7
- class Compare
8
- def self.run
9
- if ARGV.size < 2 || ARGV.size > 4
10
- puts "USAGE: yaml-compare FILE1 FILE2 [ROOT1] [ROOT2]"
11
- exit
12
- end
13
-
14
- file1 = YAML.safe_load_file(ARGV[0])
15
- file2 = YAML.safe_load_file(ARGV[1])
16
- root1 = ARGV[2]
17
- root2 = ARGV[3]
18
- file1 = file1[root1] unless root1.nil?
19
- file2 = file2[root2] unless root2.nil?
20
-
21
- output = with_captured_stdout { compare(file1, file2) }
22
-
23
- abort output unless output.empty?
24
- end
25
-
26
- def self.compare(hash1, hash2, current: "")
27
- if hash1.is_a?(Array)
28
- hash1.each.with_index { |_, i| compare(hash1[i], hash2[i], current:) }
29
- elsif hash1.is_a?(String) || hash2.is_a?(String)
30
- if !hash1.is_a?(String)
31
- puts "key \"#{current}\" is a string in #{ARGV[1]}"
32
- elsif !hash2.is_a?(String)
33
- puts "key \"#{current}\" is a string in #{ARGV[0]}"
34
- end
35
- else
36
- (hash1.keys + hash2.keys).uniq.each do |key|
37
- full_key = [current, key].reject(&:empty?).join(".")
38
- if !hash1.key?(key)
39
- puts "missing key \"#{full_key}\" from #{ARGV[0]}"
40
- elsif !hash2.key?(key)
41
- puts "missing key \"#{full_key}\" from #{ARGV[1]}"
42
- else
43
- compare(hash1[key], hash2[key], current: full_key)
44
- end
45
- end
46
- end
47
- end
48
-
49
- def self.with_captured_stdout(&block)
50
- original_stdout = $stdout
51
- $stdout = StringIO.new
52
- block.call
53
- $stdout.string
54
- ensure
55
- $stdout = original_stdout
56
- end
57
- end
58
- end
59
- end