class ReeString::Camelize
def call(str, **opts)
def call(str, **opts) str = str.dup uppercase_first_letter = opts.has_key?(:uppercase_first_letter) ? opts[:uppercase_first_letter] : true acronyms = opts[:acronyms] || {} regex = acronyms_camelize_regex(acronyms.values) if !uppercase_first_letter str = str.sub(regex) { |match| match.downcase! || match } else str = str.sub(/^[a-z\d]*/) { |match| acronyms[match] || match.capitalize! || match } end str.gsub!(/(?:_|(\/))([a-z\d]*)/i) do word = $2 substituted = acronyms[word] || word.capitalize! || word $1 ? "::#{substituted}" : substituted end str end