Sha256: 1b2ca7676eb739571fe75dc0dd5b15af893180052c73768e24059447644f353b

Contents?: true

Size: 1.5 KB

Versions: 2

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module ConvenientService
  module RSpec
    module Matchers
      module Custom
        class CacheItsValue
          def matches?(block_expectation)
            @block_expectation = block_expectation

            ##
            # NOTE: Identical to `block_expectation.call.object_id == block_expectation.call.object_id`.
            #
            block_expectation.call.equal?(block_expectation.call)
          end

          def supports_block_expectations?
            true
          end

          def description
            "cache its value"
          end

          def failure_message
            "expected #{printable_block} to cache its value"
          end

          def failure_message_when_negated
            "expected #{printable_block} NOT to cache its value"
          end

          ##
          # NOTE: An example of how RSpec extracts block source, but they marked it as private.
          # https://github.com/rspec/rspec-expectations/blob/311aaf245f2c5493572bf683b8c441cb5f7e44c8/lib/rspec/matchers/built_in/change.rb#L437
          #
          # TODO: `printable_block` when `method_source` is available.
          # https://github.com/banister/method_source
          #
          # def printable_block
          #   @printable_block ||= block_expectation.source
          # end
          #
          def printable_block
            @printable_block ||= "{ ... }"
          end

          private

          attr_reader :block_expectation
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
convenient_service-0.2.0 lib/convenient_service/rspec/matchers/custom/cache_its_value.rb
convenient_service-0.1.0 lib/convenient_service/rspec/matchers/custom/cache_its_value.rb