module Glimmer::Specification::Ext

Attributes

log_failure_of_method_in_progress[RW]
log_failure_of_method_in_progress?[RW]

Public Class Methods

log_failure_of_method(klass, method_name, method_alias = nil, &output_formatter) click to toggle source
# File lib/glimmer/specification/ext.rb, line 31
def log_failure_of_method(klass, method_name, method_alias = nil, &output_formatter)
  klass.class_eval do
    method_alias ||= "without_glimmer_#{method_name}"
    method_alias = "#{name.split('::').last.underscore}_#{method_alias}"
    alias_method method_alias, method_name
    define_method(method_name) do |*args|
      logging = false
      logging = Ext.log_failure_of_method_in_progress = true if !Ext.log_failure_of_method_in_progress?
      send(method_alias, *args).tap do |result|
        if logging
          output = output_formatter&.call(self, method_name, args)
          output ||= "#{self.inspect}.#{method_name}#{"(#{args.map(&:inspect).join(',')})" unless args.array_without_glimmer_empty?}"
          puts Colours::RED + "FAILED: #{output}" if Glimmer::Specification::Element::Fact.fact_block_in_progress && !result
          Ext.log_failure_of_method_in_progress = false
        end
      end
    end
  end
end