module AppleCore::Refinements::String

Public Instance Methods

camelize(first_letter_casing = :upper) click to toggle source

rubocop:disable Style/PerlBackrefs

# File lib/apple_core/refinements/string.rb, line 17
def camelize(first_letter_casing = :upper)
  uppercase_first_letter = first_letter_casing == :upper

  string = if uppercase_first_letter
             sub(/^[a-z\d]*/, &:capitalize)
           else
             downcase
           end

  string.gsub!(%r{(?:_|(/))([a-z\d]*)}i) do
    "#{$1}#{$2.capitalize}"
  end

  string.gsub!('/', '::')

  string
end
constantize() click to toggle source

rubocop:enable Style/PerlBackrefs

# File lib/apple_core/refinements/string.rb, line 36
def constantize
  names = split('::')
  names.shift if names.empty? || names.first.empty?

  constant = Object

  names.each do |name|
    constant = if constant.const_defined?(name)
                 constant.const_get(name)
               else
                 constant.const_missing(name)
               end
  end

  constant
end
only_digits?() click to toggle source
# File lib/apple_core/refinements/string.rb, line 7
def only_digits?
  match(/^\d+$/)
end
pluralize() click to toggle source

rubocop:disable Metrics/MethodLength

# File lib/apple_core/refinements/string.rb, line 54
def pluralize
  result = to_s.dup

  inflections = {
    'person'                     => 'people',
    'man'                        => 'men',
    'child'                      => 'children',
    'sex'                        => 'sexes',
    'move'                       => 'moves',
    'zombie'                     => 'zombies',
    /(quiz)$/i                   => '\1zes',
    /^(oxen)$/i                  => '\1',
    /^(ox)$/i                    => '\1en',
    /^(m|l)ice$/i                => '\1ice',
    /^(m|l)ouse$/i               => '\1ice',
    /(matr|vert|ind)(?:ix|ex)$/i => '\1ices',
    /(x|ch|ss|sh)$/i             => '\1es',
    /([^aeiouy]|qu)y$/i          => '\1ies',
    /(hive)$/i                   => '\1s',
    /(?:([^f])fe|([lr])f)$/i     => '\1\2ves',
    /sis$/i                      => 'ses',
    /([ti])a$/i                  => '\1a',
    /([ti])um$/i                 => '\1a',
    /(buffal|tomat)o$/i          => '\1oes',
    /(bu)s$/i                    => '\1ses',
    /(alias|status)$/i           => '\1es',
    /(octop|vir)i$/i             => '\1i',
    /(octop|vir)us$/i            => '\1i',
    /^(ax|test)is$/i             => '\1es',
    /s$/i                        => 's',
    /$/                          => 's',
  }

  inflections.each do |(rule, replacement)|
    break if result.sub!(rule, replacement)
  end

  result
end
singularize() click to toggle source

rubocop:disable Metrics/MethodLength, Layout/AlignHash

# File lib/apple_core/refinements/string.rb, line 96
def singularize
  result = to_s.dup

  inflections = {
    /(database)s$/i         => '\1',
    /(quiz)zes$/i           => '\1',
    /(matr)ices$/i          => '\1ix',
    /(vert|ind)ices$/i      => '\1ex',
    /^(ox)en/i              => '\1',
    /(alias|status)(es)?$/i => '\1',
    /(octop|vir)(us|i)$/i   => '\1us',
    /^(a)x[ie]s$/i          => '\1xis',
    /(cris|test)(is|es)$/i  => '\1is',
    /(shoe)s$/i             => '\1',
    /(o)es$/i               => '\1',
    /(bus)(es)?$/i          => '\1',
    /^(m|l)ice$/i           => '\1ouse',
    /(x|ch|ss|sh)es$/i      => '\1',
    /(m)ovies$/i            => '\1ovie',
    /(s)eries$/i            => '\1eries',
    /([^aeiouy]|qu)ies$/i   => '\1y',
    /([lr])ves$/i           => '\1f',
    /(tive)s$/i             => '\1',
    /(hive)s$/i             => '\1',
    /([^f])ves$/i           => '\1fe',
    /(^analy)(sis|ses)$/i   => '\1sis',
    /
      (
        (a)naly     |
        (b)a        |
        (d)iagno    |
        (p)arenthe  |
        (p)rogno    |
        (s)ynop     |
        (t)he
      )
      (sis|ses)
      $
    /xi                     => '\1sis',
    /([ti])a$/i             => '\1um',
    /(n)ews$/i              => '\1ews',
    /(ss)$/i                => '\1',
    /s$/i                   => '',
  }

  inflections.each do |(rule, replacement)|
    break if result.sub!(rule, replacement)
  end

  result
end
to_strict_i(base = 10) click to toggle source
# File lib/apple_core/refinements/string.rb, line 11
def to_strict_i(base = 10)
  only_digits? ? to_i(base) : nil
end
underscore() click to toggle source

rubocop:enable Metrics/MethodLength, Layout/AlignHash

# File lib/apple_core/refinements/string.rb, line 149
def underscore
  word = gsub('::', '/')

  word.gsub!(/(?:([A-Za-z\d])|^)(?=\b|[^a-z])/) do
    "#{Regexp.last_match(1)}#{Regexp.last_match(1) && ''}"
  end

  word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
  word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
  word.tr!('-', '_')
  word.downcase!

  word
end