hashes_equal 0.1.3 → 0.3.1

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: 25706f6a131ad3135e14aae02f1c5d5afc3a60a2ed6286246ec0393f3e5aae13
4
- data.tar.gz: dbf294af717937e6168a52c074e604afbd47d5e372285b9795e5ed3edceba73a
3
+ metadata.gz: 8447faaa13a7be85fdfb87288c12e005213add0fd43a1f0e9e9e29a037558b9e
4
+ data.tar.gz: c6a84ead82b663be2760573db2f392daf293e2167909a7adbc235b81706da484
5
5
  SHA512:
6
- metadata.gz: 2bd45079a7d9a351f005fe39cee4ed1af442a28bab7e4375089cdd5db6d90e831a183a6c8b2e0721069f46683ea14c7ffc282ed78721ee50a14c067d581bc601
7
- data.tar.gz: 4a7bcc44a3dd668bde4140428d8cfa9bee262137d6b5fad48afb7e5d11499f2900e6ca5ae50120b168e39146675d2e1be4fd4cf24af7db0af3bafcf1c0f13e21
6
+ metadata.gz: 4798ab8bc1b7b3734d57e27c1c3977376da8626637a97c5c9325e7eab4bdea19853035af3d4c39ae2b9b657242998e97c5a1ff88fb9994f5be55af3bbb9b0f2a
7
+ data.tar.gz: 21cb0631f064810aa7f1023e15748d01bd6d27165c9314406d01c85eacf72cd0986b292701facc00b520581d82ac3fcf58e7238d320c2165f099f4a98787bf53
@@ -0,0 +1,54 @@
1
+ version: 2.1
2
+
3
+ executors:
4
+ ruby:
5
+ docker:
6
+ - image: cimg/ruby:3.4.6
7
+ working_directory: ~/project
8
+
9
+ commands:
10
+ bundle_install:
11
+ steps:
12
+ - restore_cache:
13
+ keys:
14
+ - v1-bundle-{{ checksum "Gemfile.lock" }}
15
+ - v1-bundle-
16
+ - run:
17
+ name: Bundle install
18
+ command: |
19
+ bundle config set path vendor/bundle
20
+ bundle install --jobs=4 --retry=3
21
+ - save_cache:
22
+ key: v1-bundle-{{ checksum "Gemfile.lock" }}
23
+ paths:
24
+ - vendor/bundle
25
+
26
+ jobs:
27
+ lint:
28
+ executor: ruby
29
+ steps:
30
+ - checkout
31
+ - bundle_install
32
+ - run:
33
+ name: Rubocop
34
+ command: make lint
35
+
36
+ test:
37
+ executor: ruby
38
+ steps:
39
+ - checkout
40
+ - bundle_install
41
+ - run:
42
+ name: Tests
43
+ command: make tests
44
+ - store_test_results:
45
+ path: tmp/tests/reports
46
+ - store_artifacts:
47
+ path: coverage/
48
+
49
+ workflows:
50
+ version: 2
51
+ build:
52
+ jobs:
53
+ - lint
54
+ - test
data/.rubocop.yml CHANGED
@@ -3,6 +3,7 @@ require:
3
3
 
4
4
  AllCops:
5
5
  TargetRubyVersion: 2.6
6
+ NewCops: enable
6
7
 
7
8
  Layout/EmptyLinesAroundAttributeAccessor:
8
9
  Enabled: true
@@ -94,6 +95,9 @@ Style/RedundantRegexpEscape:
94
95
  Style/SlicingWithRange:
95
96
  Enabled: true
96
97
 
98
+ Style/StringConcatenation:
99
+ Enabled: false
100
+
97
101
  # Metrics/ClassLength:
98
102
  # Max: 250
99
103
 
data/.travis.yml CHANGED
@@ -5,7 +5,6 @@ language: ruby
5
5
  cache: bundler
6
6
  rvm:
7
7
  - 2.6.6
8
- - 2.7.0
9
8
  before_install:
10
9
  - gem install bundler -v 2.1.4
11
10
  - bundle --version
data/Dockerfile ADDED
@@ -0,0 +1,26 @@
1
+ FROM ruby:3.4.6-bookworm AS base
2
+
3
+ ENV LANG=C.UTF-8
4
+ ENV BUNDLE_PATH=/usr/local/bundle
5
+
6
+ WORKDIR /app
7
+
8
+ RUN apt-get update && apt-get install -y --no-install-recommends \
9
+ build-essential \
10
+ git \
11
+ libsodium23 \
12
+ && rm -rf /var/lib/apt/lists/*
13
+
14
+ RUN gem install bundler -v 2.7.2 --no-document
15
+ RUN bundler _2.7.2_ --version
16
+
17
+ COPY *.gemspec ./
18
+ COPY Gemfile Gemfile.lock* ./
19
+
20
+ RUN bundler _2.7.2_ install
21
+
22
+ RUN bundle install
23
+
24
+ COPY . .
25
+
26
+ CMD ["bash"]
data/Gemfile CHANGED
@@ -5,5 +5,16 @@ source 'https://rubygems.org'
5
5
  # Specify your gem's dependencies in hashes_equal.gemspec
6
6
  gemspec
7
7
 
8
- gem 'minitest', '~> 5.0'
9
- gem 'rake', '~> 12.0'
8
+ gem 'base64'
9
+ gem 'bundler', '~> 2.1', '>= 2.1.4'
10
+ gem 'byebug', '~> 11.1'
11
+ gem 'guard', '~> 2.16'
12
+ gem 'guard-minitest', '~> 2.4'
13
+ gem 'minitest', '~> 6.0'
14
+ gem 'minitest-reporters', '~> 1.7'
15
+ gem 'mocha', '~> 3.0'
16
+ gem 'pry', '~> 0.13'
17
+ gem 'rake', '~> 13.0'
18
+ gem 'rubocop', '~> 1.86'
19
+ gem 'rubocop-performance', '~> 1.5'
20
+ gem 'simplecov', '~> 0.19.0'
data/Makefile CHANGED
@@ -1,5 +1,12 @@
1
1
  build:
2
2
  gem build hashes_equal.gemspec
3
+ echo ">> gem push_hashes_equal-x.y.z.gem, to release this new version!"
4
+
5
+ docker_bash:
6
+ docker compose run --rm hashes_equal_gem bash
7
+
8
+ docker_build:
9
+ docker compose up --build
3
10
 
4
11
  lint:
5
12
  bundle exec rubocop
@@ -0,0 +1,15 @@
1
+ services:
2
+ hashes_equal_gem:
3
+ build:
4
+ context: .
5
+ dockerfile: Dockerfile
6
+ working_dir: /app
7
+ volumes:
8
+ - .:/app
9
+ - bundle_cache:/usr/local/bundle
10
+ tty: true
11
+ stdin_open: true
12
+ command: echo 'ok'
13
+
14
+ volumes:
15
+ bundle_cache:
data/hashes_equal.gemspec CHANGED
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'lib/hashes_equal/version'
3
+ # require_relative 'lib/hashes_equal/version'
4
4
 
5
+ # rubocop:disable Gemspec/RequireMFA
5
6
  Gem::Specification.new do |spec|
6
7
  spec.name = 'hashes_equal'
7
- spec.version = HashesEqual::VERSION
8
+ spec.version = '0.3.1'
8
9
  spec.authors = ['Shippingbo']
9
10
  spec.email = ['tech@facilecomm.com']
10
11
 
@@ -20,6 +21,8 @@ Gem::Specification.new do |spec|
20
21
  # spec.metadata["source_code_uri"] = "Put your gem's public repo URL here."
21
22
  # spec.metadata["changelog_uri"] = "Put your gem's CHANGELOG.md URL here."
22
23
 
24
+ # spec.metadata['rubygems_mfa_required'] = 'true'
25
+
23
26
  # Specify which files should be added to the gem when it is released.
24
27
  # The `git ls-files -z` loads the files
25
28
  # in the RubyGem that have been added into git.
@@ -37,16 +40,17 @@ Gem::Specification.new do |spec|
37
40
 
38
41
  spec.add_dependency 'hashdiff', '~> 1.0', '>= 1.0.1'
39
42
 
40
- spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
41
- spec.add_development_dependency 'byebug', '~> 11.1'
42
- spec.add_development_dependency 'guard', '~> 2.16'
43
- spec.add_development_dependency 'guard-minitest', '~> 2.4'
44
- spec.add_development_dependency 'minitest', '~> 5.11'
45
- spec.add_development_dependency 'minitest-reporters', '~> 1.4'
46
- spec.add_development_dependency 'mocha', '~> 1.11'
47
- spec.add_development_dependency 'pry', '~> 0.13'
48
- spec.add_development_dependency 'rake', '~> 13.0'
49
- spec.add_development_dependency 'rubocop', '~> 0.85'
50
- spec.add_development_dependency 'rubocop-performance', '~> 1.5'
51
- spec.add_development_dependency 'simplecov', '~> 0.18.5'
43
+ # spec.add_development_dependency 'bundler', '~> 2.1', '>= 2.1.4'
44
+ # spec.add_development_dependency 'byebug', '~> 11.1'
45
+ # spec.add_development_dependency 'guard', '~> 2.16'
46
+ # spec.add_development_dependency 'guard-minitest', '~> 2.4'
47
+ # spec.add_development_dependency 'minitest', '~> 6.0'
48
+ # spec.add_development_dependency 'minitest-reporters', '~> 1.7'
49
+ # spec.add_development_dependency 'mocha', '~> 3.0'
50
+ # spec.add_development_dependency 'pry', '~> 0.13'
51
+ # spec.add_development_dependency 'rake', '~> 13.0'
52
+ # spec.add_development_dependency 'rubocop', '1.86'
53
+ # spec.add_development_dependency 'rubocop-performance', '~> 1.5'
54
+ # spec.add_development_dependency 'simplecov', '~> 0.19.0'
52
55
  end
56
+ # rubocop:enable Gemspec/RequireMFA
@@ -1,9 +1,27 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'hashes_equal/enumerable_diff_displayer'
4
+ require 'hashes_equal/time_coarsener'
4
5
 
5
6
  module HashesEqual
6
7
  module EnumerableCompareHelper
8
+ def assert_time_aware_enumerable_equal(
9
+ expected,
10
+ actual,
11
+ time_granularity:,
12
+ verbose: true
13
+ )
14
+ time_coarsener = TimeCoarsener.new(time_granularity)
15
+ time_coarsened_expected = time_coarsener.call(expected)
16
+ time_coarsened_actual = time_coarsener.call(actual)
17
+
18
+ assert_enumerable_equal(
19
+ time_coarsened_expected,
20
+ time_coarsened_actual,
21
+ verbose: verbose
22
+ )
23
+ end
24
+
7
25
  def assert_enumerable_equal(expected, actual, verbose: true)
8
26
  displayable_diff = EnumerableDiffDisplayer.new(
9
27
  expected: expected,
@@ -10,35 +10,50 @@ module HashesEqual
10
10
 
11
11
  class UnprocessableHashdiff < ArgumentError; end
12
12
 
13
- def initialize(expected:, actual:)
13
+ def initialize(expected:, actual:, diff_options: {}, &comparison_block)
14
14
  @expected = expected
15
15
  @actual = actual
16
+ @diff_options = diff_options
17
+ @comparison_block = comparison_block
16
18
  assert_send :expected
17
19
  assert_send :actual
20
+ assert_send :diff_options
18
21
  check_args
19
22
  end
20
23
 
21
24
  def call
22
- compute_diff
25
+ diff # compute it
26
+
23
27
  ANSI.white do
24
28
  formatted_diff
25
29
  end
26
30
  end
27
31
 
32
+ def diff
33
+ @diff ||= compute_diff
34
+ end
35
+
28
36
  private
29
37
 
30
- attr_reader :expected, :actual, :diff
38
+ attr_reader(
39
+ :expected,
40
+ :actual,
41
+ :diff_options,
42
+ :comparison_block
43
+ )
31
44
 
32
45
  def check_args
33
46
  # Add specific checks if needed
34
47
  end
35
48
 
36
49
  def compute_diff
37
- @diff = perform_diff_computation
50
+ perform_diff_computation.tap do |res|
51
+ assert_kind_of Array, res
52
+ end
38
53
  end
39
54
 
40
55
  def perform_diff_computation
41
- Hashdiff.diff(expected, actual)
56
+ Hashdiff.diff(expected, actual, diff_options, &comparison_block)
42
57
  end
43
58
 
44
59
  def formatted_diff
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hashes_equal/hash_diff_displayer'
4
+
5
+ module HashesEqual
6
+ class HashAlmostDiffDisplayer < HashDiffDisplayer
7
+ class ToleranceMustBeNonNegativeNumeric < ArgumentError; end
8
+
9
+ def initialize(expected:, actual:, tolerance:, strict: false)
10
+ @tolerance = tolerance
11
+ @strict = strict
12
+
13
+ super(
14
+ expected: expected,
15
+ actual: actual,
16
+ diff_options: {
17
+ numeric_tolerance: tolerance,
18
+ strict: strict
19
+ }
20
+ )
21
+ end
22
+
23
+ private
24
+
25
+ attr_reader :tolerance, :strict
26
+
27
+ def check_args
28
+ super
29
+ return if tolerance.is_a?(Numeric) && tolerance >= 0
30
+
31
+ raise(
32
+ ToleranceMustBeNonNegativeNumeric,
33
+ "tolerance was #{tolerance.inspect}"
34
+ )
35
+ end
36
+ end
37
+ end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'hashes_equal/hash_diff_displayer'
4
+ require 'hashes_equal/hash_almost_diff_displayer'
5
+ require 'hashes_equal/hash_rounded_diff_displayer'
4
6
 
5
7
  module HashesEqual
6
8
  module HashCompareHelper
@@ -15,5 +17,30 @@ module HashesEqual
15
17
  assert expected == actual, displayable_diff
16
18
  end
17
19
  end
20
+
21
+ def assert_hashes_almost_equal(expected, actual, tolerance:, strict: false)
22
+ displayer = HashAlmostDiffDisplayer.new(
23
+ expected: expected,
24
+ actual: actual,
25
+ tolerance: tolerance,
26
+ strict: strict
27
+ )
28
+
29
+ result = displayer.call
30
+
31
+ assert displayer.diff.empty?, result
32
+ end
33
+
34
+ def assert_rounded_hashes_equal(expected, actual, precision:)
35
+ displayer = HashRoundedDiffDisplayer.new(
36
+ expected: expected,
37
+ actual: actual,
38
+ precision: precision
39
+ )
40
+
41
+ result = displayer.call
42
+
43
+ assert displayer.diff.empty?, result
44
+ end
18
45
  end
19
46
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'hashes_equal/hash_diff_displayer'
4
+
5
+ module HashesEqual
6
+ class HashRoundedDiffDisplayer < HashDiffDisplayer
7
+ class PrecisionMustBeNonNegativeInteger < ArgumentError; end
8
+
9
+ def initialize(expected:, actual:, precision:)
10
+ @precision = precision
11
+
12
+ super(expected: expected, actual: actual) do |_path, left, right|
13
+ next unless left.is_a?(Numeric) && right.is_a?(Numeric)
14
+
15
+ left.round(precision) == right.round(precision)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ attr_reader :precision
22
+
23
+ def check_args
24
+ super
25
+ return if precision.is_a?(Integer) && precision >= 0
26
+
27
+ raise(
28
+ PrecisionMustBeNonNegativeInteger,
29
+ "precision was #{precision.inspect}"
30
+ )
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,88 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ansi'
4
+ require 'assertable'
5
+ require 'hashdiff'
6
+
7
+ module HashesEqual
8
+ class TimeCoarsener
9
+ include Assertable
10
+
11
+ class InvalidTimeGranularity < ArgumentError; end
12
+
13
+ VALID_TIME_GRANULARITY = %i[
14
+ sec
15
+ usec
16
+ ].freeze
17
+
18
+ def initialize(time_granularity)
19
+ @time_granularity = time_granularity
20
+ assert_send :time_granularity
21
+ check_valid_granularity_for_time_aware_comparison
22
+ end
23
+
24
+ # Either an enumerable or a Time object
25
+ def call(object_to_convert)
26
+ @object_to_convert = object_to_convert
27
+ assert_send :object_to_convert
28
+
29
+ convert_object(object_to_convert)
30
+ end
31
+
32
+ private
33
+
34
+ attr_reader :object_to_convert, :time_granularity
35
+
36
+ def convert_object(object)
37
+ return convert_hash(object) if object.is_a?(Hash)
38
+ return convert_enumerable(object) if object.is_a?(Enumerable)
39
+ return convert_time(object) if object.is_a?(Time)
40
+
41
+ object
42
+ end
43
+
44
+ def convert_hash(hash_to_convert)
45
+ hash_to_convert.transform_values do |value|
46
+ convert_object(value)
47
+ end
48
+ end
49
+
50
+ def convert_enumerable(enumerable_to_convert)
51
+ enumerable_to_convert.map do |value|
52
+ convert_object value
53
+ end
54
+ end
55
+
56
+ def convert_time(time_to_convert)
57
+ send(coarsening_method_name, time_to_convert)
58
+ end
59
+
60
+ def coarsen_to_sec(time_to_convert)
61
+ Time.at(
62
+ time_to_convert.to_i
63
+ )
64
+ end
65
+
66
+ def coarsen_to_usec(time_to_convert)
67
+ Time.at(
68
+ time_to_convert.to_i, time_to_convert.usec, :usec
69
+ )
70
+ end
71
+
72
+ def coarsening_method_name
73
+ "coarsen_to_#{time_granularity}"
74
+ end
75
+
76
+ def check_valid_granularity_for_time_aware_comparison
77
+ return if VALID_TIME_GRANULARITY.include?(time_granularity.to_sym)
78
+
79
+ raise(
80
+ InvalidTimeGranularity,
81
+ [
82
+ "#{time_granularity.inspect} is not a valid time_granularity.",
83
+ "Valid values are: #{VALID_TIME_GRANULARITY.inspect}"
84
+ ].join(' ')
85
+ )
86
+ end
87
+ end
88
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HashesEqual
4
- VERSION = '0.1.3'
4
+ VERSION = '0.3.1'
5
5
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashes_equal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shippingbo
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2020-09-21 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ansi
@@ -58,180 +57,6 @@ dependencies:
58
57
  - - ">="
59
58
  - !ruby/object:Gem::Version
60
59
  version: 1.0.1
61
- - !ruby/object:Gem::Dependency
62
- name: bundler
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: '2.1'
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: 2.1.4
71
- type: :development
72
- prerelease: false
73
- version_requirements: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - "~>"
76
- - !ruby/object:Gem::Version
77
- version: '2.1'
78
- - - ">="
79
- - !ruby/object:Gem::Version
80
- version: 2.1.4
81
- - !ruby/object:Gem::Dependency
82
- name: byebug
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - "~>"
86
- - !ruby/object:Gem::Version
87
- version: '11.1'
88
- type: :development
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - "~>"
93
- - !ruby/object:Gem::Version
94
- version: '11.1'
95
- - !ruby/object:Gem::Dependency
96
- name: guard
97
- requirement: !ruby/object:Gem::Requirement
98
- requirements:
99
- - - "~>"
100
- - !ruby/object:Gem::Version
101
- version: '2.16'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- requirements:
106
- - - "~>"
107
- - !ruby/object:Gem::Version
108
- version: '2.16'
109
- - !ruby/object:Gem::Dependency
110
- name: guard-minitest
111
- requirement: !ruby/object:Gem::Requirement
112
- requirements:
113
- - - "~>"
114
- - !ruby/object:Gem::Version
115
- version: '2.4'
116
- type: :development
117
- prerelease: false
118
- version_requirements: !ruby/object:Gem::Requirement
119
- requirements:
120
- - - "~>"
121
- - !ruby/object:Gem::Version
122
- version: '2.4'
123
- - !ruby/object:Gem::Dependency
124
- name: minitest
125
- requirement: !ruby/object:Gem::Requirement
126
- requirements:
127
- - - "~>"
128
- - !ruby/object:Gem::Version
129
- version: '5.11'
130
- type: :development
131
- prerelease: false
132
- version_requirements: !ruby/object:Gem::Requirement
133
- requirements:
134
- - - "~>"
135
- - !ruby/object:Gem::Version
136
- version: '5.11'
137
- - !ruby/object:Gem::Dependency
138
- name: minitest-reporters
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - "~>"
142
- - !ruby/object:Gem::Version
143
- version: '1.4'
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - "~>"
149
- - !ruby/object:Gem::Version
150
- version: '1.4'
151
- - !ruby/object:Gem::Dependency
152
- name: mocha
153
- requirement: !ruby/object:Gem::Requirement
154
- requirements:
155
- - - "~>"
156
- - !ruby/object:Gem::Version
157
- version: '1.11'
158
- type: :development
159
- prerelease: false
160
- version_requirements: !ruby/object:Gem::Requirement
161
- requirements:
162
- - - "~>"
163
- - !ruby/object:Gem::Version
164
- version: '1.11'
165
- - !ruby/object:Gem::Dependency
166
- name: pry
167
- requirement: !ruby/object:Gem::Requirement
168
- requirements:
169
- - - "~>"
170
- - !ruby/object:Gem::Version
171
- version: '0.13'
172
- type: :development
173
- prerelease: false
174
- version_requirements: !ruby/object:Gem::Requirement
175
- requirements:
176
- - - "~>"
177
- - !ruby/object:Gem::Version
178
- version: '0.13'
179
- - !ruby/object:Gem::Dependency
180
- name: rake
181
- requirement: !ruby/object:Gem::Requirement
182
- requirements:
183
- - - "~>"
184
- - !ruby/object:Gem::Version
185
- version: '13.0'
186
- type: :development
187
- prerelease: false
188
- version_requirements: !ruby/object:Gem::Requirement
189
- requirements:
190
- - - "~>"
191
- - !ruby/object:Gem::Version
192
- version: '13.0'
193
- - !ruby/object:Gem::Dependency
194
- name: rubocop
195
- requirement: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - "~>"
198
- - !ruby/object:Gem::Version
199
- version: '0.85'
200
- type: :development
201
- prerelease: false
202
- version_requirements: !ruby/object:Gem::Requirement
203
- requirements:
204
- - - "~>"
205
- - !ruby/object:Gem::Version
206
- version: '0.85'
207
- - !ruby/object:Gem::Dependency
208
- name: rubocop-performance
209
- requirement: !ruby/object:Gem::Requirement
210
- requirements:
211
- - - "~>"
212
- - !ruby/object:Gem::Version
213
- version: '1.5'
214
- type: :development
215
- prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- requirements:
218
- - - "~>"
219
- - !ruby/object:Gem::Version
220
- version: '1.5'
221
- - !ruby/object:Gem::Dependency
222
- name: simplecov
223
- requirement: !ruby/object:Gem::Requirement
224
- requirements:
225
- - - "~>"
226
- - !ruby/object:Gem::Version
227
- version: 0.18.5
228
- type: :development
229
- prerelease: false
230
- version_requirements: !ruby/object:Gem::Requirement
231
- requirements:
232
- - - "~>"
233
- - !ruby/object:Gem::Version
234
- version: 0.18.5
235
60
  description: Provides an assertion to test for hashes equality.
236
61
  email:
237
62
  - tech@facilecomm.com
@@ -239,11 +64,13 @@ executables: []
239
64
  extensions: []
240
65
  extra_rdoc_files: []
241
66
  files:
67
+ - ".circleci/config.yml"
242
68
  - ".gitignore"
243
69
  - ".rubocop.yml"
244
70
  - ".ruby_version"
245
71
  - ".travis.yml"
246
72
  - CODE_OF_CONDUCT.md
73
+ - Dockerfile
247
74
  - Gemfile
248
75
  - Guardfile
249
76
  - LICENSE.txt
@@ -252,19 +79,22 @@ files:
252
79
  - Rakefile
253
80
  - bin/console
254
81
  - bin/setup
82
+ - docker-compose.yaml
255
83
  - hashes_equal.gemspec
256
84
  - lib/hashes_equal.rb
257
85
  - lib/hashes_equal/enumerable_compare_helper.rb
258
86
  - lib/hashes_equal/enumerable_diff_displayer.rb
259
87
  - lib/hashes_equal/generic_diff_displayer.rb
88
+ - lib/hashes_equal/hash_almost_diff_displayer.rb
260
89
  - lib/hashes_equal/hash_compare_helper.rb
261
90
  - lib/hashes_equal/hash_diff_displayer.rb
91
+ - lib/hashes_equal/hash_rounded_diff_displayer.rb
92
+ - lib/hashes_equal/time_coarsener.rb
262
93
  - lib/hashes_equal/version.rb
263
94
  homepage: https://github.com/Facilecomm/hashes_equal
264
95
  licenses:
265
96
  - MIT
266
97
  metadata: {}
267
- post_install_message:
268
98
  rdoc_options: []
269
99
  require_paths:
270
100
  - lib
@@ -279,8 +109,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
279
109
  - !ruby/object:Gem::Version
280
110
  version: '0'
281
111
  requirements: []
282
- rubygems_version: 3.0.1
283
- signing_key:
112
+ rubygems_version: 3.6.9
284
113
  specification_version: 4
285
114
  summary: MiniTest style assertion to compare hashes.
286
115
  test_files: []