Sha256: a70f5b175dac3574e6eee24e123df2be0c0033a40897e56f4c3d4c217fa06aa3

Contents?: true

Size: 1.72 KB

Versions: 9

Compression:

Stored size: 1.72 KB

Contents

module Remarkable
  # This class holds the basic structure for Remarkable matchers. All matchers
  # must inherit from it.
  class Base
    include Remarkable::Messages
    extend  Remarkable::DSL

    # Optional to provide spec binding to matchers.
    def spec(binding)
      @spec = binding
      self
    end

    protected

      # Returns the subject class unless it's a class object.
      def subject_class
        nil unless @subject
        @subject.is_a?(Class) ? @subject : @subject.class
      end

      # Returns the subject name based on its class. If the class respond to
      # human_name (which is usually localized) returns it.
      def subject_name
        nil unless @subject
        subject_class.respond_to?(:human_name) ? subject_class.human_name : subject_class.name
      end

      # Iterates over the collection given yielding the block and return false
      # if any of them also returns false.
      def assert_matcher_for(collection) #:nodoc:
        collection.each do |item|
          return false unless yield(item)
        end
        true
      end

      # Asserts that the given collection contains item x. If x is a regular
      # expression, ensure that at least one element from the collection matches x.
      #
      #   assert_contains(['a', '1'], /\d/) => passes
      #   assert_contains(['a', '1'], 'a') => passes
      #   assert_contains(['a', '1'], /not there/) => fails
      #
      def assert_contains(collection, x)
        collection = [collection] unless collection.is_a?(Array)

        case x
          when Regexp
            collection.detect { |e| e =~ x }
          else
            collection.include?(x)
        end
      end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
remarkable-3.0.9 lib/remarkable/base.rb
remarkable-3.0.10 lib/remarkable/base.rb
remarkable-3.1.3 lib/remarkable/base.rb
remarkable-3.1.4 lib/remarkable/base.rb
remarkable-3.1.5 lib/remarkable/base.rb
remarkable-3.1.6 lib/remarkable/base.rb
remarkable-3.1.0 lib/remarkable/base.rb
remarkable-3.1.2 lib/remarkable/base.rb
remarkable-3.1.1 lib/remarkable/base.rb