- Change InspectionTree so that it no longer
instance_eval
s the block it takes. (#210)- If you have a custom InspectionTreeBuilder, you will need to change your
call
method so that instead of looking like this:it looks something like this instead:def call SuperDiff::ObjectInspection::InspectionTree.new do as_lines_when_rendering_to_lines(collection_bookend: :open) do add_text object.inspect end end end
Note that the following methods yield a new InspectionTree, so the tree needs to be given a new name each time. It is conventional to usedef call SuperDiff::ObjectInspection::InspectionTree.new do |t1| t1.as_lines_when_rendering_to_lines(collection_bookend: :open) do |t2| t2.add_text object.inspect end end end
t1
,t2
, etc.:as_lines_when_rendering_to_lines
as_prefix_when_rendering_to_lines
as_prelude_when_rendering_to_lines
as_single_line
nested
only_when
when_empty
when_non_empty
when_rendering_to_lines
when_rendering_to_string
- If you have a custom InspectionTreeBuilder, you will need to change your
- Add inspector for RSpec describable matchers not otherwise handled by an explicit inspector. (#203, #219)
- Support diffing date-like objects, e.g.
Date
vs.Date
orDate
vs.DateTime
. (#198)
- Add inspector for ActiveSupport::OrderedOptions.
(#199)
- This prevents the gem from raising an error when the expected value is a
Rails response object, e.g.
expect(response).to be_forbidden
.
- This prevents the gem from raising an error when the expected value is a
Rails response object, e.g.
- Include
extra_failure_lines
from RSpec metadata in failure output. (#208) - Fix
match_array
so that it truly accepts a non-array argument, to match RSpec behavior. (#213) - Fix
raise_error
so that it accepts an RSpec matcher argument. (#214)
- Improve wording in
raise_error
failure messages. (#218)
This release features the following contributors:
Thank you!
- Drop support for Ruby 2.5, 2.6, and 2.7 as well as Rails 5.0, 5.1, and 5.2, as they have reached (or are about to reach) end-of-life. To use this gem, you must use at least Ruby 3.x, and if you're using Rails, Rails 6.x. (#187, #190)
- Fix diffing logic for
include
matcher so that it knows how to compare fuzzy matcher objects with other kinds of objects. (#156) - Add a
key_enabled
configuration option for disabling the key/legend in the diff output. (#166) - Add a
color_enabled
configuration option for disabling color. (#138) - Update
super_diff/rails
(and, by extension,super_diff/rspec-rails
) so that the ActiveRecord-specific integration isn't loaded if ActiveRecord isn't available. (#188)
- Fix diff produced when comparing two floats (e.g.
expect(value).to eq(1.0)
) so that it does not blow up with a NoMethodError (#146)
- Make
SuperDiff::VERSION
accessible without requiringsuper_diff/version
(#147)
- Diff formatters are now gone in favor of operation tree flatteners. If you
have a custom diff formatter, you will want to inherit from
SuperDiff::OperationTreeFlatteners::Base (or an appropriate subclass).
Additionally, the
add_extra_diff_formatter_class
configuration option has disappeared; instead, operation tree classes are expected to have anoperation_tree_flattener_class
method, which should return your custom operation tree flattener class. (#91)
-
Add the ability to compress long diffs by eliding sections of unchanged data (data which is present in both "expected" and "actual" values). This functionality is not enabled by default; rather, you will need to activate it. At a minimum, you will want to add this to your spec helper (or a support file if you so desire):
SuperDiff.configure { |config| config.diff_elision_enabled = true }
By default the elision will be pretty aggressive, but if you want to preserve more of the unchanged lines in the diff, you can set
diff_elision_maximum
:SuperDiff.configure do |config| config.diff_elision_enabled = true config.diff_elision_maximum = 10 end
Here, the gem will try to keep at least 10 unchanged lines in between changed lines.
(#91)
-
Update inspection of Doubles to include stubbed methods and their values. (#91)
- Change how objects are inspected on a single line so that instance variables are always sorted. (#91)
- Make a tweak to how hashes are presented in diffs and inspections: a hash that has a mixture of symbols and strings will be presented as though all keys are strings (i.e. hashrocket syntax). (#91)
-
Add support for
hash_including
,array_including
,kind_of
, andinstance_of
, which come fromrspec-mocks
. (#128) -
Update how Time-like values are displayed in diffs to include subseconds so that it is easy to tell the difference between two times that are extremely close to each other. (#130)
- Fix comparison involving hashes to prevent a case where the same key would show up twice in the diff (one as a "deleted" version and another as an "unchanged" version). (#129)
-
Rename SuperDiff::ObjectInspection.inspect to something less collision-y so that it can be inspected in IRB sessions. (#123)
-
Silence warnings. (#124)
- Fix compatibility issues with newer versions of
rspec-rails
which prevented the gem from being loaded. (#121)
-
You can now customize the colors that SuperDiff uses by adding this to your test setup:
SuperDiff.configure do |config| config.actual_color = :green config.expected_color = :red config.border_color = :yellow config.header_color = :yellow end
-
Ruby 3.0 is now supported. (#118)
- Resolve compatibility issues with RSpec 3.10. (#114)
- Fix diffs involving
contain_exactly
anda_collection_containing_exactly
so that if there are extra items in the actual value, they are shown with+
s. (#106)
- Fix reliability issues with CI.
- Fix
rake spec
so that it works when run locally again.
- Fix
match_array
so that it works when given a string. (#110)
- Include the license in the gemspec so that it is visible via tools such as
license_finder
. (#111)
- Add missing standard library requires. (#98)
- Drop support for Ruby 2.4.
- Add dependency on
attr_extras
back as it was mistakenly removed in the previous release. (#92)
-
Do some reorganizing and rename some concepts in the code: "operational sequencer" changes to "operation tree builder" and "operation sequence" changes to "operation tree". Although super_diff is not yet at 1.0, this does result in breaking changes to the API, so:
-
If you are inheriting from
SuperDiff::OperationalSequencers::*
, you will want to now inherit fromSuperDiff::OperationTreeBuilders::*
. -
If you are inheriting from
SuperDiff::OperationSequence::*
, you will want to now inherit fromSuperDiff::OperationTrees::*
. -
If you are configuring the gem by saying:
SuperDiff::RSpec.configuration do |config| config.add_extra_operational_sequencer_class(SomeClass) config.add_extra_operation_sequence_class(SomeClass) end
you will want to change this to:
SuperDiff::RSpec.configuration do |config| config.add_extra_operation_tree_builder_class(SomeClass) config.add_extra_operation_tree_class(SomeClass) end
-
- Add inspectors for
an_instance_of
,a_kind_of
, anda_value_within
. (#74)
- Get rid of warnings produced on Ruby 2.7.1. (#71)
- Fix diff produced by (incorrect) usage of
have_attributes
with a hash as the actual value. (#76)
-
Move configuration so that instead of using
SuperDiff::RSpec.configure do |config| # ... end
you can now say:
SuperDiff.configure do |config| # ... end
(#80)
-
Update diff between two hashes so that original ordering of keys is preserved. (#81)
- Fix
raise_error
when used with a regex. (#72)
- Fix multiple exception failures so that they work again. (#66)
- Support
match_array
matcher. - Support
has_*
matcher. - Be smarter about highlighting first line of failure message.
- Fix diffing of ActiveRecord objects in nested objects.
- Remove explicit dependency on ActiveRecord. (#64)
- Add useful diff representation of Time-like values. (#61)
- Fix tests so they run even with a global
--color
setting. (#62)
Lots of fixes and new features!
- Fix how objects are displayed in diff output:
- Fix output of diffs so that objects are deeply pretty printed.
- Use Object#inspect as a fallback for single-line object inspection.
- Support diffing ordinary, "non-custom" objects (those that do not respond to
attributes_for_super_diff
). - Add custom coloring/messaging to
include
matcher. - Support pretty-printing
a_hash_including
objects and diffing them with hashes. - Support pretty-printing
a_collection_including
objects and diffing them with arrays. - Add custom coloring/messaging to
have_attributes
matcher. - Support pretty-printing
an_object_having_attributes
objects and diffing them with other objects. - Add a key/legend to the diff output so it's less confusing.
- Add custom coloring/messaging to
respond_to
matcher. - Add custom coloring/messaging to
raise_error
matcher. - Fix output from diff between a multi-line string with a single-line (and vice versa).
- Make sure that RSpec double objects are pretty-printed correctly Add custom
coloring/messaging to
contain_exactly
. - Support pretty-printing
a_collection_containing_exactly
objects and diffing them with other arrays. - Add support for diffing ActiveRecord models.
- Add support for diffing ActiveRecord::Relation objects with arrays.
- Fix output for diff between two completely different kinds of objects
- Support pretty-printing HashWithIndifferentAccess objects and diffing them with hashes.
- Detect and handle recursive data structures.
- Automatically disable color output when running tests non-interactively (e.g. on a CI service).
- Add custom coloring/messaging to
be_*
matcher. - Fix representation of empty arrays, hashes, and objects in diffs so that they are always on single lines.
- Change colors in diffs and messages from red/green to magenta/yellow.
- Use bold to highlight "Failure/Error" instead of white so that output looks good on a light terminal color scheme
- Fix coloring for unhandled errors so that the whole message isn't colored in red, but only the first line.
Initial version!
- Support diffing primitives.
- Support diffing strings (single-line and multi-line).
- Support diffing arrays (simple and complex).
- Support diffing "custom objects" (i.e. objects that respond to
attributes_for_super_diff
). - Add basic integration with RSpec.