class ReeString::Underscore
def call(camel_cased_word, **opts)
def call(camel_cased_word, **opts) return camel_cased_word.to_s unless /[A-Z-]|::/.match?(camel_cased_word) acronyms = opts[:acronyms] || [] regex = acronyms_underscore_regex(acronyms) word = camel_cased_word.to_s.gsub("::", "/") word.gsub!(regex) { "#{$1 && '_' }#{$2.downcase}" } word.gsub!(/([A-Z]+)(?=[A-Z][a-z])|([a-z\d])(?=[A-Z])/) { ($1 || $2) << "_" } word.tr!("-", "_") word.downcase! word end