Sha256: 7d56e037d11adb89aa718f5c356e363f58f1cc99a1409211d2494d009ace0e95

Contents?: true

Size: 1.64 KB

Versions: 6

Compression:

Stored size: 1.64 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

6 entries across 6 versions & 1 rubygems

Version Path
remarkable-3.0.2 lib/remarkable/macros.rb
remarkable-3.0.3 lib/remarkable/macros.rb
remarkable-3.0.4 lib/remarkable/macros.rb
remarkable-3.0.5 lib/remarkable/macros.rb
remarkable-3.0.7 lib/remarkable/macros.rb
remarkable-3.0.6 lib/remarkable/macros.rb