specdiff 0.3.0.pre.rc1 → 0.3.0.rc2

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: 68cf98631e494fb5f016c0b3632cce58f616dad54ba11c782b37e3de4f2b36c9
4
- data.tar.gz: b97fee8a8e586b383a71bf0dcdcb32be7cf1c135356a90ec2ae7488fc2082071
3
+ metadata.gz: 8a33e470568352bc5fb3079f5aa3cf9933f5c02d7e28aae98847b9165a0d6a86
4
+ data.tar.gz: ad35a03f7da4fee967890515447eb0d2a2a4ec927d78d2458198177166aa43c6
5
5
  SHA512:
6
- metadata.gz: b374cadd1aa564cf8252c4b3d6c4ca2be952b147891cdbec9f0799383349bf5bcf61a1ef94979bc2b1f7dbe4d850e586d4c11f1271c74a14dc9be09cffc4e184
7
- data.tar.gz: 8379b0c263ae20900ec31b63ea9600e3c15cef8fe9b597c1e1349a708c323d03ee8bfaa46d6f6eeb666e2af0ee751e7ef2cd47917e927eeceb48a7f076a1e126
6
+ metadata.gz: 6fa7b514db6ccb4a7216f317184e6de0dae0fb8ad762222c4d09ee589300ae4d71a38549710ceb8191e5276958fcdfc27e65dcb50f0353e64065492c58a28b8a
7
+ data.tar.gz: bf66592a0f9d787058dcdd3b27910863abdc70cdeb177ddfb84d6ddfa9973adee345fa8c90f821f6a8dbab94898db375414eeef8e9a306b532b9aa472f615280
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ # local installed gem bundles, ala node_modules for npm
14
+ .gem-bundle/
data/CHANGELOG.md CHANGED
@@ -7,7 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
- ## [0.3.0-rc1]
10
+ ## [0.3.0.rc2] - 2024-04-05
11
+
12
+ ### Changed
13
+
14
+ - Rework how hashdiff's output gets printed.
15
+ - Rework switching heuristic between text diff/hashdiff in hash differ.
16
+
17
+ ### Fixed
18
+
19
+ - The RSpec integration now inspects hashes and arrays recursively. (Like rspec does by default)
20
+ - RSpec integration no longer breaks description output of matchers when using multi matchers (like .all or .and)
21
+ - The hash differ now deals with recursive hashes and arrays
22
+ - RSpec integration no longer breaks description output of matchers that are part of a diff inside an array or hash. (like when doing `match([have_attributes(...)])`)
23
+
24
+ ## [0.3.0-rc1] - 2024-04-02
11
25
 
12
26
  ### Added
13
27
 
data/README.md CHANGED
@@ -134,6 +134,7 @@ High level description of the heuristic specdiff implements
134
134
  - [ ] unit tests are passing (`$ bundle exec rake test`)
135
135
  - [ ] linter is happy (`$ bundle exec rake lint`)
136
136
  - [ ] `examples/` look good
137
+ - [ ] check the package size using `$ bundle exec inspect_build`, make sure you haven't added any large files by accident
137
138
  - [ ] update the version number in `version.rb`
138
139
  - [ ] make sure the `examples/` `Gemfile.lock` files are updated (run bundle install)
139
140
  - [ ] make sure `Gemfile.lock` is updated (run bundle install)
@@ -142,8 +143,6 @@ High level description of the heuristic specdiff implements
142
143
  - [ ] make sure the pipeline is green
143
144
  - [ ] `$ bundle exec rake release`
144
145
 
145
- To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
146
-
147
146
  ## Contributing
148
147
 
149
148
  Bug reports and pull requests are welcome on GitHub at https://github.com/odinhb/specdiff.
@@ -80,9 +80,9 @@ private
80
80
  elsif a.type == :text && b.type == :text
81
81
  Specdiff::Differ::Text
82
82
  elsif a.type == :hash && b.type == :hash
83
- Specdiff::Differ::Hashdiff
83
+ Specdiff::Differ::Hash
84
84
  elsif a.type == :array && b.type == :array
85
- Specdiff::Differ::Hashdiff
85
+ Specdiff::Differ::Hash
86
86
  else
87
87
  Specdiff::Differ::NotFound
88
88
  end
data/lib/specdiff/diff.rb CHANGED
@@ -19,12 +19,15 @@
19
19
  end
20
20
 
21
21
  def inspect
22
- if empty?
23
- "<Specdiff::Diff (empty)>"
24
- elsif raw.respond_to?(:bytesize)
25
- "<Specdiff::Diff w/ #{raw&.bytesize || 0} bytes of #raw diff>"
26
- else
27
- "<Specdiff::Diff #{raw.inspect}>"
28
- end
22
+ raw_diff = if empty?
23
+ "empty"
24
+ elsif differ == ::Specdiff::Differ::Text
25
+ bytes = raw&.bytesize || 0
26
+ "#{bytes} bytes of #raw diff"
27
+ else
28
+ "#{raw.inspect}"
29
+ end
30
+
31
+ "<Specdiff::Diff (#{a.type}/#{b.type}) (#{differ}) (#{raw_diff})>"
29
32
  end
30
33
  end
@@ -1,12 +1,15 @@
1
1
  require "hashdiff"
2
2
 
3
- class Specdiff::Differ::Hashdiff
3
+ class Specdiff::Differ::Hash
4
4
  extend ::Specdiff::Colorize
5
5
 
6
- VALUE_CHANGE_PERCENTAGE_THRESHOLD = 0.2
7
- TOTAL_CHANGES_FOR_GROUPING_THRESHOLD = 9
6
+ # The percentage of changes that must (potentially) be a key rename in a hash
7
+ # for text diffing to kick in. Expressed as a fraction of 1.
8
+ KEY_CHANGE_PERCENTAGE_THRESHOLD = 0.8
8
9
 
9
- NEWLINE = "\n"
10
+ # The number of changes that must be detected by hashdiff before we print some
11
+ # extra newlines to better group extra/missing/new_values visually.
12
+ TOTAL_CHANGES_FOR_GROUPING_THRESHOLD = 9
10
13
 
11
14
  def self.diff(a, b)
12
15
  # array_path: true returns the path as an array, which differentiates
@@ -24,54 +27,60 @@ class Specdiff::Differ::Hashdiff
24
27
 
25
28
  change_percentage = _calculate_change_percentage(hashdiff_diff)
26
29
 
27
- if change_percentage >= VALUE_CHANGE_PERCENTAGE_THRESHOLD
30
+ if change_percentage <= KEY_CHANGE_PERCENTAGE_THRESHOLD
28
31
  hashdiff_diff
29
32
  else
30
33
  a_text = ::Specdiff.hashprint(a.value)
31
34
  b_text = ::Specdiff.hashprint(b.value)
32
35
 
33
- diff = ::Specdiff.diff(a_text, b_text)
36
+ text_diff = ::Specdiff.diff(a_text, b_text)
34
37
 
35
- if diff.empty?
38
+ if text_diff.empty?
36
39
  []
37
40
  else
38
- diff.a.type = a.type
39
- diff.b.type = b.type
40
-
41
- diff
41
+ text_diff
42
42
  end
43
43
  end
44
44
  end
45
45
 
46
46
  def self._calculate_change_percentage(hashdiff_diff)
47
- value_change_count = hashdiff_diff.count { |element| element[0] == "~" }
48
- addition_count = hashdiff_diff.count { |element| element[0] == "+" }
49
- deletion_count = hashdiff_diff.count { |element| element[0] == "-" }
47
+ extra_keys = hashdiff_diff.count { |element| element[0] == "+" }
48
+ missing_keys = hashdiff_diff.count { |element| element[0] == "-" }
49
+ new_values = hashdiff_diff.count { |element| element[0] == "~" }
50
50
  # puts "hashdiff_diff: #{hashdiff_diff.inspect}"
51
- # puts "value_change_count: #{value_change_count.inspect}"
52
- # puts "addition_count: #{addition_count.inspect}"
53
- # puts "deletion_count: #{deletion_count.inspect}"
54
-
55
- total_number_of_changes = [
56
- value_change_count,
57
- addition_count,
58
- deletion_count,
59
- ].sum
60
-
61
- change_fraction = Rational(value_change_count, total_number_of_changes)
62
- change_percentage = change_fraction.to_f
63
- # puts "change_fraction: #{change_fraction.inspect}"
64
- # puts "change_percentage: #{change_percentage.inspect}"
65
-
66
- change_percentage
51
+ # puts "extra_keys: #{extra_keys.inspect}"
52
+ # puts "missing_keys: #{missing_keys.inspect}"
53
+ # puts "new_values: #{new_values.inspect}"
54
+
55
+ potential_changed_keys = [extra_keys, missing_keys].min
56
+ adjusted_extra_keys = extra_keys - potential_changed_keys
57
+ adjusted_missing_keys = missing_keys - potential_changed_keys
58
+ # puts "potential_changed_keys: #{potential_changed_keys.inspect}"
59
+ # puts "adjusted_extra_keys: #{adjusted_extra_keys.inspect}"
60
+ # puts "adjusted_missing_keys: #{adjusted_missing_keys.inspect}"
61
+
62
+ non_changed_keys = adjusted_extra_keys + adjusted_missing_keys + new_values
63
+ total_changes = non_changed_keys + potential_changed_keys
64
+ # puts "non_changed_keys: #{non_changed_keys.inspect}"
65
+ # puts "total_changes: #{total_changes.inspect}"
66
+
67
+ key_change_fraction = Rational(potential_changed_keys, total_changes)
68
+ key_change_percentage = key_change_fraction.to_f
69
+ # puts "key_change_fraction: #{key_change_fraction.inspect}"
70
+ # puts "key_change_percentage: #{key_change_percentage.inspect}"
71
+
72
+ key_change_percentage
67
73
  end
68
74
 
69
75
  def self.empty?(diff)
70
76
  diff.raw.empty?
71
77
  end
72
78
 
79
+ NEWLINE = "\n"
80
+
73
81
  def self.stringify(diff)
74
82
  result = +""
83
+ return result if diff.empty?
75
84
 
76
85
  total_changes = diff.raw.size
77
86
  group_with_newlines = total_changes >= TOTAL_CHANGES_FOR_GROUPING_THRESHOLD
@@ -92,6 +101,9 @@ class Specdiff::Differ::Hashdiff
92
101
  additions = changes_grouped_by_type["+"] || []
93
102
  value_changes = changes_grouped_by_type["~"] || []
94
103
 
104
+ result << "@@ +#{additions.size}/-#{deletions.size}/~#{value_changes.size} @@"
105
+ result << NEWLINE
106
+
95
107
  deletions.each do |change|
96
108
  value = change[2]
97
109
  path = _stringify_path(change[1])
@@ -108,7 +120,7 @@ class Specdiff::Differ::Hashdiff
108
120
  value = change[2]
109
121
  path = _stringify_path(change[1])
110
122
 
111
- result << " new key: #{path} (#{::Specdiff.diff_inspect(value)})"
123
+ result << " extra key: #{path} (#{::Specdiff.diff_inspect(value)})"
112
124
  result << NEWLINE
113
125
  end
114
126
 
@@ -123,17 +135,19 @@ class Specdiff::Differ::Hashdiff
123
135
 
124
136
  from_inspected = ::Specdiff.diff_inspect(from)
125
137
  to_inspected = ::Specdiff.diff_inspect(to)
126
- result << "changed key: #{path} (#{from_inspected} -> #{to_inspected})"
138
+ result << " new value: #{path} (#{from_inspected} -> #{to_inspected})"
127
139
  result << NEWLINE
128
140
  end
129
141
 
130
142
  colorize_by_line(result) do |line|
131
143
  if line.start_with?("missing key:")
132
144
  red(line)
133
- elsif line.start_with?(/\s+new key:/)
145
+ elsif line.start_with?(" extra key:")
134
146
  green(line)
135
- elsif line.start_with?("changed key:")
147
+ elsif line.start_with?(" new value:")
136
148
  yellow(line)
149
+ elsif line.start_with?("@@")
150
+ cyan(line)
137
151
  else
138
152
  reset_color(line)
139
153
  end
@@ -4,4 +4,4 @@ end
4
4
  # require only the builtin differs, plugins are optionally loaded later
5
5
  require_relative "differ/not_found"
6
6
  require_relative "differ/text"
7
- require_relative "differ/hashdiff"
7
+ require_relative "differ/hash"
@@ -13,6 +13,7 @@ class Specdiff::Hashprint
13
13
  NEWLINE = "\n".freeze
14
14
 
15
15
  def call(thing)
16
+ @recursion_trail = []
16
17
  @indentation_level = 0
17
18
  @indentation_per_level = SPACE * INDENTATION_SPACES
18
19
  @indent = ""
@@ -41,17 +42,6 @@ private
41
42
  recalculate_indent
42
43
  end
43
44
 
44
- def with_indentation_level(temporary_level)
45
- old_level = @indentation_level
46
- @indentation_level = temporary_level
47
- recalculate_indent
48
-
49
- yield
50
-
51
- @indentation_level = old_level
52
- recalculate_indent
53
- end
54
-
55
45
  def skip_next_opening_indent
56
46
  @skip_next_opening_indent = true
57
47
 
@@ -67,11 +57,24 @@ private
67
57
  end
68
58
  end
69
59
 
60
+ def track_recursion(thing)
61
+ @recursion_trail.push(thing)
62
+ result = yield
63
+ @recursion_trail.pop
64
+ result
65
+ end
66
+
67
+ def deja_vu?(current_place)
68
+ @recursion_trail.any? { |previous_place| previous_place == current_place }
69
+ end
70
+
70
71
  # #=== allows us to rely on Module implementing #=== instead of relying on the
71
72
  # thing (which could be any kind of wacky object) having to implement
72
73
  # #is_a? or #kind_of?
73
74
  def output(thing)
74
- if Hash === thing
75
+ if deja_vu?(thing)
76
+ output_deja_vu(thing)
77
+ elsif Hash === thing
75
78
  output_hash(thing)
76
79
  elsif Array === thing
77
80
  output_array(thing)
@@ -89,10 +92,10 @@ private
89
92
  @output << @indent unless this_indent_should_be_skipped
90
93
 
91
94
  @output << HASH_OPEN
92
- # unless hash.empty?
93
- @output << NEWLINE
95
+ @output << NEWLINE
94
96
 
95
- increase_indentation
97
+ increase_indentation
98
+ track_recursion(hash) do
96
99
  hash.each do |key, value|
97
100
  @output << @indent
98
101
 
@@ -113,11 +116,10 @@ private
113
116
  @output << COMMA
114
117
  @output << NEWLINE
115
118
  end
116
- decrease_indentation
117
-
118
- @output << @indent
119
- # end
119
+ end
120
+ decrease_indentation
120
121
 
122
+ @output << @indent
121
123
  @output << HASH_CLOSE
122
124
  end
123
125
 
@@ -128,21 +130,19 @@ private
128
130
  @output << @indent unless this_indent_should_be_skipped
129
131
 
130
132
  @output << ARRAY_OPEN
133
+ @output << NEWLINE
131
134
 
132
- # unless array.empty?
133
- @output << NEWLINE
134
-
135
- increase_indentation
135
+ increase_indentation
136
+ track_recursion(array) do
136
137
  array.each do |element|
137
138
  output(element)
138
139
  @output << COMMA
139
140
  @output << NEWLINE
140
141
  end
141
- decrease_indentation
142
-
143
- @output << @indent
144
- # end
142
+ end
143
+ decrease_indentation
145
144
 
145
+ @output << @indent
146
146
  @output << ARRAY_CLOSE
147
147
  end
148
148
 
@@ -151,4 +151,24 @@ private
151
151
 
152
152
  @output << ::Specdiff.diff_inspect(thing)
153
153
  end
154
+
155
+ # The stdlib inspect code returns this when you have recursive structures.
156
+ STANDARD_INSPECT_RECURSIVE_ARRAY = "[...]".freeze
157
+ STANDARD_INSPECT_RECURSIVE_HASH = "{...}".freeze
158
+
159
+ def output_deja_vu(thing)
160
+ @output << @indent unless this_indent_should_be_skipped
161
+
162
+ case thing
163
+ when Array
164
+ # "#<Array ##{thing.object_id}>"
165
+ @output << STANDARD_INSPECT_RECURSIVE_ARRAY
166
+ when Hash
167
+ # "#<Hash ##{thing.object_id}>"
168
+ @output << STANDARD_INSPECT_RECURSIVE_HASH
169
+ else
170
+ # this should never happen
171
+ raise "Specdiff::Hashprint missing deja vu for: #{thing.inspect}"
172
+ end
173
+ end
154
174
  end
@@ -6,11 +6,17 @@ class Specdiff::Inspect
6
6
  new.call(...)
7
7
  end
8
8
 
9
+ def initialize
10
+ @recursion_trail = []
11
+ end
12
+
9
13
  # #=== allows us to rely on Module implementing #=== instead of relying on the
10
14
  # thing (which could be any kind of wacky object) having to implement
11
15
  # #is_a? or #kind_of?
12
16
  def call(thing)
13
- if Time === thing
17
+ if Hash === thing || Array === thing
18
+ recursive_replace_inspect(thing).inspect
19
+ elsif Time === thing
14
20
  "#<Time: #{thing.strftime(TIME_FORMAT)}>"
15
21
  elsif DateTime === thing
16
22
  "#<DateTime: #{thing.rfc3339}>"
@@ -18,6 +24,12 @@ class Specdiff::Inspect
18
24
  "#<Date: #{thing.strftime(DATE_FORMAT)}>"
19
25
  elsif defined?(BigDecimal) && BigDecimal === thing
20
26
  "#<BigDecimal: #{thing.to_s('F')}>"
27
+ elsif rspec_matcher?(thing)
28
+ # Turns out rspec depends on the recursion in its inspection logic to
29
+ # print the "description" of rspec matchers, in situations such as when
30
+ # using multi-matchers (.all, .or or .and), or when nesting them inside
31
+ # eachother (such as match([have_attributes(...)])).
32
+ thing.description
21
33
  else
22
34
  begin
23
35
  thing.inspect
@@ -27,6 +39,12 @@ class Specdiff::Inspect
27
39
  end
28
40
  end
29
41
 
42
+ private def rspec_matcher?(thing)
43
+ defined?(::Specdiff::RSpecIntegration) &&
44
+ ::RSpec::Support.is_a_matcher?(thing) &&
45
+ thing.respond_to?(:description)
46
+ end
47
+
30
48
  private def inspect_anyway(uninspectable)
31
49
  "#<uninspectable #{class_of(uninspectable)}>"
32
50
  end
@@ -38,4 +56,79 @@ class Specdiff::Inspect
38
56
  singleton_class.ancestors
39
57
  .find { |ancestor| !ancestor.equal?(singleton_class) }
40
58
  end
59
+
60
+ # recursion below
61
+
62
+ InspectWrapper = Struct.new(:text) do
63
+ def inspect
64
+ text
65
+ end
66
+ end
67
+
68
+ private def recursive_replace_inspect(thing)
69
+ if deja_vu?(thing)
70
+ # I've just been in this place before
71
+ # And I know it's my time to go...
72
+ return InspectWrapper.new(inspect_deja_vu(thing))
73
+ end
74
+
75
+ case thing
76
+ when Array
77
+ track_recursion(thing) do
78
+ thing.map { |element| recursive_replace_inspect(element) }
79
+ end
80
+ when Hash
81
+ track_recursion(thing) do
82
+ new_hash = {}
83
+
84
+ thing.each do |key, value|
85
+ new_hash[recursive_replace_inspect(key)] = recursive_replace_inspect(value)
86
+ end
87
+
88
+ new_hash
89
+ end
90
+ else
91
+ wrap_inspect(thing)
92
+ end
93
+ rescue SystemStackError => e
94
+ wrap_inspect(
95
+ thing,
96
+ text: "#{e.class}: #{e.message}\n\n" \
97
+ "encountered when inspecting #{thing.inspect}"
98
+ )
99
+ end
100
+
101
+ private def track_recursion(thing)
102
+ @recursion_trail.push(thing)
103
+ result = yield
104
+ @recursion_trail.pop
105
+ result
106
+ end
107
+
108
+ private def deja_vu?(current_place)
109
+ @recursion_trail.any? { |previous_place| previous_place == current_place }
110
+ end
111
+
112
+ private def wrap_inspect(thing, text: :_use_diff_inspect)
113
+ text = call(thing) if text == :_use_diff_inspect
114
+ InspectWrapper.new(text)
115
+ end
116
+
117
+ # The stdlib inspect code returns this when you have recursive structures.
118
+ STANDARD_INSPECT_RECURSIVE_ARRAY = "[...]".freeze
119
+ STANDARD_INSPECT_RECURSIVE_HASH = "{...}".freeze
120
+
121
+ private def inspect_deja_vu(thing)
122
+ case thing
123
+ when Array
124
+ # "#<Array ##{thing.object_id}>"
125
+ STANDARD_INSPECT_RECURSIVE_ARRAY
126
+ when Hash
127
+ # "#<Hash ##{thing.object_id}>"
128
+ STANDARD_INSPECT_RECURSIVE_HASH
129
+ else
130
+ # this should never happen
131
+ raise "Specdiff::Inspect missing deja vu for: #{thing.inspect}"
132
+ end
133
+ end
41
134
  end
@@ -1,3 +1,6 @@
1
+ raise "rspec must be required before specdiff/rspec!" unless defined?(RSpec)
2
+ raise "RSpec::Support is missing????" unless defined?(RSpec::Support)
3
+
1
4
  class RSpec::Support::Differ
2
5
  alias old_diff diff
3
6
 
@@ -14,20 +17,10 @@ end
14
17
  # This stops rspec from truncating strings w/ ellipsis, as well as making the
15
18
  # "inspect" output consistent with specdiff's.
16
19
  class RSpec::Support::ObjectFormatter
17
- class SpecdiffCustomInspector < BaseInspector
18
- def self.can_inspect?(_)
19
- true
20
- end
21
-
22
- def inspect
23
- ::Specdiff.diff_inspect(object)
24
- end
25
- end
26
-
27
- remove_const("INSPECTOR_CLASSES")
28
- const_set("INSPECTOR_CLASSES", [SpecdiffCustomInspector])
29
-
30
20
  def format(object)
31
21
  ::Specdiff.diff_inspect(object)
32
22
  end
33
23
  end
24
+
25
+ # marker for successfully loading this integration
26
+ class Specdiff::RSpecIntegration; end # rubocop: disable Lint/EmptyClass
@@ -1,3 +1,3 @@
1
1
  module Specdiff
2
- VERSION = "0.3.0-rc1"
2
+ VERSION = "0.3.0.rc2"
3
3
  end
@@ -1,5 +1,4 @@
1
- require "hashdiff"
2
- require "json"
1
+ raise "webmock must be required before specdiff/webmock" unless defined?(WebMock)
3
2
 
4
3
  module WebMock
5
4
  class RequestBodyDiff
@@ -39,3 +38,6 @@ module WebMock
39
38
  end
40
39
  end
41
40
  end
41
+
42
+ # marker for successfully loading this integration
43
+ class Specdiff::WebmockIntegration; end # rubocop: disable Lint/EmptyClass
data/specdiff.gemspec CHANGED
@@ -17,13 +17,12 @@ Gem::Specification.new do |spec|
17
17
  spec.metadata["source_code_uri"] = spec.homepage
18
18
  spec.metadata["changelog_uri"] = "#{spec.homepage}/CHANGELOG.md"
19
19
 
20
- # Specify which files should be added to the gem when it is released.
21
- # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
- spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
- `git ls-files -z`.split("\x0").reject do |f|
24
- (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
25
- end
26
- end
20
+ spec.files =
21
+ Dir["*.gemspec"] +
22
+ Dir["*.md"] +
23
+ Dir["*.txt"] +
24
+ Dir[".gitignore"] +
25
+ Dir["lib/**/*.rb"]
27
26
  spec.require_paths = ["lib"]
28
27
 
29
28
  spec.add_dependency "hashdiff", "~> 1.0"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specdiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.pre.rc1
4
+ version: 0.3.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Odin Heggvold Bekkelund
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-02 00:00:00.000000000 Z
11
+ date: 2024-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hashdiff
@@ -45,26 +45,10 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - ".rspec"
49
- - ".rubocop.yml"
50
- - ".tool-versions"
48
+ - ".gitignore"
51
49
  - CHANGELOG.md
52
- - Gemfile
53
- - Gemfile.lock
54
50
  - LICENSE.txt
55
51
  - README.md
56
- - Rakefile
57
- - assets/webmock_json_with_specdiff.png
58
- - assets/webmock_text_with_specdiff.png
59
- - examples/rspec/.rspec
60
- - examples/rspec/Gemfile
61
- - examples/rspec/Gemfile.lock
62
- - examples/rspec/spec/example_spec.rb
63
- - examples/rspec/spec/spec_helper.rb
64
- - examples/webmock/Gemfile
65
- - examples/webmock/Gemfile.lock
66
- - examples/webmock/json.rb
67
- - examples/webmock/text.rb
68
52
  - glossary.txt
69
53
  - lib/specdiff.rb
70
54
  - lib/specdiff/colorize.rb
@@ -72,7 +56,7 @@ files:
72
56
  - lib/specdiff/config.rb
73
57
  - lib/specdiff/diff.rb
74
58
  - lib/specdiff/differ.rb
75
- - lib/specdiff/differ/hashdiff.rb
59
+ - lib/specdiff/differ/hash.rb
76
60
  - lib/specdiff/differ/not_found.rb
77
61
  - lib/specdiff/differ/text.rb
78
62
  - lib/specdiff/hashprint.rb
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper