Sha256: 62ab5b65d0df870d9db6181370c0e3efd12fa094c78ebf256855330573b05d59

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

module EnsureIt
  module StringUtils
    NAME_TYPES = %i(local instance_variable class_variable setter getter
                    checker bang method class)
    NAME_REGEXP = /\A
      (?<class_access>@{1,2})?
      (?<name>[a-z_][a-zA-Z_0-9]*)
      (?<modifier>[?!=])?
    \z/x
    CLASS_NAME_REGEXP = /\A
      [A-Z][a-zA-Z_0-9]*(?:::[A-Z][a-zA-Z_0-9]*)*
    \z/x
    CLASS_NAME_DOWNCASE_REGEXP = /\A
      [a-z][a-zA-Z_0-9]*(?:\/[a-z][a-zA-Z_0-9]*)*
    \z/x

    using EnsureIt if ENSURE_IT_REFINED

    def self.ensure_name(str, name_of: nil, **opts)
      str = str.ensure_string!
      name_of = name_of.ensure_symbol(
        downcase: true,
        values: NAME_TYPES,
        default: NAME_TYPES[0]
      )
      if name_of == :class
        m = CLASS_NAME_REGEXP.match(str)
        if m.nil?
          return nil if opts[:downcase] != true
          m = CLASS_NAME_DOWNCASE_REGEXP.match(str)
          return nil if m.nil?
          str = str
            .split('/')
            .map { |x| x.split('_').map(&:capitalize).join }
            .join('::')
        end
        if opts[:exist] == true
          begin
            Object.const_get(str)
          rescue NameError
            return nil
          end
        end
        str
      else
        m = NAME_REGEXP.match(str)
        return nil if m.nil?
        case name_of
        when :local, :getter then m[:name]
        when :instance_variable then '@' + m[:name]
        when :class_variable then '@@' + m[:name]
        when :setter then m[:name] + '='
        when :checker then m[:name] + '?'
        when :bang then m[:name] + '!'
        when :method then m[:name] + (m[:modifier] || '')
        else m[:name]
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ensure_it-0.1.5 lib/ensure_it/string_utils.rb
ensure_it-0.1.4 lib/ensure_it/string_utils.rb