Skip to content

Releases: mcmire/super_diff

0.12.1

27 Apr 05:41
92253b5
Compare
Choose a tag to compare

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 at CONTRIBUTING.md, as well as information on using the gem, which was previously located in README.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.
  • 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 in lib/super_diff/basic, which mirrors lib/super_diff/active_record, lib/super_diff/active_support, and lib/super_diff/rspec.
    • Additionally, all of the files that were previously in lib/super_diff have been moved to a Core module, and to make the file structure a little flatter, InspectionTreeBuilders in various feature modules have been removed from the ObjectInspection 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 under SuperDiff::Core:
        • ColorizedDocumentExtensions
        • Configuration
        • GemVersion
        • Helpers
        • ImplementationChecks
        • Line
        • RecursionGuard
        • TieredLines
        • TieredLinesElider
        • TieredLinesFormatter
      • Everything under SuperDiff::Differs is now under SuperDiff::Basic::Differs
      • All error classes under SuperDiff::Errors have been moved out and are now directly under SuperDiff::Core
      • SuperDiff::ObjectInspection::InspectionTree is now SuperDiff::Core::InspectionTree
      • Everything under SuperDiff::ObjectInspection::InspectionTreeBuilders is now under SuperDiff::Core::InspectionTreeBuilders
      • Everything under SuperDiff::ObjectInspection::Nodes is now under SuperDiff::Core::InspectionTreeNodes
      • Everything under SuperDiff::OperationTreeBuilders is now under SuperDiff::Basic::OperationTreeBuilders
      • Everything under SuperDiff::OperationTreeFlatteners is now under SuperDiff::Basic::OperationTreeFlatteners
      • Everything under SuperDiff::OperationTrees is now under SuperDiff::Basic::OperationTrees
      • Everything under SuperDiff::Operations has been moved out and is now directly under SuperDiff::Core
      • Everything under SuperDiff::ActiveRecord::ObjectInspection::InspectionTreeBuilders is now under SuperDiff::ActiveRecord::InspectionTreeBuilders
      • Everything under SuperDiff::ActiveSupport::ObjectInspection::InspectionTreeBuilders is now under SuperDiff::ActiveSupport::InspectionTreeBuilders
      • Everything under SuperDiff::RSpec::ObjectInspection::InspectionTreeBuilders is now under SuperDiff::RSpec::InspectionTreeBuilders

Contributors

This release features the following contributors:

Thank you!

0.12.0 [YANKED]

25 Apr 05:57
8d1bee9
Compare
Choose a tag to compare

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

10 Feb 23:01
84c8a32
Compare
Choose a tag to compare

BREAKING CHANGES

  • Change InspectionTree so that it no longer instance_evals 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:
      def call
        SuperDiff::ObjectInspection::InspectionTree.new do
          as_lines_when_rendering_to_lines(collection_bookend: :open) do
            add_text object.inspect
          end
        end
      end
      it looks something like this instead:
      def 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
      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 use 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

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 or Date 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.
  • 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

10 Feb 22:59
afc80ab
Compare
Choose a tag to compare

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

26 Apr 01:45
24a9b10
Compare
Choose a tag to compare

Fixes

  • 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)

Features

  • Make SuperDiff::VERSION accessible without requiring super_diff/version
    (#147)

0.8.0

26 Apr 01:44
Compare
Choose a tag to compare

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, the add_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 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)

Improvements

  • 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)

0.7.0

08 May 03:57
Compare
Choose a tag to compare

Features

  • Add support for hash_including, array_including, kind_of, and instance_of, which come from rspec-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)

0.6.2

08 May 03:57
Compare
Choose a tag to compare

Improvements

  • Rename SuperDiff::ObjectInspection.inspect to something less collision-y
    so that it can be inspected in IRB sessions. (#123)

  • Silence warnings. (#124)

0.6.1

13 Mar 02:20
Compare
Choose a tag to compare

Bug fixes

  • Fix compatibility issues with newer versions of rspec-rails which prevented the gem from being loaded. (#121)

0.6.0

07 Feb 23:04
Compare
Choose a tag to compare

Features

  • 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

    (#107, 042e8ec)

  • Ruby 3.0 is now supported. (#118)

Bug fixes

  • Resolve compatibility issues with RSpec 3.10. (#114)
  • Fix diffs involving contain_exactly and a_collection_containing_exactly
    so that if there are extra items in the actual value,
    they are shown with +s. (#106)

Other notable changes

  • Fix reliability issues with CI.
  • Fix rake spec so that it works when run locally again.