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