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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 138f8fc905ed5caa8160dc05131bfd1d1f484908
4
- data.tar.gz: 7bc15e4a8d6e0fa94bd1c4bc0f29d67e34ad7dc1
2
+ SHA256:
3
+ metadata.gz: 8ef02ebe0aac07af77b8e597a40b218c4b2f20c53f3f895fc131d07961a38011
4
+ data.tar.gz: 7b03cd799b1f0a5eded66d91d5ed0f9b882ef38e26fec1c004568d71e5e68d0b
5
5
  SHA512:
6
- metadata.gz: 702c7c4b34e50a6b410ed191a57e185a55ba96d3ca95c855b68f349fc267f1204ab00bd439fa248d23ab22a456aff5a84c0fac04356004017a7d6ce77076e50d
7
- data.tar.gz: 14211e477a53d725526d6f7c271338a49727d81bafa447842cef00ded7e561184f590478294a1b7a19f868c122e2c60f8e4dd1969e7cc470f78cd6d96477f282
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
@@ -15,3 +15,4 @@ spec/reports
15
15
  test/tmp
16
16
  test/version_tmp
17
17
  tmp
18
+ vendor/
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.7.3
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 acuppy
1
+ Copyright (c) 2013 Zeal, LLC (dba. Coding Zeal)
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  # HashDiff
2
- [![Build Status](https://travis-ci.org/CodingZeal/hash_diff.png?branch=master)](https://travis-ci.org/CodingZeal/hash_diff) [![Code Climate](https://codeclimate.com/github/CodingZeal/hash_diff.png)](https://codeclimate.com/github/CodingZeal/hash_diff) [![Gem Version](https://badge.fury.io/rb/hash_diff.png)](http://badge.fury.io/rb/hash_diff)
2
+
3
+ [![Ruby](https://github.com/CodingZeal/hash_diff/actions/workflows/ruby.yml/badge.svg)](https://github.com/CodingZeal/hash_diff/actions/workflows/ruby.yml) [![Code Climate](https://codeclimate.com/github/CodingZeal/hash_diff.png)](https://codeclimate.com/github/CodingZeal/hash_diff) [![Gem Version](https://badge.fury.io/rb/hash_diff.png)](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", nil], two: [nil, "foo2"] } }, num: [1, nil], word: [nil, "monkey"] }
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 # => { foo: "bar2", bar: "foo2", nested: { foo: "bar2", bar: { one: nil, two: "foo2" } }, num: nil, word: "monkey" }
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 # => { foo: "bar", bar: "foo", nested: { foo: "bar", bar: { one: "foo1", two: nil } }, num: 1, word: nil }
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
- ## Credits
91
-
92
- Authored by Adam Cuppy (@acuppy) of Coding ZEAL (http://codingzeal.com)
99
+ ## License
93
100
 
94
- ![Coding ZEAL](https://googledrive.com/host/0B3TWa6M1MsWeWmxRZWhscllwTzA/ZEAL-logo-final-150.png)
101
+ Authored by the Engineering Team of [Coding ZEAL](https://codingzeal.com?utm_source=github)
95
102
 
96
- This is freely distributed under the MIT license. Use it, modify it,
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
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+ task default: :spec
7
+ rescue LoadError
8
+ end
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", "~> 1.3"
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
@@ -1,74 +1,84 @@
1
1
  module HashDiff
2
- class Comparison < Struct.new(:left, :right)
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 ||= differences(left, right)
11
+ @diff ||= find_differences { |l, r| [l, r] }
6
12
  end
7
13
 
8
14
  def left_diff
9
- @concern = :left
10
- @left_diff ||= differences(left, right)
15
+ @left_diff ||= find_differences { |_, r| r }
11
16
  end
12
17
 
13
18
  def right_diff
14
- @concern = :right
15
- @right_diff ||= differences(left, right)
19
+ @right_diff ||= find_differences { |l, _| l }
16
20
  end
17
21
 
18
- private
22
+ protected
19
23
 
20
- def concern
21
- @concern ||= :both
24
+ def find_differences(&reporter)
25
+ combined_keys.each_with_object({ }, &comparison_strategy(reporter))
22
26
  end
23
27
 
24
- def clone(left, right)
25
- self.dup.tap do |inst|
26
- inst.left = left
27
- inst.right = right
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 differences(left, right)
32
- combined_attribute_keys.reduce({}, &reduction_strategy)
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 reduction_strategy
36
- lambda do |diff, key|
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 combined_attribute_keys
43
- (left.keys + right.keys).uniq
50
+ def hash?(value)
51
+ value.is_a?(Hash)
44
52
  end
45
53
 
46
- def equal?(key)
47
- left[key] == right[key]
54
+ def array?(value)
55
+ value.is_a?(Array)
48
56
  end
49
57
 
50
- def hash?(value)
51
- value.is_a? Hash
58
+ def comparable_hash?(key)
59
+ hash?(left[key]) && hash?(right[key])
52
60
  end
53
61
 
54
- def comparable?(key)
55
- hash?(left[key]) and hash?(right[key])
62
+ def comparable_array?(key)
63
+ array?(left[key]) && array?(right[key])
56
64
  end
57
65
 
58
- def report(key)
59
- if comparable?(key)
60
- clone(left[key], right[key]).diff
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
- report_concern(key)
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 report_concern(key)
67
- case concern
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
+
@@ -1,3 +1,3 @@
1
1
  module HashDiff
2
- VERSION = "0.7.0"
2
+ VERSION = "1.1.0"
3
3
  end
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 << self
6
- def diff(*args)
7
- Comparison.new(*args).diff
8
- end
5
+ class NO_VALUE; end
9
6
 
10
- def left_diff(*args)
11
- Comparison.new(*args).left_diff
12
- end
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
- def right_diff(*args)
15
- Comparison.new(*args).right_diff
16
- end
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
- def patch!
19
- Hash.class_eval do
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) { { foo: 'bar', bar: 'foo', nested: { foo: 'bar', bar: { one: 'foo1' } }, num: 1 } }
6
- let(:app_v2_properties) { { foo: 'bar2', bar: 'foo2', nested: { foo: 'bar2', bar: { two: 'foo2' } }, word: 'monkey' } }
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) { HashDiff::Comparison.new(app_v1_properties, app_v2_properties) }
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", nil],
22
- two: [nil, "foo2"]
48
+ one: ["foo1", HashDiff::NO_VALUE],
49
+ two: [HashDiff::NO_VALUE, "foo2"]
23
50
  }
24
51
  },
25
- num: [1, nil],
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: nil,
87
+ one: HashDiff::NO_VALUE,
61
88
  two: "foo2"
62
89
  }
63
90
  },
64
- num: nil,
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: nil
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: 0.7.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Coding Zeal
8
8
  - Adam Cuppy
9
- autorequire:
9
+ - Mike Bianco
10
+ autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2015-06-23 00:00:00.000000000 Z
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: '1.3'
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: '1.3'
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
- - ".travis.yml"
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
- rubyforge_project:
96
- rubygems_version: 2.2.2
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:
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- script: "bundle exec rspec spec"
2
-
3
- language: ruby
4
-
5
- rvm:
6
- - 1.9.3