module CommandKit::Inflector
A very simple inflector.
@note
If you need something more powerful, checkout [dry-inflector](https://dry-rb.org/gems/dry-inflector/0.1/)
@api semipublic
Public Class Methods
camelize(name)
click to toggle source
Converts an under_scored name to a CamelCased name.
@param [String] name
The under_scored name.
@return [String]
The CamelCased name.
@raise [ArgumentError]
The given under_scored string contained non-alpha-numeric characters.
# File lib/command_kit/inflector.rb, line 96 def self.camelize(name) scanner = StringScanner.new(name.to_s) new_string = String.new until scanner.eos? if (word = scanner.scan(/[A-Za-z\d]+/)) word.capitalize! new_string << word elsif scanner.scan(/[_-]+/) # skip elsif scanner.scan(/\//) new_string << '::' else raise(ArgumentError,"cannot convert string to CamelCase: #{scanner.string.inspect}") end end new_string end
dasherize(name)
click to toggle source
Replaces all underscores with dashes.
@param [#to_s] name
The under_scored name.
@return [String]
The dasherized name.
# File lib/command_kit/inflector.rb, line 80 def self.dasherize(name) name.to_s.tr('_','-') end
demodularize(name)
click to toggle source
Removes the namespace from a constant name.
@param [#to_s] name
The constant name.
@return [String]
The class or module's name, without the namespace.
# File lib/command_kit/inflector.rb, line 25 def self.demodularize(name) name.to_s.split('::').last end
underscore(name)
click to toggle source
Converts a CamelCased name to an under_scored name.
@param [#to_s] name
The CamelCased name.
@return [String]
The resulting under_scored name.
@raise [ArgumentError]
The given string contained non-alpha-numeric characters.
# File lib/command_kit/inflector.rb, line 41 def self.underscore(name) scanner = StringScanner.new(name.to_s) new_string = String.new until scanner.eos? if (separator = scanner.scan(/[_-]+/)) new_string << '_' * separator.length else if (capitalized = scanner.scan(/[A-Z][a-z\d]+/)) new_string << capitalized elsif (uppercase = scanner.scan(/[A-Z][A-Z\d]*(?=[A-Z_-]|$)/)) new_string << uppercase elsif (lowercase = scanner.scan(/[a-z][a-z\d]*/)) new_string << lowercase else raise(ArgumentError,"cannot convert string to underscored: #{scanner.string.inspect}") end if (separator = scanner.scan(/[_-]+/)) new_string << '_' * separator.length elsif !scanner.eos? new_string << '_' end end end new_string.downcase! new_string end