Sha256: 2f1b38eb85277097e4fc3837a8d98b997b6c2ec72c4321d68a39f918471be67f
Contents?: true
Size: 1.23 KB
Versions: 1
Compression:
Stored size: 1.23 KB
Contents
require 'delegate' module DidYouMean class ClassNameChecker include SpellCheckable attr_reader :class_name, :original_message def initialize(exception) @class_name, @original_message = exception.name, exception.original_message end def candidates {name_from_message => class_names} end def class_names scopes.flat_map do |scope| scope.constants.map do |c| ClassName.new(c, scope == Object ? EMPTY : "#{scope}::") end end end def name_from_message class_name || /([A-Z]\w*$)/.match(original_message)[0] end def corrections super.map(&:full_name) end def scopes @scopes ||= scope_base.inject([Object]) do |_scopes, scope| _scopes << _scopes.last.const_get(scope) end end private def scope_base @scope_base ||= (/(([A-Z]\w*::)*)([A-Z]\w*)$/ =~ original_message ? $1 : EMPTY).split("::") end class ClassName < SimpleDelegator attr :namespace def initialize(name, namespace = ''.freeze) super(name) @namespace = namespace end def full_name self.class.new("#{namespace}#{__getobj__}") end end private_constant :ClassName end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
did_you_mean-1.0.0.beta2 | lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb |