super_diff 0.5.3 → 0.6.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 +4 -4
- data/README.md +46 -19
- data/lib/super_diff.rb +1 -7
- data/lib/super_diff/colorized_document_extensions.rb +4 -4
- data/lib/super_diff/configuration.rb +32 -22
- data/lib/super_diff/csi.rb +2 -1
- data/lib/super_diff/diff_formatters/collection.rb +1 -1
- data/lib/super_diff/diff_formatters/multiline_string.rb +4 -4
- data/lib/super_diff/equality_matchers/array.rb +2 -2
- data/lib/super_diff/equality_matchers/default.rb +2 -2
- data/lib/super_diff/equality_matchers/hash.rb +2 -2
- data/lib/super_diff/equality_matchers/multiline_string.rb +2 -2
- data/lib/super_diff/equality_matchers/primitive.rb +2 -2
- data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
- data/lib/super_diff/gem_version.rb +45 -0
- data/lib/super_diff/rspec.rb +7 -0
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +7 -7
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +6 -6
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +4 -4
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +5 -5
- data/lib/super_diff/rspec/monkey_patches.rb +21 -13
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +12 -1
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +390 -5
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_matcher_spec.rb +100 -100
- data/spec/integration/rspec/be_nil_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +103 -103
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +10 -10
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +107 -107
- data/spec/integration/rspec/eq_matcher_spec.rb +230 -230
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +129 -129
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +65 -65
- data/spec/integration/rspec/include_matcher_spec.rb +73 -73
- data/spec/integration/rspec/match_array_matcher_spec.rb +119 -119
- data/spec/integration/rspec/match_matcher_spec.rb +274 -274
- data/spec/integration/rspec/raise_error_matcher_spec.rb +86 -86
- data/spec/integration/rspec/respond_to_matcher_spec.rb +240 -240
- data/spec/integration/rspec/third_party_matcher_spec.rb +8 -8
- data/spec/integration/rspec/unhandled_errors_spec.rb +5 -5
- data/spec/spec_helper.rb +22 -13
- data/spec/support/integration/helpers.rb +6 -2
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +1 -1
- data/spec/support/integration/test_programs/base.rb +2 -0
- data/spec/support/integration/test_programs/rspec_active_record.rb +1 -1
- data/spec/support/integration/test_programs/rspec_active_support.rb +17 -0
- data/spec/support/integration/test_programs/rspec_rails.rb +1 -1
- data/spec/support/shared_examples/active_record.rb +108 -108
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +196 -232
- data/spec/tmp/integration_spec.rb +15 -0
- data/spec/unit/equality_matchers/main_spec.rb +403 -403
- data/super_diff.gemspec +1 -1
- metadata +11 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 0fc8e5b83b3b02559e96bbd06f8703b688d56b32588639f7d49a4774d6869433
         | 
| 4 | 
            +
              data.tar.gz: 5f0c9d472aa1170df1a52cc41eab384c4526342cf336e380cdbd01f9e95a3b61
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 24306d1fba59520092a8a446e0a9219a3e9e89813fd3818f2769f737084cc8f6565b12497c86bacb4b9a8f9c5a4b13bafe0479e330cc8169a6c574e11cc74a56
         | 
| 7 | 
            +
              data.tar.gz: 514af50e6272ae3095b752d778b7f3bc776923bccb87a2ab8a50c2f8019c9aba991e129d2dad88248c621594ab5972029a798ada0e64eb8f8a27acc0e7cde496
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,8 +1,8 @@ | |
| 1 | 
            -
            # SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][ | 
| 1 | 
            +
            # SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][gh-actions-badge]][gh-actions] ![Downloads][downloads-badge] [![IssueHunt][issuehunt-badge]][issuehunt]
         | 
| 2 2 |  | 
| 3 3 | 
             
            [version-badge]: http://img.shields.io/gem/v/super_diff.svg
         | 
| 4 4 | 
             
            [rubygems]: http://rubygems.org/gems/super_diff
         | 
| 5 | 
            -
            [ | 
| 5 | 
            +
            [gh-actions-badge]: http://img.shields.io/github/workflow/status/mcmire/super_diff/SuperDiff/master
         | 
| 6 6 | 
             
            [downloads-badge]: http://img.shields.io/gem/dtv/super_diff.svg
         | 
| 7 7 | 
             
            [hound]: https://houndci.com
         | 
| 8 8 | 
             
            [issuehunt-badge]: https://img.shields.io/badge/sponsored_through-IssueHunt-2EC28C
         | 
| @@ -155,14 +155,47 @@ require "super_diff/rspec" | |
| 155 155 |  | 
| 156 156 | 
             
            ## Configuration
         | 
| 157 157 |  | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 158 | 
            +
            You can customize the behavior of the gem
         | 
| 159 | 
            +
            by adding a configuration block
         | 
| 160 | 
            +
            to your test helper file
         | 
| 161 | 
            +
            (`rails_helper` or `spec_helper`)
         | 
| 162 | 
            +
            which looks something like this:
         | 
| 163 | 
            +
             | 
| 164 | 
            +
            ``` ruby
         | 
| 165 | 
            +
            SuperDiff.configure do |config|
         | 
| 166 | 
            +
              # ...
         | 
| 167 | 
            +
            end
         | 
| 168 | 
            +
            ```
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            ### Customizing colors
         | 
| 171 | 
            +
             | 
| 172 | 
            +
            If you don't like the colors that SuperDiff uses,
         | 
| 173 | 
            +
            you can change them like this:
         | 
| 174 | 
            +
             | 
| 175 | 
            +
            ``` ruby
         | 
| 176 | 
            +
            SuperDiff.configure do |config|
         | 
| 177 | 
            +
              config.actual_color = :green
         | 
| 178 | 
            +
              config.expected_color = :red
         | 
| 179 | 
            +
              config.border_color = :yellow
         | 
| 180 | 
            +
              config.header_color = :yellow
         | 
| 181 | 
            +
            end
         | 
| 182 | 
            +
            ```
         | 
| 183 | 
            +
             | 
| 184 | 
            +
            See [eight_bit_color.rb](lib/super_diff/csi/eight_bit_color.rb)
         | 
| 185 | 
            +
            for the list of available colors.
         | 
| 186 | 
            +
             | 
| 187 | 
            +
            ### Diffing custom objects
         | 
| 188 | 
            +
             | 
| 189 | 
            +
            If you are comparing two data structures
         | 
| 190 | 
            +
            that involve a class that is specific to your project,
         | 
| 191 | 
            +
            the resulting diff may not look as good as diffs involving native or primitive objects.
         | 
| 192 | 
            +
            This happens because if SuperDiff doesn't recognize a class,
         | 
| 193 | 
            +
            it will fall back to a generic representation when diffing instances of that class.
         | 
| 194 | 
            +
            Fortunately, the gem has a pluggable interface
         | 
| 195 | 
            +
            that allows you to insert your own implementations
         | 
| 196 | 
            +
            of key pieces involved in the diffing process.
         | 
| 197 | 
            +
            I'll have more about how that works soon,
         | 
| 198 | 
            +
            but here is what such a configuration would look like:
         | 
| 166 199 |  | 
| 167 200 | 
             
            ``` ruby
         | 
| 168 201 | 
             
            SuperDiff.configure do |config|
         | 
| @@ -173,12 +206,6 @@ SuperDiff.configure do |config| | |
| 173 206 | 
             
            end
         | 
| 174 207 | 
             
            ```
         | 
| 175 208 |  | 
| 176 | 
            -
            *(More info here in the future on adding a custom differ,
         | 
| 177 | 
            -
            operation tree builder,
         | 
| 178 | 
            -
            operation tree,
         | 
| 179 | 
            -
            and diff formatter.
         | 
| 180 | 
            -
            Also explanations on what these are.)*
         | 
| 181 | 
            -
             | 
| 182 209 | 
             
            ## Support
         | 
| 183 210 |  | 
| 184 211 | 
             
            My goal for this library is to improve your development experience.
         | 
| @@ -204,12 +231,12 @@ I'll get notified right away! | |
| 204 231 |  | 
| 205 232 | 
             
            ## Compatibility
         | 
| 206 233 |  | 
| 207 | 
            -
            `super_diff` is [tested][ | 
| 234 | 
            +
            `super_diff` is [tested][gh-actions] to work with
         | 
| 208 235 | 
             
            Ruby >= 2.5.x,
         | 
| 209 236 | 
             
            RSpec 3.x,
         | 
| 210 237 | 
             
            and Rails >= 5.x.
         | 
| 211 238 |  | 
| 212 | 
            -
            [ | 
| 239 | 
            +
            [gh-actions]: https://github.com/mcmire/super_diff/actions?query=workflow%3ASuperDiff
         | 
| 213 240 |  | 
| 214 241 | 
             
            ## Inspiration/Thanks
         | 
| 215 242 |  | 
| @@ -232,5 +259,5 @@ Thank you to the authors of these libraries! | |
| 232 259 |  | 
| 233 260 | 
             
            ## Author/License
         | 
| 234 261 |  | 
| 235 | 
            -
             | 
| 262 | 
            +
            SuperDiff was created and is maintained by Elliot Winkler.
         | 
| 236 263 | 
             
            It is released under the [MIT license](LICENSE).
         | 
    
        data/lib/super_diff.rb
    CHANGED
    
    | @@ -13,6 +13,7 @@ module SuperDiff | |
| 13 13 | 
             
              autoload :Differs, "super_diff/differs"
         | 
| 14 14 | 
             
              autoload :EqualityMatchers, "super_diff/equality_matchers"
         | 
| 15 15 | 
             
              autoload :Errors, "super_diff/errors"
         | 
| 16 | 
            +
              autoload :GemVersion, "super_diff/gem_version"
         | 
| 16 17 | 
             
              autoload :Helpers, "super_diff/helpers"
         | 
| 17 18 | 
             
              autoload :ImplementationChecks, "super_diff/implementation_checks"
         | 
| 18 19 | 
             
              autoload :ObjectInspection, "super_diff/object_inspection"
         | 
| @@ -21,13 +22,6 @@ module SuperDiff | |
| 21 22 | 
             
              autoload :Operations, "super_diff/operations"
         | 
| 22 23 | 
             
              autoload :RecursionGuard, "super_diff/recursion_guard"
         | 
| 23 24 |  | 
| 24 | 
            -
              COLORS = {
         | 
| 25 | 
            -
                alpha: :magenta,
         | 
| 26 | 
            -
                beta: :yellow,
         | 
| 27 | 
            -
                border: :blue,
         | 
| 28 | 
            -
                header: :white,
         | 
| 29 | 
            -
              }.freeze
         | 
| 30 | 
            -
             | 
| 31 25 | 
             
              def self.configure
         | 
| 32 26 | 
             
                yield configuration
         | 
| 33 27 | 
             
              end
         | 
| @@ -6,12 +6,12 @@ module SuperDiff | |
| 6 6 | 
             
                  end
         | 
| 7 7 | 
             
                end
         | 
| 8 8 |  | 
| 9 | 
            -
                def  | 
| 10 | 
            -
                  colorize(*args, **opts, fg: SuperDiff | 
| 9 | 
            +
                def expected(*args, **opts, &block)
         | 
| 10 | 
            +
                  colorize(*args, **opts, fg: SuperDiff.configuration.expected_color, &block)
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 | 
            -
                def  | 
| 14 | 
            -
                  colorize(*args, **opts, fg: SuperDiff | 
| 13 | 
            +
                def actual(*args, **opts, &block)
         | 
| 14 | 
            +
                  colorize(*args, **opts, fg: SuperDiff.configuration.actual_color, &block)
         | 
| 15 15 | 
             
                end
         | 
| 16 16 | 
             
              end
         | 
| 17 17 | 
             
            end
         | 
| @@ -1,26 +1,54 @@ | |
| 1 1 | 
             
            module SuperDiff
         | 
| 2 2 | 
             
              class Configuration
         | 
| 3 3 | 
             
                attr_reader(
         | 
| 4 | 
            +
                  :extra_diff_formatter_classes,
         | 
| 4 5 | 
             
                  :extra_differ_classes,
         | 
| 6 | 
            +
                  :extra_inspector_classes,
         | 
| 5 7 | 
             
                  :extra_operation_tree_builder_classes,
         | 
| 6 8 | 
             
                  :extra_operation_tree_classes,
         | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            +
                )
         | 
| 10 | 
            +
                attr_accessor(
         | 
| 11 | 
            +
                  :actual_color,
         | 
| 12 | 
            +
                  :border_color,
         | 
| 13 | 
            +
                  :expected_color,
         | 
| 14 | 
            +
                  :header_color,
         | 
| 9 15 | 
             
                )
         | 
| 10 16 |  | 
| 11 17 | 
             
                def initialize
         | 
| 18 | 
            +
                  @actual_color = :yellow
         | 
| 19 | 
            +
                  @border_color = :blue
         | 
| 20 | 
            +
                  @expected_color = :magenta
         | 
| 21 | 
            +
                  @extra_diff_formatter_classes = [].freeze
         | 
| 12 22 | 
             
                  @extra_differ_classes = [].freeze
         | 
| 23 | 
            +
                  @extra_inspector_classes = [].freeze
         | 
| 13 24 | 
             
                  @extra_operation_tree_builder_classes = [].freeze
         | 
| 14 25 | 
             
                  @extra_operation_tree_classes = [].freeze
         | 
| 15 | 
            -
                  @ | 
| 16 | 
            -
                  @extra_inspector_classes = [].freeze
         | 
| 26 | 
            +
                  @header_color = :white
         | 
| 17 27 | 
             
                end
         | 
| 18 28 |  | 
| 29 | 
            +
                def add_extra_diff_formatter_classes(*classes)
         | 
| 30 | 
            +
                  @extra_diff_formatter_classes =
         | 
| 31 | 
            +
                    (@extra_diff_formatter_classes + classes).freeze
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
                alias_method(
         | 
| 34 | 
            +
                  :add_extra_diff_formatter_class,
         | 
| 35 | 
            +
                  :add_extra_diff_formatter_classes,
         | 
| 36 | 
            +
                )
         | 
| 37 | 
            +
             | 
| 19 38 | 
             
                def add_extra_differ_classes(*classes)
         | 
| 20 39 | 
             
                  @extra_differ_classes = (@extra_differ_classes + classes).freeze
         | 
| 21 40 | 
             
                end
         | 
| 22 41 | 
             
                alias_method :add_extra_differ_class, :add_extra_differ_classes
         | 
| 23 42 |  | 
| 43 | 
            +
                def add_extra_inspector_classes(*classes)
         | 
| 44 | 
            +
                  @extra_inspector_classes =
         | 
| 45 | 
            +
                    (@extra_inspector_classes + classes).freeze
         | 
| 46 | 
            +
                end
         | 
| 47 | 
            +
                alias_method(
         | 
| 48 | 
            +
                  :add_extra_inspector_class,
         | 
| 49 | 
            +
                  :add_extra_inspector_classes,
         | 
| 50 | 
            +
                )
         | 
| 51 | 
            +
             | 
| 24 52 | 
             
                def add_extra_operation_tree_builder_classes(*classes)
         | 
| 25 53 | 
             
                  @extra_operation_tree_builder_classes =
         | 
| 26 54 | 
             
                    (@extra_operation_tree_builder_classes + classes).freeze
         | 
| @@ -38,23 +66,5 @@ module SuperDiff | |
| 38 66 | 
             
                  :add_extra_operation_tree_class,
         | 
| 39 67 | 
             
                  :add_extra_operation_tree_classes,
         | 
| 40 68 | 
             
                )
         | 
| 41 | 
            -
             | 
| 42 | 
            -
                def add_extra_diff_formatter_classes(*classes)
         | 
| 43 | 
            -
                  @extra_diff_formatter_classes =
         | 
| 44 | 
            -
                    (@extra_diff_formatter_classes + classes).freeze
         | 
| 45 | 
            -
                end
         | 
| 46 | 
            -
                alias_method(
         | 
| 47 | 
            -
                  :add_extra_diff_formatter_class,
         | 
| 48 | 
            -
                  :add_extra_diff_formatter_classes,
         | 
| 49 | 
            -
                )
         | 
| 50 | 
            -
             | 
| 51 | 
            -
                def add_extra_inspector_classes(*classes)
         | 
| 52 | 
            -
                  @extra_inspector_classes =
         | 
| 53 | 
            -
                    (@extra_inspector_classes + classes).freeze
         | 
| 54 | 
            -
                end
         | 
| 55 | 
            -
                alias_method(
         | 
| 56 | 
            -
                  :add_extra_inspector_class,
         | 
| 57 | 
            -
                  :add_extra_inspector_classes,
         | 
| 58 | 
            -
                )
         | 
| 59 69 | 
             
              end
         | 
| 60 70 | 
             
            end
         | 
    
        data/lib/super_diff/csi.rb
    CHANGED
    
    
| @@ -15,12 +15,12 @@ module SuperDiff | |
| 15 15 | 
             
                    operation_tree.reduce([]) do |array, operation|
         | 
| 16 16 | 
             
                      case operation.name
         | 
| 17 17 | 
             
                      when :change
         | 
| 18 | 
            -
                        array << Helpers.style(: | 
| 19 | 
            -
                        array << Helpers.style(: | 
| 18 | 
            +
                        array << Helpers.style(:expected, "- #{operation.left_value}")
         | 
| 19 | 
            +
                        array << Helpers.style(:actual, "+ #{operation.right_value}")
         | 
| 20 20 | 
             
                      when :delete
         | 
| 21 | 
            -
                        array << Helpers.style(: | 
| 21 | 
            +
                        array << Helpers.style(:expected, "- #{operation.value}")
         | 
| 22 22 | 
             
                      when :insert
         | 
| 23 | 
            -
                        array << Helpers.style(: | 
| 23 | 
            +
                        array << Helpers.style(:actual, "+ #{operation.value}")
         | 
| 24 24 | 
             
                      else
         | 
| 25 25 | 
             
                        array << Helpers.style(:plain, "  #{operation.value}")
         | 
| 26 26 | 
             
                      end
         | 
| @@ -11,14 +11,14 @@ module SuperDiff | |
| 11 11 |  | 
| 12 12 | 
             
                      #{
         | 
| 13 13 | 
             
                        Helpers.style(
         | 
| 14 | 
            -
                          : | 
| 14 | 
            +
                          :expected,
         | 
| 15 15 | 
             
                          "Expected: " +
         | 
| 16 16 | 
             
                          ObjectInspection.inspect(expected, as_single_line: true),
         | 
| 17 17 | 
             
                        )
         | 
| 18 18 | 
             
                      }
         | 
| 19 19 | 
             
                      #{
         | 
| 20 20 | 
             
                        Helpers.style(
         | 
| 21 | 
            -
                          : | 
| 21 | 
            +
                          :actual,
         | 
| 22 22 | 
             
                          "  Actual: " +
         | 
| 23 23 | 
             
                          ObjectInspection.inspect(actual, as_single_line: true),
         | 
| 24 24 | 
             
                        )
         | 
| @@ -19,7 +19,7 @@ module SuperDiff | |
| 19 19 |  | 
| 20 20 | 
             
                  def expected_line
         | 
| 21 21 | 
             
                    Helpers.style(
         | 
| 22 | 
            -
                      : | 
| 22 | 
            +
                      :expected,
         | 
| 23 23 | 
             
                      "Expected: " +
         | 
| 24 24 | 
             
                      ObjectInspection.inspect(expected, as_single_line: true),
         | 
| 25 25 | 
             
                    )
         | 
| @@ -27,7 +27,7 @@ module SuperDiff | |
| 27 27 |  | 
| 28 28 | 
             
                  def actual_line
         | 
| 29 29 | 
             
                    Helpers.style(
         | 
| 30 | 
            -
                      : | 
| 30 | 
            +
                      :actual,
         | 
| 31 31 | 
             
                      "  Actual: " +
         | 
| 32 32 | 
             
                      ObjectInspection.inspect(actual, as_single_line: true),
         | 
| 33 33 | 
             
                    )
         | 
| @@ -11,14 +11,14 @@ module SuperDiff | |
| 11 11 |  | 
| 12 12 | 
             
                      #{
         | 
| 13 13 | 
             
                        Helpers.style(
         | 
| 14 | 
            -
                          : | 
| 14 | 
            +
                          :expected,
         | 
| 15 15 | 
             
                          "Expected: " +
         | 
| 16 16 | 
             
                          ObjectInspection.inspect(expected, as_single_line: true),
         | 
| 17 17 | 
             
                        )
         | 
| 18 18 | 
             
                      }
         | 
| 19 19 | 
             
                      #{
         | 
| 20 20 | 
             
                        Helpers.style(
         | 
| 21 | 
            -
                          : | 
| 21 | 
            +
                          :actual,
         | 
| 22 22 | 
             
                          "  Actual: " +
         | 
| 23 23 | 
             
                          ObjectInspection.inspect(actual, as_single_line: true),
         | 
| 24 24 | 
             
                        )
         | 
| @@ -12,14 +12,14 @@ module SuperDiff | |
| 12 12 | 
             
                      #{
         | 
| 13 13 | 
             
                        # TODO: This whole thing should not be red or green, just the values
         | 
| 14 14 | 
             
                        Helpers.style(
         | 
| 15 | 
            -
                          : | 
| 15 | 
            +
                          :expected,
         | 
| 16 16 | 
             
                          "Expected: " +
         | 
| 17 17 | 
             
                          ObjectInspection.inspect(expected, as_single_line: true),
         | 
| 18 18 | 
             
                        )
         | 
| 19 19 | 
             
                      }
         | 
| 20 20 | 
             
                      #{
         | 
| 21 21 | 
             
                        Helpers.style(
         | 
| 22 | 
            -
                          : | 
| 22 | 
            +
                          :actual,
         | 
| 23 23 | 
             
                          "  Actual: " +
         | 
| 24 24 | 
             
                          ObjectInspection.inspect(actual, as_single_line: true),
         | 
| 25 25 | 
             
                        )
         | 
| @@ -15,14 +15,14 @@ module SuperDiff | |
| 15 15 |  | 
| 16 16 | 
             
                      #{
         | 
| 17 17 | 
             
                        Helpers.style(
         | 
| 18 | 
            -
                          : | 
| 18 | 
            +
                          :expected,
         | 
| 19 19 | 
             
                          "Expected: " +
         | 
| 20 20 | 
             
                          ObjectInspection.inspect(expected, as_single_line: true),
         | 
| 21 21 | 
             
                        )
         | 
| 22 22 | 
             
                      }
         | 
| 23 23 | 
             
                      #{
         | 
| 24 24 | 
             
                        Helpers.style(
         | 
| 25 | 
            -
                          : | 
| 25 | 
            +
                          :actual,
         | 
| 26 26 | 
             
                          "  Actual: " +
         | 
| 27 27 | 
             
                          ObjectInspection.inspect(actual, as_single_line: true),
         | 
| 28 28 | 
             
                        )
         | 
| @@ -11,14 +11,14 @@ module SuperDiff | |
| 11 11 |  | 
| 12 12 | 
             
                      #{
         | 
| 13 13 | 
             
                        Helpers.style(
         | 
| 14 | 
            -
                          : | 
| 14 | 
            +
                          :expected,
         | 
| 15 15 | 
             
                          "Expected: " +
         | 
| 16 16 | 
             
                          ObjectInspection.inspect(expected, as_single_line: true),
         | 
| 17 17 | 
             
                        )
         | 
| 18 18 | 
             
                      }
         | 
| 19 19 | 
             
                      #{
         | 
| 20 20 | 
             
                        Helpers.style(
         | 
| 21 | 
            -
                          : | 
| 21 | 
            +
                          :actual,
         | 
| 22 22 | 
             
                          "  Actual: " +
         | 
| 23 23 | 
             
                          ObjectInspection.inspect(actual, as_single_line: true),
         | 
| 24 24 | 
             
                        )
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            module SuperDiff
         | 
| 2 | 
            +
              class GemVersion
         | 
| 3 | 
            +
                def initialize(version)
         | 
| 4 | 
            +
                  @version = Gem::Version.new(version.to_s)
         | 
| 5 | 
            +
                end
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def <(other)
         | 
| 8 | 
            +
                  compare?(:<, other)
         | 
| 9 | 
            +
                end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def <=(other)
         | 
| 12 | 
            +
                  compare?(:<=, other)
         | 
| 13 | 
            +
                end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                def ==(other)
         | 
| 16 | 
            +
                  compare?(:==, other)
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                def >=(other)
         | 
| 20 | 
            +
                  compare?(:>=, other)
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                def >(other)
         | 
| 24 | 
            +
                  compare?(:>, other)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def =~(other)
         | 
| 28 | 
            +
                  Gem::Requirement.new(other).satisfied_by?(version)
         | 
| 29 | 
            +
                end
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                def to_s
         | 
| 32 | 
            +
                  version.to_s
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                private
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                attr_reader :version
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def compare?(operator, other_version)
         | 
| 40 | 
            +
                  Gem::Requirement.
         | 
| 41 | 
            +
                    new("#{operator} #{other_version}").
         | 
| 42 | 
            +
                    satisfied_by?(version)
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
    
        data/lib/super_diff/rspec.rb
    CHANGED
    
    | @@ -61,6 +61,13 @@ module SuperDiff | |
| 61 61 | 
             
                  value.is_a?(::RSpec::Matchers::AliasedMatcher)
         | 
| 62 62 | 
             
                end
         | 
| 63 63 |  | 
| 64 | 
            +
                def self.rspec_version
         | 
| 65 | 
            +
                  @_rspec_version ||= begin
         | 
| 66 | 
            +
                    require "rspec/core/version"
         | 
| 67 | 
            +
                    GemVersion.new(::RSpec::Core::Version::STRING)
         | 
| 68 | 
            +
                  end
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 64 71 | 
             
                SuperDiff.configuration.tap do |config|
         | 
| 65 72 | 
             
                  config.add_extra_differ_classes(
         | 
| 66 73 | 
             
                    Differs::CollectionContainingExactly,
         | 
| @@ -45,12 +45,12 @@ module SuperDiff | |
| 45 45 | 
             
                    def add_extra_after_error
         | 
| 46 46 | 
             
                    end
         | 
| 47 47 |  | 
| 48 | 
            -
                    def  | 
| 49 | 
            -
                      SuperDiff | 
| 48 | 
            +
                    def actual_color
         | 
| 49 | 
            +
                      SuperDiff.configuration.actual_color
         | 
| 50 50 | 
             
                    end
         | 
| 51 51 |  | 
| 52 | 
            -
                    def  | 
| 53 | 
            -
                      SuperDiff | 
| 52 | 
            +
                    def expected_color
         | 
| 53 | 
            +
                      SuperDiff.configuration.expected_color
         | 
| 54 54 | 
             
                    end
         | 
| 55 55 |  | 
| 56 56 | 
             
                    private
         | 
| @@ -91,7 +91,7 @@ module SuperDiff | |
| 91 91 | 
             
                    end
         | 
| 92 92 |  | 
| 93 93 | 
             
                    def add_actual_value
         | 
| 94 | 
            -
                      template.add_text_in_color( | 
| 94 | 
            +
                      template.add_text_in_color(actual_color) { actual }
         | 
| 95 95 | 
             
                    end
         | 
| 96 96 |  | 
| 97 97 | 
             
                    def expected_section
         | 
| @@ -110,7 +110,7 @@ module SuperDiff | |
| 110 110 | 
             
                      else
         | 
| 111 111 | 
             
                        template.add_text " "
         | 
| 112 112 | 
             
                        template.add_text_in_color(
         | 
| 113 | 
            -
                           | 
| 113 | 
            +
                          expected_color,
         | 
| 114 114 | 
             
                          expected_for_failure_message,
         | 
| 115 115 | 
             
                        )
         | 
| 116 116 | 
             
                      end
         | 
| @@ -121,7 +121,7 @@ module SuperDiff | |
| 121 121 | 
             
                        add_expected_value_to(template, expected_for_description)
         | 
| 122 122 | 
             
                      else
         | 
| 123 123 | 
             
                        template.add_text " "
         | 
| 124 | 
            -
                        template.add_text_in_color( | 
| 124 | 
            +
                        template.add_text_in_color(expected_color, expected_for_description)
         | 
| 125 125 | 
             
                      end
         | 
| 126 126 | 
             
                    end
         | 
| 127 127 |  |