snake others functions for coding camelcase camel and ruby-on-rails ruby formatting camelcasing underscores

ruby on rails - others - Convertir la funda de camello para subrayar la maleta en rubí



coding standards camelcase (9)

¿Hay alguna función lista que convierta cadenas de caja de camello en una cadena separada de subrayado?

Quiero algo como esto:

"CamelCaseString".to_underscore

para devolver "camel_case_string".

...


Así es como lo hace Rails :

def underscore(camel_cased_word) camel_cased_word.to_s.gsub(/::/, ''/''). gsub(/([A-Z]+)([A-Z][a-z])/,''/1_/2''). gsub(/([a-z/d])([A-Z])/,''/1_/2''). tr("-", "_"). downcase end


Echa un vistazo a snakecase de Ruby Facets

Los siguientes casos se manejan, como se ve a continuación:

"SnakeCase".snakecase #=> "snake_case" "Snake-Case".snakecase #=> "snake_case" "Snake Case".snakecase #=> "snake_case" "Snake - Case".snakecase #=> "snake_case"

Desde: https://github.com/rubyworks/facets/blob/master/lib/core/facets/string/snakecase.rb

class String # Underscore a string such that camelcase, dashes and spaces are # replaced by underscores. This is the reverse of {#camelcase}, # albeit not an exact inverse. # # "SnakeCase".snakecase #=> "snake_case" # "Snake-Case".snakecase #=> "snake_case" # "Snake Case".snakecase #=> "snake_case" # "Snake - Case".snakecase #=> "snake_case" # # Note, this method no longer converts `::` to `/`, in that case # use the {#pathize} method instead. def snakecase #gsub(/::/, ''/''). gsub(/([A-Z]+)([A-Z][a-z])/,''/1_/2''). gsub(/([a-z/d])([A-Z])/,''/1_/2''). tr(''-'', ''_''). gsub(//s/, ''_''). gsub(/__+/, ''_''). downcase end # alias_method :underscore, :snakecase # TODO: Add *separators to #snakecase, like camelcase. end


Hay un método incorporado en Rails llamado ''guión bajo'' que puede usar para este propósito

"CamelCaseString".underscore #=> "camel_case_string"

El método de ''subrayado'' se puede considerar típicamente como inverso de ''camelize''


Implementación de Ruby de una sola línea:

class String # ruby mutation methods have the expectation to return self if a mutation occurred, nil otherwise. (see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub-21) def to_underscore! gsub!(/(.)([A-Z])/,''/1_/2'') downcase! end def to_underscore dup.tap { |s| s.to_underscore! } end end

Así que "SomeCamelCase".to_underscore # =>"some_camel_case"


Me gustaría esto:

class String # /n returns the capture group of "n" index def snikize self.gsub(/::/, ''/'') .gsub(/([a-z/d])([A-Z])/, "/1_/2") .downcase end # or def snikize self.gsub(/::/, ''/'') .gsub(/([a-z/d])([A-Z])/) do "#{$1}_#{$2}" end .downcase end end

Parche de mono de String clase String . Hay clases que comienzan con dos o más letras en mayúsculas.


Puedes usar

"CamelCasedName".tableize.singularize

O solo

"CamelCasedName".underscore

Ambas opciones opciones darán "camel_cased_name" . Puedes ver más detalles here .



Short oneliner para CamelCases cuando tienes espacios también incluidos (no funciona correctamente si tienes una palabra intermedia con una letra inicial pequeña):

a = "Test String" a.gsub('' '', '''').underscore => "test_string"


El ActiveSupport de Rails agrega un guión bajo a la Cadena usando lo siguiente:

class String def underscore self.gsub(/::/, ''/''). gsub(/([A-Z]+)([A-Z][a-z])/,''/1_/2''). gsub(/([a-z/d])([A-Z])/,''/1_/2''). tr("-", "_"). downcase end end

Entonces puedes hacer cosas divertidas:

"CamelCase".underscore => "camel_case"