Class: String
- Inherits:
-
Object
- Object
- String
- Defined in:
- lib/extensions/string.rb
Overview
Copied from ActiveSupport so we don’t have to add ActiveSupport as a dependency just for this method.
Instance Method Summary collapse
-
#underscore ⇒ Object
Makes an underscored, lowercase form from the expression in the string.
Instance Method Details
#underscore ⇒ Object
Makes an underscored, lowercase form from the expression in the string.
Changes ‘::’ to ‘/’ to convert namespaces to paths.
'ActiveModel'.underscore # => "active_model"
'ActiveModel::Errors'.underscore # => "active_model/errors"
As a rule of thumb you can think of underscore as the inverse of camelize, though there are cases where that does not hold:
'SSLError'.underscore.camelize # => "SslError"
14 15 16 17 18 19 20 21 22 23 |
# File 'lib/extensions/string.rb', line 14 def underscore return self unless self =~ /[A-Z-]|::/ word = self.to_s.gsub(/::/, '/') # word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)(#{inflections.acronym_regex})(?=\b|[^a-z])/) { "#{$1 && '_'}#{$2.downcase}" } 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 |