hash_diff 0.7.0 → 1.1.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.
- checksums.yaml +5 -5
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/codeql.yml +59 -0
- data/.github/workflows/ruby.yml +25 -0
- data/.gitignore +1 -0
- data/.ruby-version +1 -0
- data/LICENSE.txt +1 -1
- data/README.md +18 -12
- data/Rakefile +7 -0
- data/hash_diff.gemspec +3 -3
- data/lib/hash_diff/comparison.rb +49 -39
- data/lib/hash_diff/version.rb +1 -1
- data/lib/hash_diff.rb +19 -17
- data/spec/hash_diff/array_comparison_spec.rb +78 -0
- data/spec/hash_diff/comparison_spec.rb +36 -9
- data/spec/spec_helper.rb +1 -2
- metadata +18 -13
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8ef02ebe0aac07af77b8e597a40b218c4b2f20c53f3f895fc131d07961a38011
|
4
|
+
data.tar.gz: 7b03cd799b1f0a5eded66d91d5ed0f9b882ef38e26fec1c004568d71e5e68d0b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0e29131dc0ebf4b1e61997526c45ec123ac1ad3fa1f6182bd147e45586d4caa251ae113ebd7273efb5a107207ae6733688be1d3eb43712d1d79547754ceec13c
|
7
|
+
data.tar.gz: d37b0e72862bdb28550c8b481bdf03e377b7e2e20473b4111f444bc3c19f3402d1cd4eba0b92b1c22083ad1b211760f84c204c40247a08b37be6f50a928b6e64
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
2
|
+
version: 2
|
3
|
+
updates:
|
4
|
+
- package-ecosystem: "bundler"
|
5
|
+
directory: "/" # Location of package manifests
|
6
|
+
schedule:
|
7
|
+
interval: "monthly"
|
8
|
+
|
9
|
+
- package-ecosystem: "github-actions"
|
10
|
+
directory: "/"
|
11
|
+
schedule:
|
12
|
+
interval: "monthly"
|
@@ -0,0 +1,59 @@
|
|
1
|
+
name: "CodeQL"
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
# The branches below must be a subset of the branches above
|
8
|
+
branches: [ master ]
|
9
|
+
schedule:
|
10
|
+
- cron: '39 15 * * 4'
|
11
|
+
|
12
|
+
jobs:
|
13
|
+
analyze:
|
14
|
+
name: Analyze
|
15
|
+
runs-on: ubuntu-latest
|
16
|
+
permissions:
|
17
|
+
actions: read
|
18
|
+
contents: read
|
19
|
+
security-events: write
|
20
|
+
|
21
|
+
strategy:
|
22
|
+
fail-fast: false
|
23
|
+
matrix:
|
24
|
+
language: [ 'ruby' ]
|
25
|
+
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
26
|
+
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
27
|
+
|
28
|
+
steps:
|
29
|
+
- name: Checkout repository
|
30
|
+
uses: actions/checkout@v3
|
31
|
+
|
32
|
+
# Initializes the CodeQL tools for scanning.
|
33
|
+
- name: Initialize CodeQL
|
34
|
+
uses: github/codeql-action/init@v2
|
35
|
+
with:
|
36
|
+
languages: ${{ matrix.language }}
|
37
|
+
# If you wish to specify custom queries, you can do so here or in a config file.
|
38
|
+
# By default, queries listed here will override any specified in a config file.
|
39
|
+
# Prefix the list here with "+" to use these queries and those in the config file.
|
40
|
+
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
41
|
+
|
42
|
+
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
43
|
+
# If this step fails, then you should remove it and run the build manually (see below)
|
44
|
+
- name: Autobuild
|
45
|
+
uses: github/codeql-action/autobuild@v2
|
46
|
+
|
47
|
+
# ℹ️ Command-line programs to run using the OS shell.
|
48
|
+
# 📚 https://git.io/JvXDl
|
49
|
+
|
50
|
+
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
51
|
+
# and modify them (or add more) to build your code if your project
|
52
|
+
# uses a compiled language
|
53
|
+
|
54
|
+
#- run: |
|
55
|
+
# make bootstrap
|
56
|
+
# make release
|
57
|
+
|
58
|
+
- name: Perform CodeQL Analysis
|
59
|
+
uses: github/codeql-action/analyze@v2
|
@@ -0,0 +1,25 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ master ]
|
6
|
+
pull_request:
|
7
|
+
branches: [ master ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
|
12
|
+
runs-on: ubuntu-latest
|
13
|
+
strategy:
|
14
|
+
matrix:
|
15
|
+
ruby-version: ['1.9', '2.0', '2.1', '2.2', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1']
|
16
|
+
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v3
|
19
|
+
- name: Set up Ruby
|
20
|
+
uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: ${{ matrix.ruby-version }}
|
23
|
+
bundler-cache: true
|
24
|
+
- name: Run tests
|
25
|
+
run: bundle exec rake
|
data/.gitignore
CHANGED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.7.3
|
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# HashDiff
|
2
|
-
|
2
|
+
|
3
|
+
[](https://github.com/CodingZeal/hash_diff/actions/workflows/ruby.yml) [](https://codeclimate.com/github/CodingZeal/hash_diff) [](http://badge.fury.io/rb/hash_diff)
|
3
4
|
|
4
5
|
Deep comparison of Ruby Hash objects
|
5
6
|
|
@@ -31,7 +32,8 @@ Easily find the differences between two Ruby hashes.
|
|
31
32
|
one: 'foo1'
|
32
33
|
}
|
33
34
|
},
|
34
|
-
num: 1
|
35
|
+
num: 1,
|
36
|
+
favorite_restaurant: "Shoney's"
|
35
37
|
}
|
36
38
|
|
37
39
|
right = {
|
@@ -43,7 +45,8 @@ Easily find the differences between two Ruby hashes.
|
|
43
45
|
two: 'foo2'
|
44
46
|
}
|
45
47
|
},
|
46
|
-
word: 'monkey'
|
48
|
+
word: 'monkey',
|
49
|
+
favorite_restaurant: nil
|
47
50
|
}
|
48
51
|
|
49
52
|
hash_diff = HashDiff::Comparison.new( left, right )
|
@@ -52,19 +55,25 @@ Easily find the differences between two Ruby hashes.
|
|
52
55
|
Comparison#diff returns the left and right side differences
|
53
56
|
|
54
57
|
```ruby
|
55
|
-
hash_diff.diff # => { foo: ["bar", "bar2"], bar: ["foo", "foo2"], nested: { foo: ["bar", "bar2"], bar: { one: ["foo1",
|
58
|
+
hash_diff.diff # => { foo: ["bar", "bar2"], bar: ["foo", "foo2"], nested: { foo: ["bar", "bar2"], bar: { one: ["foo1", HashDiff::NO_VALUE], two: [HashDiff::NO_VALUE, "foo2"] } }, num: [1, HashDiff::NO_VALUE], word: [HashDiff::NO_VALUE, "monkey"], favorite_restaurant: ["Shoney's", nil] }
|
56
59
|
```
|
57
60
|
|
61
|
+
You can also compare two arrays. The comparison is sensitive to the order of the elements in the array.
|
62
|
+
|
63
|
+
#### Missing keys
|
64
|
+
|
65
|
+
When there is a key that exists on one side it will return `HashDiff::NO_VALUE` to represent a missing key.
|
66
|
+
|
58
67
|
Comparison#left_diff returns only the left side differences
|
59
68
|
|
60
69
|
```ruby
|
61
|
-
hash_diff.left_diff # => {
|
70
|
+
hash_diff.left_diff # => {:foo=>"bar2", :bar=>"foo2", :nested=>{:foo=>"bar2", :bar=>{:one=>HashDiff::NO_VALUE, :two=>"foo2"}}, :num=>HashDiff::NO_VALUE, :favorite_restaurant=>nil, :word=>"monkey"}
|
62
71
|
```
|
63
72
|
|
64
73
|
Comparison#right_diff returns only the right side differences
|
65
74
|
|
66
75
|
```ruby
|
67
|
-
hash_diff.right_diff # => {
|
76
|
+
hash_diff.right_diff # => {:foo=>"bar", :bar=>"foo", :nested=>{:foo=>"bar", :bar=>{:one=>"foo1", :two=>HashDiff::NO_VALUE}}, :num=>1, :favorite_restaurant=>"Shoney's", :word=>HashDiff::NO_VALUE}
|
68
77
|
```
|
69
78
|
|
70
79
|
You can also use these shorthand methods
|
@@ -87,14 +96,11 @@ Hash#diff is not provided by default, and monkey patching is frowned upon by som
|
|
87
96
|
left.diff(right) # => { foo: 'baz' }
|
88
97
|
```
|
89
98
|
|
90
|
-
##
|
91
|
-
|
92
|
-
Authored by Adam Cuppy (@acuppy) of Coding ZEAL (http://codingzeal.com)
|
99
|
+
## License
|
93
100
|
|
94
|
-
|
101
|
+
Authored by the Engineering Team of [Coding ZEAL](https://codingzeal.com?utm_source=github)
|
95
102
|
|
96
|
-
|
97
|
-
enjoy :)
|
103
|
+
Copyright (c) 2017 Zeal, LLC. Licensed under the [MIT license](https://opensource.org/licenses/MIT).
|
98
104
|
|
99
105
|
## Contributing
|
100
106
|
|
data/Rakefile
CHANGED
data/hash_diff.gemspec
CHANGED
@@ -6,8 +6,8 @@ require 'hash_diff/version'
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "hash_diff"
|
8
8
|
spec.version = HashDiff::VERSION
|
9
|
-
spec.authors = ["Coding Zeal", "Adam Cuppy"]
|
10
|
-
spec.email = ["info@codingzeal.com"]
|
9
|
+
spec.authors = ["Coding Zeal", "Adam Cuppy", "Mike Bianco"]
|
10
|
+
spec.email = ["info@codingzeal.com", "mike@mikebian.co"]
|
11
11
|
spec.description = %q{Diff tool for deep Ruby hash comparison}
|
12
12
|
spec.summary = %q{Deep Ruby Hash comparison}
|
13
13
|
spec.homepage = "https://github.com/CodingZeal/hash_diff"
|
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "bundler"
|
21
|
+
spec.add_development_dependency "bundler"
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec", "~> 3.1"
|
24
24
|
end
|
data/lib/hash_diff/comparison.rb
CHANGED
@@ -1,74 +1,84 @@
|
|
1
1
|
module HashDiff
|
2
|
-
class Comparison
|
3
|
-
|
2
|
+
class Comparison
|
3
|
+
def initialize(left, right)
|
4
|
+
@left = left
|
5
|
+
@right = right
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_reader :left, :right
|
9
|
+
|
4
10
|
def diff
|
5
|
-
@diff ||=
|
11
|
+
@diff ||= find_differences { |l, r| [l, r] }
|
6
12
|
end
|
7
13
|
|
8
14
|
def left_diff
|
9
|
-
@
|
10
|
-
@left_diff ||= differences(left, right)
|
15
|
+
@left_diff ||= find_differences { |_, r| r }
|
11
16
|
end
|
12
17
|
|
13
18
|
def right_diff
|
14
|
-
@
|
15
|
-
@right_diff ||= differences(left, right)
|
19
|
+
@right_diff ||= find_differences { |l, _| l }
|
16
20
|
end
|
17
21
|
|
18
|
-
|
22
|
+
protected
|
19
23
|
|
20
|
-
def
|
21
|
-
|
24
|
+
def find_differences(&reporter)
|
25
|
+
combined_keys.each_with_object({ }, &comparison_strategy(reporter))
|
22
26
|
end
|
23
27
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
+
private
|
29
|
+
|
30
|
+
def comparison_strategy(reporter)
|
31
|
+
lambda do |key, diff|
|
32
|
+
diff[key] = report_difference(key, reporter) unless equal?(key)
|
28
33
|
end
|
29
34
|
end
|
30
35
|
|
31
|
-
def
|
32
|
-
|
36
|
+
def combined_keys
|
37
|
+
if hash?(left) && hash?(right) then
|
38
|
+
(left.keys + right.keys).uniq.sort
|
39
|
+
elsif array?(left) && array?(right) then
|
40
|
+
(0..[left.size, right.size].max).to_a
|
41
|
+
else
|
42
|
+
raise ArgumentError, "Don't know how to extract keys. Neither arrays nor hashes given"
|
43
|
+
end
|
33
44
|
end
|
34
45
|
|
35
|
-
def
|
36
|
-
|
37
|
-
diff[key] = report(key) if not equal?(key)
|
38
|
-
diff
|
39
|
-
end
|
46
|
+
def equal?(key)
|
47
|
+
value_with_default(left, key) == value_with_default(right, key)
|
40
48
|
end
|
41
49
|
|
42
|
-
def
|
43
|
-
(
|
50
|
+
def hash?(value)
|
51
|
+
value.is_a?(Hash)
|
44
52
|
end
|
45
53
|
|
46
|
-
def
|
47
|
-
|
54
|
+
def array?(value)
|
55
|
+
value.is_a?(Array)
|
48
56
|
end
|
49
57
|
|
50
|
-
def
|
51
|
-
|
58
|
+
def comparable_hash?(key)
|
59
|
+
hash?(left[key]) && hash?(right[key])
|
52
60
|
end
|
53
61
|
|
54
|
-
def
|
55
|
-
|
62
|
+
def comparable_array?(key)
|
63
|
+
array?(left[key]) && array?(right[key])
|
56
64
|
end
|
57
65
|
|
58
|
-
def
|
59
|
-
if
|
60
|
-
|
66
|
+
def report_difference(key, reporter)
|
67
|
+
if comparable_hash?(key)
|
68
|
+
self.class.new(left[key], right[key]).find_differences(&reporter)
|
69
|
+
elsif comparable_array?(key)
|
70
|
+
self.class.new(left[key], right[key]).find_differences(&reporter)
|
61
71
|
else
|
62
|
-
|
72
|
+
reporter.call(
|
73
|
+
value_with_default(left, key),
|
74
|
+
value_with_default(right, key)
|
75
|
+
)
|
63
76
|
end
|
64
77
|
end
|
65
78
|
|
66
|
-
def
|
67
|
-
|
68
|
-
when :left then right[key]
|
69
|
-
when :right then left[key]
|
70
|
-
when :both then [left[key], right[key]]
|
71
|
-
end
|
79
|
+
def value_with_default(obj, key)
|
80
|
+
obj.fetch(key, NO_VALUE)
|
72
81
|
end
|
73
82
|
end
|
74
83
|
end
|
84
|
+
|
data/lib/hash_diff/version.rb
CHANGED
data/lib/hash_diff.rb
CHANGED
@@ -2,25 +2,27 @@ require "hash_diff/version"
|
|
2
2
|
require "hash_diff/comparison"
|
3
3
|
|
4
4
|
module HashDiff
|
5
|
-
class
|
6
|
-
def diff(*args)
|
7
|
-
Comparison.new(*args).diff
|
8
|
-
end
|
5
|
+
class NO_VALUE; end
|
9
6
|
|
10
|
-
|
11
|
-
|
12
|
-
|
7
|
+
def self.patch!
|
8
|
+
Hash.class_eval do
|
9
|
+
def diff(right)
|
10
|
+
HashDiff.left_diff(self, right)
|
11
|
+
end
|
12
|
+
end unless Hash.new.respond_to?(:diff)
|
13
|
+
end
|
14
|
+
|
15
|
+
module_function
|
13
16
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
+
def diff(*args)
|
18
|
+
Comparison.new(*args).diff
|
19
|
+
end
|
20
|
+
|
21
|
+
def left_diff(*args)
|
22
|
+
Comparison.new(*args).left_diff
|
23
|
+
end
|
17
24
|
|
18
|
-
|
19
|
-
|
20
|
-
def diff right
|
21
|
-
HashDiff.left_diff self, right
|
22
|
-
end
|
23
|
-
end unless self.class.respond_to? :diff
|
24
|
-
end
|
25
|
+
def right_diff(*args)
|
26
|
+
Comparison.new(*args).right_diff
|
25
27
|
end
|
26
28
|
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe HashDiff::Comparison do
|
4
|
+
let(:left) {
|
5
|
+
[
|
6
|
+
{
|
7
|
+
foo: 'bar',
|
8
|
+
bar: 'foo',
|
9
|
+
},
|
10
|
+
{
|
11
|
+
nested: {
|
12
|
+
foo: 'bar',
|
13
|
+
bar: {
|
14
|
+
one: 'foo1'
|
15
|
+
}
|
16
|
+
},
|
17
|
+
},
|
18
|
+
{
|
19
|
+
num: 1,
|
20
|
+
word: nil
|
21
|
+
}
|
22
|
+
]
|
23
|
+
}
|
24
|
+
|
25
|
+
def comparison(to_compare)
|
26
|
+
HashDiff::Comparison.new(left, to_compare)
|
27
|
+
end
|
28
|
+
|
29
|
+
def right
|
30
|
+
[
|
31
|
+
{
|
32
|
+
foo: 'bar',
|
33
|
+
bar: 'foo',
|
34
|
+
},
|
35
|
+
{
|
36
|
+
nested: {
|
37
|
+
foo: 'bar',
|
38
|
+
bar: {
|
39
|
+
one: 'foo1'
|
40
|
+
}
|
41
|
+
},
|
42
|
+
},
|
43
|
+
{
|
44
|
+
num: 1,
|
45
|
+
word: nil
|
46
|
+
}
|
47
|
+
]
|
48
|
+
end
|
49
|
+
|
50
|
+
describe 'when arrays are the same' do
|
51
|
+
it 'properly determines equality' do
|
52
|
+
expect(comparison(right).diff).to be_empty
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'handles empty arrays' do
|
56
|
+
expect(HashDiff::Comparison.new([], []).diff).to be_empty
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'when arrays are different' do
|
61
|
+
it 'reports arrays as not equal with a different order' do
|
62
|
+
# move an item from the end to the beginning
|
63
|
+
right_shuffled = right
|
64
|
+
popped = right_shuffled.pop
|
65
|
+
right_shuffled.unshift(popped)
|
66
|
+
|
67
|
+
expect(comparison(right_shuffled).diff).to_not be_empty
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should a deep comparison' do
|
71
|
+
right_with_extra_nested_element = right
|
72
|
+
right_with_extra_nested_element[1][:nested][:bar][:two] = 'two'
|
73
|
+
|
74
|
+
expect(comparison(right_with_extra_nested_element).diff).to_not be_empty
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -2,10 +2,37 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe HashDiff::Comparison do
|
4
4
|
|
5
|
-
let(:app_v1_properties) {
|
6
|
-
|
5
|
+
let(:app_v1_properties) {
|
6
|
+
{
|
7
|
+
foo: 'bar',
|
8
|
+
bar: 'foo',
|
9
|
+
nested: {
|
10
|
+
foo: 'bar',
|
11
|
+
bar: {
|
12
|
+
one: 'foo1'
|
13
|
+
}
|
14
|
+
},
|
15
|
+
num: 1,
|
16
|
+
word: nil
|
17
|
+
}
|
18
|
+
}
|
19
|
+
let(:app_v2_properties) {
|
20
|
+
{
|
21
|
+
foo: 'bar2',
|
22
|
+
bar: 'foo2',
|
23
|
+
nested: {
|
24
|
+
foo: 'bar2',
|
25
|
+
bar: {
|
26
|
+
two: 'foo2'
|
27
|
+
}
|
28
|
+
},
|
29
|
+
word: 'monkey'
|
30
|
+
}
|
31
|
+
}
|
7
32
|
|
8
|
-
subject(:comparison) {
|
33
|
+
subject(:comparison) {
|
34
|
+
HashDiff::Comparison.new(app_v1_properties, app_v2_properties)
|
35
|
+
}
|
9
36
|
|
10
37
|
describe "#diff" do
|
11
38
|
subject { comparison.diff }
|
@@ -18,11 +45,11 @@ describe HashDiff::Comparison do
|
|
18
45
|
nested: {
|
19
46
|
foo: ["bar", "bar2"],
|
20
47
|
bar: {
|
21
|
-
one: ["foo1",
|
22
|
-
two: [
|
48
|
+
one: ["foo1", HashDiff::NO_VALUE],
|
49
|
+
two: [HashDiff::NO_VALUE, "foo2"]
|
23
50
|
}
|
24
51
|
},
|
25
|
-
num: [1,
|
52
|
+
num: [1, HashDiff::NO_VALUE],
|
26
53
|
word: [nil, "monkey"]
|
27
54
|
}
|
28
55
|
}
|
@@ -57,11 +84,11 @@ describe HashDiff::Comparison do
|
|
57
84
|
nested: {
|
58
85
|
foo: "bar2",
|
59
86
|
bar: {
|
60
|
-
one:
|
87
|
+
one: HashDiff::NO_VALUE,
|
61
88
|
two: "foo2"
|
62
89
|
}
|
63
90
|
},
|
64
|
-
num:
|
91
|
+
num: HashDiff::NO_VALUE,
|
65
92
|
word: "monkey"
|
66
93
|
}
|
67
94
|
}
|
@@ -80,7 +107,7 @@ describe HashDiff::Comparison do
|
|
80
107
|
foo: "bar",
|
81
108
|
bar: {
|
82
109
|
one: "foo1",
|
83
|
-
two:
|
110
|
+
two: HashDiff::NO_VALUE
|
84
111
|
}
|
85
112
|
},
|
86
113
|
num: 1,
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rspec'
|
2
|
-
require 'rspec/autorun'
|
3
2
|
|
4
3
|
PROJECT_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..')).freeze
|
5
4
|
$LOAD_PATH << File.join(PROJECT_ROOT, 'lib')
|
@@ -9,4 +8,4 @@ require 'hash_diff'
|
|
9
8
|
|
10
9
|
RSpec.configure do |c|
|
11
10
|
c.filter_run_excluding :skip_on_windows => !(RbConfig::CONFIG['host_os'] =~ /mingw32/).nil?
|
12
|
-
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,30 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Coding Zeal
|
8
8
|
- Adam Cuppy
|
9
|
-
|
9
|
+
- Mike Bianco
|
10
|
+
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
|
-
date:
|
13
|
+
date: 2022-08-23 00:00:00.000000000 Z
|
13
14
|
dependencies:
|
14
15
|
- !ruby/object:Gem::Dependency
|
15
16
|
name: bundler
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
18
|
requirements:
|
18
|
-
- - "
|
19
|
+
- - ">="
|
19
20
|
- !ruby/object:Gem::Version
|
20
|
-
version: '
|
21
|
+
version: '0'
|
21
22
|
type: :development
|
22
23
|
prerelease: false
|
23
24
|
version_requirements: !ruby/object:Gem::Requirement
|
24
25
|
requirements:
|
25
|
-
- - "
|
26
|
+
- - ">="
|
26
27
|
- !ruby/object:Gem::Version
|
27
|
-
version: '
|
28
|
+
version: '0'
|
28
29
|
- !ruby/object:Gem::Dependency
|
29
30
|
name: rake
|
30
31
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,12 +57,16 @@ dependencies:
|
|
56
57
|
description: Diff tool for deep Ruby hash comparison
|
57
58
|
email:
|
58
59
|
- info@codingzeal.com
|
60
|
+
- mike@mikebian.co
|
59
61
|
executables: []
|
60
62
|
extensions: []
|
61
63
|
extra_rdoc_files: []
|
62
64
|
files:
|
65
|
+
- ".github/dependabot.yml"
|
66
|
+
- ".github/workflows/codeql.yml"
|
67
|
+
- ".github/workflows/ruby.yml"
|
63
68
|
- ".gitignore"
|
64
|
-
- ".
|
69
|
+
- ".ruby-version"
|
65
70
|
- Gemfile
|
66
71
|
- LICENSE.txt
|
67
72
|
- README.md
|
@@ -70,6 +75,7 @@ files:
|
|
70
75
|
- lib/hash_diff.rb
|
71
76
|
- lib/hash_diff/comparison.rb
|
72
77
|
- lib/hash_diff/version.rb
|
78
|
+
- spec/hash_diff/array_comparison_spec.rb
|
73
79
|
- spec/hash_diff/comparison_spec.rb
|
74
80
|
- spec/hash_diff_spec.rb
|
75
81
|
- spec/spec_helper.rb
|
@@ -77,7 +83,7 @@ homepage: https://github.com/CodingZeal/hash_diff
|
|
77
83
|
licenses:
|
78
84
|
- MIT
|
79
85
|
metadata: {}
|
80
|
-
post_install_message:
|
86
|
+
post_install_message:
|
81
87
|
rdoc_options: []
|
82
88
|
require_paths:
|
83
89
|
- lib
|
@@ -92,13 +98,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
98
|
- !ruby/object:Gem::Version
|
93
99
|
version: '0'
|
94
100
|
requirements: []
|
95
|
-
|
96
|
-
|
97
|
-
signing_key:
|
101
|
+
rubygems_version: 3.1.6
|
102
|
+
signing_key:
|
98
103
|
specification_version: 4
|
99
104
|
summary: Deep Ruby Hash comparison
|
100
105
|
test_files:
|
106
|
+
- spec/hash_diff/array_comparison_spec.rb
|
101
107
|
- spec/hash_diff/comparison_spec.rb
|
102
108
|
- spec/hash_diff_spec.rb
|
103
109
|
- spec/spec_helper.rb
|
104
|
-
has_rdoc:
|