module Rutter::Naming

Conveniences for inflecting and working with names in Rutter.

Public Instance Methods

classify(string) click to toggle source

Return a CamelCase version of the string.

Revised version of `Hanami::Utils::String.classify` implementation.

@param string [String]

String to be transformed.

@return [String]

The transformed string

@example

string = "rutter_naming"
Rutter::Naming.classify(string) # => 'RutterNaming'
# File lib/rutter/naming.rb, line 44
def classify(string)
  words = underscore(string).split(%r{_|::|\/|\-}).map!(&:capitalize)
  delimiters = underscore(string).scan(%r{_|::|\/|\-})
  delimiters.map! { |delimiter| delimiter == "_" ? "" : "::" }
  words.zip(delimiters).join
end
cleanpath(path) click to toggle source

Normalize the given path.

@param path [String]

Path to be normalized.

@return [String]

Normalized path.
# File lib/rutter/naming.rb, line 73
def cleanpath(path)
  Pathname.new("/#{path}").cleanpath.to_s
end
join(*part, sep: "/") click to toggle source

Join the given arguments with the separator.

@overload join(part)

@param part [String, nil]
  First part to join.

@overload join(part)

@param ... [String, nil]
  Another part to join.

@param sep [String]

Part separator.

@return [String]

# File lib/rutter/naming.rb, line 90
def join(*part, sep: "/")
  part.reject { |s| s.nil? || s == "" }
      .join(sep)
end
route_name(string) click to toggle source

Normalize the given string/symbol to a valid route name.

@param string [String, Symbol]

Name to be normalized.

@return [Symbol]

Normalized route name.
# File lib/rutter/naming.rb, line 58
def route_name(string)
  string = underscore(string)
  string.tr!("/", "_")
  string.gsub!(/[_]{2,}/, "_")
  string.gsub!(/\A_|_\z/, "")
  string.to_sym
end
underscore(string) click to toggle source

Return a downcased and underscore separated version of the string.

Revised version of `Hanami::Utils::String.underscore` implementation.

@param string [String]

String to be transformed.

@return [String]

The transformed string.

@example

string = "RutterNaming"
Rutter::Naming.underscore(string) # => 'rutter_naming'
# File lib/rutter/naming.rb, line 21
def underscore(string)
  string = +string.to_s
  string.gsub!("::", "/")
  string.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
  string.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
  string.gsub!(/[[:space:]]|\-/, '\1_\2')
  string.downcase!
  string
end