module Subtype::ClassMethods

Add a single method to retrieve the subtype name

Public Instance Methods

subtype_name(name_case: :snake) click to toggle source

Get a unique string identify this subclass amongst sibling classes @return [String]

# File lib/nose/util.rb, line 130
def subtype_name(name_case: :snake)
  super_name = name_array superclass
  self_name = name_array self
  self_name = self_name.reverse.drop_while do |part|
    super_name.include? part
  end.reverse

  if name_case == :snake
    name = self_name.join('_').freeze
  elsif name_case == :camel
    name = self_name.map do |part|
      part[0].upcase + part[1..-1]
    end.join('').freeze
  end

  name
end

Private Instance Methods

name_array(cls) click to toggle source

Convert camel case class names to an array @return [Array<String>]

# File lib/nose/util.rb, line 152
def name_array(cls)
  frozen_name = cls.name.dup
  frozen_name.gsub!(/^.*::/, '')
  frozen_name.gsub!('ID', 'Id')
  frozen_name.freeze

  frozen_name.split(/(?=[A-Z]+)/).map(&:freeze) \
             .map! do |s|
    s.downcase.freeze
  end
end