Sha256: a5443934ad048b781319fb2aa4abad2de0d7b3de359552115c780f41d6a1e9d7

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

module Remarkable
  module Macros

    protected

      def method_missing(method_id, *args, &block) #:nodoc:
        if method_id.to_s =~ /^(should_not|should)_(.+)/
          should_or_should_not_method_missing($1, $2, caller, *args, &block)
        elsif method_id.to_s =~ /^x(should_not|should)_(.+)/
          disabled_method_missing($1, $2, *args, &block)
        else
          super(method_id, *args, &block)
        end
      end

      def should_or_should_not_method_missing(should_or_should_not, method, calltrace, *args, &block) #:nodoc:
        it {
          begin
            send(should_or_should_not, send(method, *args, &block))
          rescue Exception => e
            e.set_backtrace(calltrace.to_a)
            raise e
          end
        }
      end

      def disabled_method_missing(should_or_should_not, method, *args, &block) #:nodoc:
        description = get_description_from_matcher(should_or_should_not, method, *args, &block)
        xexample(description)
      end

      # Try to get the description from the matcher. If an error is raised, we
      # deduct the description from the matcher name, but it will be shown in
      # english.
      #
      def get_description_from_matcher(should_or_should_not, method, *args, &block) #:nodoc:
        verb = should_or_should_not.to_s.gsub('_', ' ')

        desc = Remarkable::Matchers.send(method, *args, &block).spec(self).description
        verb = Remarkable.t("remarkable.core.#{should_or_should_not}", :default => verb)
      rescue
        desc = method.to_s.gsub('_', ' ')
      ensure
        verb << ' ' << desc
      end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
remarkable-3.0.1 lib/remarkable/macros.rb