Releases: splitwise/super_diff
0.14.0
What's Changed
Features
- Improve inspection of Module. #263 by @phorsuedzie
- Fix multiline string diff with blank lines. #266
- Improve inspection of Range objects. #267 by @lucaseras
- Skip diffing of more un-diffable types. #273 by @lucaseras
Other changes
- Switch from Prettier to Rubocop. #269
- Fix outdated reference in documentation. #270 by @emmanuel-ferdman
- Replace Zeus with forking strategy for tests. #271
New Contributors
- @phorsuedzie made their first contribution in #263
- @emmanuel-ferdman made their first contribution in #270
Full Changelog: v0.13.0...v0.14.0
0.13.0
Features
- Add better support for Data object diffing. #259
- Fall back on RSpec color mode when
SuperDiff.configuration.color_enabled
is unspecified or nil. #261
Breaking changes
- Removed several
SuperDiff::Csi
methods. This will break any code that uses those parts of theSuperDiff::Csi
(which is private in general). SuperDiff.configuration.color_enabled = nil
used to disable color output. It now allows SuperDiff to determine whether to colorize output based on the environment (namely RSpec color mode and whether stdout is a TTY).
0.12.1
Note that since 0.12.0 has been yanked, changes for this version are listed alongside changes for 0.12.1. Also, changelog entries that were mistakenly omitted for 0.12.0 are included below as well.
Features
- Create a proper space for docs, add info on architecture, and deploy docs to a docsite automatically. (#224, #225, #226, #232, #233, #245)
- The
docs/
directory now holds information on contributing, which was previously located atCONTRIBUTING.md
, as well as information on using the gem, which was previously located inREADME.md
. - However, crucially,
docs/
also now includes a breakdown of how this project is structured and how the diffing engine works. This is hopefully helpful to people who want to submit changes to this project. - Additionally, starting with this release, the Markdown files in
docs/
will published to a docsite, which can be viewed at https://mcmire.github.io/super_diff. - Publishing of the docsite is automated: when a new release is issued, a new version of the docsite will be published for that release under https://mcmire.github.io/super_diff/releases/RELEASE_VERSION. (https://mcmire.github.io/super_diff will always redirect to the latest release.)
- If any file in
docs/
is modified in a pull request, a new version of the docsite will also be automatically deployed just for that pull request, located under https://mcmire.github.io/super_diff/branches/BRANCH_NAME/COMMIT_ID.
- The
- Support the use of primary keys other than
id
when diffing ActiveRecord models. (#237)
Bug fixes
- Remove rogue
pp
statement (#242)
Other notable changes
- Reorganize codebase (#230)
- To be able to explain the architecture of this project more easily, differs, inspection tree builders, operation tree builders, operation tree flatteners, and operation trees for Ruby have now been relocated under a
Basic
feature module, located inlib/super_diff/basic
, which mirrorslib/super_diff/active_record
,lib/super_diff/active_support
, andlib/super_diff/rspec
. - Additionally, all of the files that were previously in
lib/super_diff
have been moved to aCore
module, and to make the file structure a little flatter,InspectionTreeBuilders
in various feature modules have been removed from theObjectInspection
namespace. - To maintain backward compatibility, all of the original constants still exist, but they've been deprecated, and attempting to use them will result in a warning. They will be removed in a future version.
- For full transparency, here is the list of renames:
- The following constants that were previously available under
SuperDiff
are now located underSuperDiff::Core
:ColorizedDocumentExtensions
Configuration
GemVersion
Helpers
ImplementationChecks
Line
RecursionGuard
TieredLines
TieredLinesElider
TieredLinesFormatter
- Everything under
SuperDiff::Differs
is now underSuperDiff::Basic::Differs
- All error classes under
SuperDiff::Errors
have been moved out and are now directly underSuperDiff::Core
SuperDiff::ObjectInspection::InspectionTree
is nowSuperDiff::Core::InspectionTree
- Everything under
SuperDiff::ObjectInspection::InspectionTreeBuilders
is now underSuperDiff::Core::InspectionTreeBuilders
- Everything under
SuperDiff::ObjectInspection::Nodes
is now underSuperDiff::Core::InspectionTreeNodes
- Everything under
SuperDiff::OperationTreeBuilders
is now underSuperDiff::Basic::OperationTreeBuilders
- Everything under
SuperDiff::OperationTreeFlatteners
is now underSuperDiff::Basic::OperationTreeFlatteners
- Everything under
SuperDiff::OperationTrees
is now underSuperDiff::Basic::OperationTrees
- Everything under
SuperDiff::Operations
has been moved out and is now directly underSuperDiff::Core
- Everything under
SuperDiff::ActiveRecord::ObjectInspection::InspectionTreeBuilders
is now underSuperDiff::ActiveRecord::InspectionTreeBuilders
- Everything under
SuperDiff::ActiveSupport::ObjectInspection::InspectionTreeBuilders
is now underSuperDiff::ActiveSupport::InspectionTreeBuilders
- Everything under
SuperDiff::RSpec::ObjectInspection::InspectionTreeBuilders
is now underSuperDiff::RSpec::InspectionTreeBuilders
- The following constants that were previously available under
- To be able to explain the architecture of this project more easily, differs, inspection tree builders, operation tree builders, operation tree flatteners, and operation trees for Ruby have now been relocated under a
Contributors
This release features the following contributors:
Thank you!
0.12.0 [YANKED]
Warning
This release has been yanked, as it included changes that weren't properly
logged in the changelog. This release wasn't ideal as it contained some
leftover print statements, anyway.
Features
- Support the use of primary keys other than
id
when diffing ActiveRecord
models. (#237)
Contributors
This release features the following contributors:
Thank you!
0.11.0
BREAKING CHANGES
- 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
Features
- 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)
Fixes
- 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)
Improvements
- Improve wording in
raise_error
failure messages. (#218)
Contributors
This release features the following contributors:
Thank you!
0.10.0
BREAKING CHANGES
- 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)
Fixes
- 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)
0.9.0
0.8.0
BREAKING CHANGES
- 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, theadd_extra_diff_formatter_class
configuration option has
disappeared; instead, operation tree classes are expected to have an
operation_tree_flattener_class
method, which should return your custom
operation tree flattener class. (#91)
Features
-
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 do |config| config.diff_elision_enabled = true end
By default the elision will be pretty aggressive, but if you want to preserve
more of the unchanged lines in the diff, you can setdiff_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)
Improvements
0.7.0
Features
-
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)
Fixes
- 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)