class EnsureIt::ErrorMessage

Attributes

backtrace[RW]
inside[RW]
message[W]
method_name[RW]
subject[RW]
subject_type[RW]

Public Class Methods

new(method_name, message, backtrace) click to toggle source
# File lib/ensure_it/errors.rb, line 8
def initialize(method_name, message, backtrace)
  method_name = method_name.to_sym if method_name.is_a?(String)
  unless method_name.is_a?(Symbol)
    raise ArgumentError, 'EnsureIt: Wrong method_name argument for Error'
  end
  @method_name, @message, @backtrace = method_name, message, backtrace
end

Public Instance Methods

message() click to toggle source
# File lib/ensure_it/errors.rb, line 47
def message
  unless @message.is_a?(String)
    @message =
      if @subject.nil? && @subject_type != :unknown_method_result
        '#{subject}'
      else
        '#{subject} of #{method_name}'
      end
  end
  @message.gsub(/\#\{subject\}/, subject_display_name)
          .gsub(/\#\{name\}/, @subject.to_s)
          .gsub(/\#\{method_name\}/, @method_name.to_s)
end
subject_display_name() click to toggle source
# File lib/ensure_it/errors.rb, line 16
def subject_display_name
  display_name =
    if @subject.nil? && @subject_type != :unknown_method_result
      "subject of '#{method_name}' method"
    else
      case @subject_type
      when :local_variable then "local variable '#{@subject}'"
      when :instance_variable then "instance variable '@#{@subject}'"
      when :class_variable then "class variable '@@#{@subject}'"
      when :method_result then "return value of '#{subject}' method"
      when :unknown_method_result then 'return value of method'
      when :req_argument then "argument '#{subject}'"
      when :rest_argument then "argument '*#{subject}'"
      when :opt_argument then "optional argument '#{subject}'"
      when :key_argument then "key argument '#{subject}'"
      when :keyrest_argument then "key argument '**#{subject}'"
      when :block_argument then "block argument '&#{subject}'"
      else "subject of '#{method_name}' method"
      end
    end
  unless @inside.nil?
    display_name +=
      if !@subject_type.nil? && @subject_type.to_s =~ /_argument\z/
        " of '#{@inside}' method"
      else
        " inside '#{@inside}' method"
      end
  end
  display_name
end