hash_diff 1.0.0 → 1.1.0

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
- SHA1:
3
- metadata.gz: 0c353c43e17ed7d833fe9edf3fd4e6ec4af96aa6
4
- data.tar.gz: b8b050b80bb2c69ad5e4b79a96c30cc1ede24092
2
+ SHA256:
3
+ metadata.gz: 8ef02ebe0aac07af77b8e597a40b218c4b2f20c53f3f895fc131d07961a38011
4
+ data.tar.gz: 7b03cd799b1f0a5eded66d91d5ed0f9b882ef38e26fec1c004568d71e5e68d0b
5
5
  SHA512:
6
- metadata.gz: d528f1366911a7b69bff0af027621b0e37ca22b97b4150b4853277548f2ee242701a4320701a9432c6acfe5333b0f2b4df35ca3b0d9e401d16dab9086774086d
7
- data.tar.gz: c95598db8dadac025c0f6526d55ca43ab4bf2154f782d6d1402ef3da88c7df5be5f3597f014c984e4d6858fd2cb84a364f37d9ee3c37124c73411ebb79e2be3f
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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # HashDiff
2
2
 
3
- [![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)
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)
4
4
 
5
5
  Deep comparison of Ruby Hash objects
6
6
 
@@ -58,6 +58,8 @@ Comparison#diff returns the left and right side differences
58
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] }
59
59
  ```
60
60
 
61
+ You can also compare two arrays. The comparison is sensitive to the order of the elements in the array.
62
+
61
63
  #### Missing keys
62
64
 
63
65
  When there is a key that exists on one side it will return `HashDiff::NO_VALUE` to represent a missing key.
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
@@ -34,7 +34,13 @@ module HashDiff
34
34
  end
35
35
 
36
36
  def combined_keys
37
- (left.keys + right.keys).uniq
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
38
44
  end
39
45
 
40
46
  def equal?(key)
@@ -45,12 +51,22 @@ module HashDiff
45
51
  value.is_a?(Hash)
46
52
  end
47
53
 
48
- def comparable?(key)
54
+ def array?(value)
55
+ value.is_a?(Array)
56
+ end
57
+
58
+ def comparable_hash?(key)
49
59
  hash?(left[key]) && hash?(right[key])
50
60
  end
51
61
 
62
+ def comparable_array?(key)
63
+ array?(left[key]) && array?(right[key])
64
+ end
65
+
52
66
  def report_difference(key, reporter)
53
- if comparable?(key)
67
+ if comparable_hash?(key)
68
+ self.class.new(left[key], right[key]).find_differences(&reporter)
69
+ elsif comparable_array?(key)
54
70
  self.class.new(left[key], right[key]).find_differences(&reporter)
55
71
  else
56
72
  reporter.call(
@@ -65,3 +81,4 @@ module HashDiff
65
81
  end
66
82
  end
67
83
  end
84
+
@@ -1,3 +1,3 @@
1
1
  module HashDiff
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  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
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: 1.0.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: 2018-01-10 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.5.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