class Mentor::NoMethodForNilClassForCommonClassError

Public Class Methods

can_handle?() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 5
def self.can_handle?
  super &&
    Mentor.tp.raised_exception.to_s['NilClass'] &&
    common_methods.include?(method_name.to_sym)
end

Private Class Methods

common_classes() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 57
def self.common_classes
  {
    String:  { methods: @@string_methods,  example: "Hello, world!" },
    Integer: { methods: @@integer_methods, example: 42 },
    Float:   { methods: @@float_methods,   example: 3.14 },
    Array:   { methods: @@array_methods,   example: '[]' },
    Hash:    { methods: @@hash_methods,    example: '{}' }
  }
end
common_methods() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 67
def self.common_methods
  common_classes.map { |klass, attrs| attrs[:methods] }.flatten - Object.methods
end

Public Instance Methods

sections() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 11
def sections
  [
    Header.new,
    RubyErrorComplete.new,
    RelativePath.new,
    LinesOfCode.new,
    ErrorClassSpecificHelp.new(error_class_specific_help),
    Examples.new(examples),
    Docs.new(docs),
    Suggestion.new("Try setting #{var_for_method} to #{a_an(common_classes_for_error.keys.first)} #{or_sentence(common_classes_for_error.keys)} first and then call the method #{method_name} on it.")
  ]
end

Private Instance Methods

common_classes_for_error() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 44
def common_classes_for_error
  self.class.common_classes.select do |klass, attrs|
    attrs[:methods].include? raised_exception.spell_checker.method_name
  end
end
docs() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 40
def docs
  common_classes_for_error.keys.map { |klass| "ri #{klass}##{method_name}" }
end
error_class_specific_help() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 26
def error_class_specific_help
  [
    "It looks like you're trying to call the method #{method_name} on #{var_for_method}.",
    '',
    "It's likely #{var_for_method} was never defined, and therefore is equal to nil, which is how Ruby represents 'nothing'.",
    '',
    "#{and_sentence(pluralize_words(common_classes_for_error.keys))} have the #{method_name} method, so you may want to set #{var_for_method} to #{a_an(common_classes_for_error.keys.first)} #{or_sentence(common_classes_for_error.keys)} first.",
  ]
end
examples() click to toggle source
# File lib/errors/no_method_for_nil_class_for_common_class_error.rb, line 36
def examples
  common_classes_for_error.map { |klass, attrs| "  #{var_for_method} = #{attrs[:example]}  # sets it to #{a_an(klass)} #{klass}" }
end