hash_deep_diff 0.1.0 → 0.2.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
2
  SHA256:
3
- metadata.gz: ba9a1f48817d357af97c44b197ca81ea20cd7c0b809ecf994c6d432ec281951f
4
- data.tar.gz: 065c3598e130199735f058a3d1530e220fcc7b36a662aa8cfba76b1ee5efef1a
3
+ metadata.gz: 2ba7f377f6c2d53dd22518acfe0a285ed4d4614f9bf03c1c32f1775358a01188
4
+ data.tar.gz: 827fbbd1133ff72fd11475d0c5001894c27a6e71c125ccc5da891c159538beae
5
5
  SHA512:
6
- metadata.gz: 3be4e4202cb560aaffe5beedcc7b0993d24e4083577f20ca7ab2403c5557331fa19affdfa953e349c98ce5df1c963ba8d966b2fc420916e3ec533c9a41a67867
7
- data.tar.gz: 15ba966943ca6b67fdd294a2e9f47d5ea04470d78632cd193cb065c3762f44d689586222add5197152d6ff8684d74637add0f2d8a531b84a39bee46dfaf507dc
6
+ metadata.gz: 12eb5aa92de1f7c6d43473bf6858278ffafca368537e7e9f4fd9d2dd945493c4760c9daaee03724e5699c7acd067b06e6bf3162beb38923fe9f218addbae2742
7
+ data.tar.gz: f61820a61aeac40a63431a392a3352f79ae278016b2e0238e16b690f8c0a72ea26fbc0c1351face859a71683e61dab720c0cccc55953eac6759101dc4822edc3
data/.bundle/.keep ADDED
File without changes
data/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_PATH: "vendor/bundle"
data/.gitignore CHANGED
@@ -1,4 +1,5 @@
1
- /.bundle/
1
+ *.gem
2
+ *.lock
2
3
  /.yardoc
3
4
  /_yardoc/
4
5
  /coverage/
@@ -6,3 +7,4 @@
6
7
  /pkg/
7
8
  /spec/reports/
8
9
  /tmp/
10
+ /vendor/bundle/
data/.rubocop.yml ADDED
@@ -0,0 +1,20 @@
1
+ require:
2
+ - rubocop/cop/internal_affairs
3
+ - rubocop-minitest
4
+ - rubocop-rake
5
+
6
+ AllCops:
7
+ NewCops: enable
8
+ Exclude:
9
+ - 'vendor/**/*'
10
+ - '.git/**/*'
11
+ - '.bundle/**/*'
12
+ - 'bin/*'
13
+
14
+ Style/RedundantReturn:
15
+ Enabled: false
16
+
17
+ Metrics/BlockLength:
18
+ Exclude:
19
+ - 'test/**/test_*.rb'
20
+ - '*.gemspec'
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in hash_deep_diff.gemspec
6
8
  gemspec
data/Guardfile ADDED
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ # A sample Guardfile
4
+ # More info at https://github.com/guard/guard#readme
5
+
6
+ ## Uncomment and set this to only include directories you want to watch
7
+ # directories %w(app lib config test spec features) \
8
+ # .select{|d| Dir.exist?(d) ? d : UI.warning("Directory #{d} does not exist")}
9
+
10
+ ## Note: if you are using the `directories` clause above and you are not
11
+ ## watching the project directory ('.'), then you will want to move
12
+ ## the Guardfile to a watched dir and symlink it back, e.g.
13
+ #
14
+ # $ mkdir config
15
+ # $ mv Guardfile config/
16
+ # $ ln -s config/Guardfile .
17
+ #
18
+ # and, you'll have to watch "config/Guardfile" instead of "Guardfile"
19
+
20
+ guard :rubocop do
21
+ watch(/.+\.rb$/)
22
+ watch(/.+\.gemspec$/)
23
+ watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
24
+ end
25
+
26
+ guard :minitest do
27
+ # with Minitest::Unit
28
+ watch(%r{^test/(.*)/?test_(.*)\.rb$})
29
+ watch(%r{^lib/(.*/)?([^/]+)\.rb$}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
30
+ watch(%r{^test/test_helper\.rb$}) { 'test' }
31
+ end
data/README.md CHANGED
@@ -1,3 +1,10 @@
1
+ Ideas
2
+ - if not equal use sets to diff keys
3
+ - use to_ary to_hash for values to find if further recursion needed
4
+ - use to_a.flatten to figure out if any unacceptable classes present
5
+ - do not use respond_to?(:each) in first version
6
+
7
+
1
8
  # HashDeepDiff
2
9
 
3
10
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/hash_deep_diff`. To experiment with that code, run `bin/console` for an interactive prompt.
data/Rakefile CHANGED
@@ -1,2 +1,12 @@
1
- require "bundler/gem_tasks"
2
- task :default => :spec
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'test'
8
+ t.test_files = FileList['test/**/*_spec.rb']
9
+ t.verbose = true
10
+ end
11
+
12
+ task default: :test
data/bin/_guard-core ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application '_guard-core' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('guard', '_guard-core')
data/bin/bundle ADDED
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'bundle' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'rubygems'
12
+
13
+ m = Module.new do
14
+ module_function
15
+
16
+ def invoked_as_script?
17
+ File.expand_path($PROGRAM_NAME) == File.expand_path(__FILE__)
18
+ end
19
+
20
+ def env_var_version
21
+ ENV['BUNDLER_VERSION']
22
+ end
23
+
24
+ def cli_arg_version
25
+ return unless invoked_as_script? # don't want to hijack other binstubs
26
+ return unless 'update'.start_with?(ARGV.first || ' ') # must be running `bundle update`
27
+
28
+ bundler_version = nil
29
+ update_index = nil
30
+ ARGV.each_with_index do |a, i|
31
+ bundler_version = a if update_index && update_index.succ == i && a =~ Gem::Version::ANCHORED_VERSION_PATTERN
32
+ next unless a =~ /\A--bundler(?:[= ](#{Gem::Version::VERSION_PATTERN}))?\z/
33
+
34
+ bundler_version = Regexp.last_match(1) || '>= 0.a'
35
+ update_index = i
36
+ end
37
+ bundler_version
38
+ end
39
+
40
+ def gemfile
41
+ gemfile = ENV['BUNDLE_GEMFILE']
42
+ return gemfile if gemfile && !gemfile.empty?
43
+
44
+ File.expand_path('../Gemfile', __dir__)
45
+ end
46
+
47
+ def lockfile
48
+ lockfile =
49
+ case File.basename(gemfile)
50
+ when 'gems.rb' then gemfile.sub(/\.rb$/, gemfile)
51
+ else "#{gemfile}.lock"
52
+ end
53
+ File.expand_path(lockfile)
54
+ end
55
+
56
+ def lockfile_version
57
+ return unless File.file?(lockfile)
58
+
59
+ lockfile_contents = File.read(lockfile)
60
+ return unless lockfile_contents =~ /\n\nBUNDLED WITH\n\s{2,}(#{Gem::Version::VERSION_PATTERN})\n/
61
+
62
+ Regexp.last_match(1)
63
+ end
64
+
65
+ def bundler_version
66
+ @bundler_version ||= env_var_version || cli_arg_version ||
67
+ lockfile_version || "#{Gem::Requirement.default}.a"
68
+ end
69
+
70
+ def load_bundler!
71
+ ENV['BUNDLE_GEMFILE'] ||= gemfile
72
+
73
+ # must dup string for RG < 1.8 compatibility
74
+ activate_bundler(bundler_version.dup)
75
+ end
76
+
77
+ def activate_bundler(bundler_version)
78
+ if Gem::Version.correct?(bundler_version) && Gem::Version.new(bundler_version).release < Gem::Version.new('2.0')
79
+ bundler_version = '< 2'
80
+ end
81
+ gem_error = activation_error_handling do
82
+ gem 'bundler', bundler_version
83
+ end
84
+ return if gem_error.nil?
85
+
86
+ require_error = activation_error_handling do
87
+ require 'bundler/version'
88
+ end
89
+ if require_error.nil? && Gem::Requirement.new(bundler_version).satisfied_by?(Gem::Version.new(Bundler::VERSION))
90
+ return
91
+ end
92
+
93
+ warn "Activating bundler (#{bundler_version}) failed:\n#{gem_error.message}\n\nTo install the version of bundler this project requires, run `gem install bundler -v '#{bundler_version}'`"
94
+ exit 42
95
+ end
96
+
97
+ def activation_error_handling
98
+ yield
99
+ nil
100
+ rescue StandardError, LoadError => e
101
+ e
102
+ end
103
+ end
104
+
105
+ m.load_bundler!
106
+
107
+ load Gem.bin_path('bundler', 'bundle') if m.invoked_as_script?
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "hash_deep_diff"
4
+ require 'bundler/setup'
5
+ require 'hash_deep_diff'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "hash_deep_diff"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
data/bin/guard ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'guard' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('guard', 'guard')
data/bin/rake ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rake' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('rake', 'rake')
data/bin/rubocop ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rubocop' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require 'pathname'
12
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile',
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path('bundle', __dir__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 300) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require 'rubygems'
27
+ require 'bundler/setup'
28
+
29
+ load Gem.bin_path('rubocop', 'rubocop')
@@ -1,41 +1,52 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "hash_deep_diff/version"
5
+ require 'hash_deep_diff/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "hash_deep_diff"
8
+ spec.name = 'hash_deep_diff'
8
9
  spec.version = HashDeepDiff::VERSION
9
10
  spec.licenses = ['MIT']
10
- spec.authors = ["Bohdan Pohorilets"]
11
- spec.email = ["bohdan.pohorilets@gmail.com"]
11
+ spec.authors = ['Bohdan Pohorilets']
12
+ spec.email = ['bohdan.pohorilets@gmail.com']
12
13
 
13
- spec.summary = %q{Deep diff for ruby hashes.}
14
- spec.description = %q{Find the exact difference between two hashes.}
15
- spec.homepage = "https://github.com/bpohoriletz/hash_deep_diff"
14
+ spec.summary = 'Deep diff for Ruby Hash objects'
15
+ spec.description = 'Find the exact difference between two Hash objects'
16
+ spec.homepage = 'https://github.com/bpohoriletz/hash_deep_diff'
17
+ spec.required_ruby_version = '>= 2.6.1'
16
18
 
17
19
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
20
  # to allow pushing to a single host or delete this section to allow pushing to any host.
19
21
  if spec.respond_to?(:metadata)
20
- spec.metadata["allowed_push_host"] = "https://rubygems.org/"
22
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org/'
21
23
 
22
- spec.metadata["homepage_uri"] = spec.homepage
23
- spec.metadata["source_code_uri"] = "https://github.com/bpohoriletz/hash_deep_diff"
24
- spec.metadata["changelog_uri"] = "https://github.com/bpohoriletz/hash_deep_diff/blob/main/CHANGELOG.md"
24
+ spec.metadata['homepage_uri'] = spec.homepage
25
+ spec.metadata['source_code_uri'] = 'https://github.com/bpohoriletz/hash_deep_diff'
26
+ spec.metadata['changelog_uri'] = 'https://github.com/bpohoriletz/hash_deep_diff/blob/main/CHANGELOG.md'
27
+ spec.metadata['rubygems_mfa_required'] = 'true'
25
28
  else
26
- raise "RubyGems 2.0 or newer is required to protect against " \
27
- "public gem pushes."
29
+ raise 'RubyGems 2.0 or newer is required to protect against ' \
30
+ 'public gem pushes.'
28
31
  end
29
32
 
30
33
  # Specify which files should be added to the gem when it is released.
31
34
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
35
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
33
36
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
37
  end
35
- spec.bindir = "exe"
38
+ spec.bindir = 'exe'
36
39
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
- spec.require_paths = ["lib"]
40
+ spec.require_paths = ['lib']
38
41
 
39
- spec.add_development_dependency "bundler", "~> 1.17"
40
- spec.add_development_dependency "rake", "~> 10.0"
42
+ spec.add_development_dependency 'bundler'
43
+ spec.add_development_dependency 'guard'
44
+ spec.add_development_dependency 'guard-minitest'
45
+ spec.add_development_dependency 'guard-rubocop'
46
+ spec.add_development_dependency 'minitest'
47
+ spec.add_development_dependency 'minitest-reporters'
48
+ spec.add_development_dependency 'rake'
49
+ spec.add_development_dependency 'rubocop'
50
+ spec.add_development_dependency 'rubocop-minitest'
51
+ spec.add_development_dependency 'rubocop-rake'
41
52
  end
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ # :nodoc:
4
+ module HashDeepDiff
5
+ # :nodoc:
6
+ class Comparison
7
+ attr_reader :left, :right
8
+
9
+ def diff(&block)
10
+ return [{}, {}, {}] if left == right # this is order-sensitive comparison
11
+ return [left, {}, {}] if right.empty?
12
+ return [{}, {}, right] if left.empty?
13
+ return first_level_delta(&block) if one_level_deep?
14
+
15
+ return [left_delta, deep_delta(&block), right_delta]
16
+ end
17
+
18
+ private
19
+
20
+ def initialize(left, right)
21
+ @left = left.to_hash
22
+ @right = right.to_hash
23
+ end
24
+
25
+ def deep_delta(&block)
26
+ result = delta(&block)
27
+ result.keys.each_with_object({}) do |key, memo|
28
+ memo[key] = result[key] && next unless left[key].instance_of?(Hash)
29
+
30
+ memo[key] = self.class.new(left[key], right[key]).diff
31
+ end
32
+ end
33
+
34
+ def first_level_delta(&block)
35
+ [
36
+ left_delta,
37
+ delta(&block),
38
+ right_delta
39
+ ]
40
+ end
41
+
42
+ def right_delta
43
+ right_diff_keys.each_with_object({}) do |key, memo|
44
+ memo[key] = right[key]
45
+ end
46
+ end
47
+
48
+ def delta(&block)
49
+ block ||= ->(val) { val }
50
+
51
+ common_keys.each_with_object({}) do |key, memo|
52
+ value_left = block.call(left[key])
53
+ value_right = block.call(right[key])
54
+
55
+ next if value_right.instance_of?(value_left.class) && (value_right == value_left)
56
+
57
+ memo[key] = {
58
+ left: value_left,
59
+ right: value_right
60
+ }
61
+ end
62
+ end
63
+
64
+ def left_delta
65
+ left_diff_keys.each_with_object({}) do |key, memo|
66
+ memo[key] = left[key]
67
+ end
68
+ end
69
+
70
+ def one_level_deep?
71
+ left.values.none? { |value| value.respond_to?(:to_hash) } &&
72
+ right.values.none? { |value| value.respond_to?(:to_hash) }
73
+ end
74
+
75
+ def common_keys
76
+ left.keys & right.keys
77
+ end
78
+
79
+ def right_diff_keys
80
+ right.keys - left.keys
81
+ end
82
+
83
+ def left_diff_keys
84
+ left.keys - right.keys
85
+ end
86
+ end
87
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module HashDeepDiff
2
- VERSION = "0.1.0"
4
+ VERSION = '0.2.0'
3
5
  end
@@ -1,4 +1,7 @@
1
- require "hash_deep_diff/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'hash_deep_diff/version'
4
+ require 'hash_deep_diff/comparison'
2
5
 
3
6
  module HashDeepDiff
4
7
  class Error < StandardError; end
metadata CHANGED
@@ -1,58 +1,180 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_deep_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bohdan Pohorilets
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-30 00:00:00.000000000 Z
11
+ date: 2022-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.17'
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: guard
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard-minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: guard-rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest-reporters
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
27
97
  - !ruby/object:Gem::Dependency
28
98
  name: rake
29
99
  requirement: !ruby/object:Gem::Requirement
30
100
  requirements:
31
- - - "~>"
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-minitest
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
32
144
  - !ruby/object:Gem::Version
33
- version: '10.0'
145
+ version: '0'
34
146
  type: :development
35
147
  prerelease: false
36
148
  version_requirements: !ruby/object:Gem::Requirement
37
149
  requirements:
38
- - - "~>"
150
+ - - ">="
39
151
  - !ruby/object:Gem::Version
40
- version: '10.0'
41
- description: Find the exact difference between two hashes.
152
+ version: '0'
153
+ description: Find the exact difference between two Hash objects
42
154
  email:
43
155
  - bohdan.pohorilets@gmail.com
44
156
  executables: []
45
157
  extensions: []
46
158
  extra_rdoc_files: []
47
159
  files:
160
+ - ".bundle/.keep"
161
+ - ".bundle/config"
48
162
  - ".gitignore"
163
+ - ".rubocop.yml"
49
164
  - Gemfile
165
+ - Guardfile
50
166
  - README.md
51
167
  - Rakefile
168
+ - bin/_guard-core
169
+ - bin/bundle
52
170
  - bin/console
171
+ - bin/guard
172
+ - bin/rake
173
+ - bin/rubocop
53
174
  - bin/setup
54
175
  - hash_deep_diff.gemspec
55
176
  - lib/hash_deep_diff.rb
177
+ - lib/hash_deep_diff/comparison.rb
56
178
  - lib/hash_deep_diff/version.rb
57
179
  homepage: https://github.com/bpohoriletz/hash_deep_diff
58
180
  licenses:
@@ -62,6 +184,7 @@ metadata:
62
184
  homepage_uri: https://github.com/bpohoriletz/hash_deep_diff
63
185
  source_code_uri: https://github.com/bpohoriletz/hash_deep_diff
64
186
  changelog_uri: https://github.com/bpohoriletz/hash_deep_diff/blob/main/CHANGELOG.md
187
+ rubygems_mfa_required: 'true'
65
188
  post_install_message:
66
189
  rdoc_options: []
67
190
  require_paths:
@@ -70,7 +193,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
193
  requirements:
71
194
  - - ">="
72
195
  - !ruby/object:Gem::Version
73
- version: '0'
196
+ version: 2.6.1
74
197
  required_rubygems_version: !ruby/object:Gem::Requirement
75
198
  requirements:
76
199
  - - ">="
@@ -80,5 +203,5 @@ requirements: []
80
203
  rubygems_version: 3.0.3
81
204
  signing_key:
82
205
  specification_version: 4
83
- summary: Deep diff for ruby hashes.
206
+ summary: Deep diff for Ruby Hash objects
84
207
  test_files: []