#-*- mode: ruby; coding: utf-8 -*- require 'module_plus/attribute' require 'module_plus/exception' module ModulePlus module Identification def full_name my_klass.to_s end def full_names full_name.split(/::/) end def nest_names full_names.inject([]) do |list, name| list << (list.empty? ? name : "#{list.last}::#{name}") end end def root_name nest_names.first end def outer_names r = nest_names r.take(r.size - 1) end def nests # nest_names.map { |name| eval(name) } # rubocop:disable Security/Eval end def root eval(root_name) # rubocop:disable Security/Eval end def outers outer_names.map { |n| eval(n) } # rubocop:disable Security/Eval end private def my_klass if self.is_a? Module self else self.class end end end end