Class: Hanami::Utils::String
- Inherits:
-
Object
- Object
- Hanami::Utils::String
- Extended by:
- Transproc::Composer, Transproc::Registry
- Defined in:
- gems/gems/hanami-utils-1.3.3/lib/hanami/utils/string.rb,
gems/gems/hanami-utils-1.3.8/lib/hanami/utils/string.rb
Overview
String on steroids
Direct Known Subclasses
Class Method Summary collapse
-
.capitalize(input) ⇒ ::String
Returns a capitalized version of the string.
-
.classify(input) ⇒ ::String
Returns a CamelCase version of the string.
-
.dasherize(input) ⇒ Object
Hanami::Utils::String.dasherize(‘hanami_utils’) # => ‘hanami-utils’.
-
.demodulize(input) ⇒ ::String
Returns the string without the Ruby namespace of the class.
-
.namespace(input) ⇒ ::String
Returns the top level namespace name.
- .pluralize(input) ⇒ ::String deprecated Deprecated.
-
.rsub(input, pattern, replacement) ⇒ ::String
Replaces the rightmost match of
pattern
withreplacement
. - .singularize(input) ⇒ ::String deprecated Deprecated.
-
.titleize(input) ⇒ ::String
Returns a titleized version of the string.
-
.transform(input, *transformations) ⇒ ::String
Applies the given transformation(s) to
input
. -
.underscore(input) ⇒ ::String
Returns a downcased and underscore separated version of the string.
Instance Method Summary collapse
- #==(other) ⇒ TrueClass, FalseClass (also: #eql?) deprecated Deprecated.
- #capitalize ⇒ Hanami::Utils::String deprecated Deprecated.
-
#classify ⇒ Hanami::Utils::String
deprecated
Deprecated.
Use String.classify
-
#dasherize ⇒ Hanami::Utils::String
deprecated
Deprecated.
Use String.dasherize
- #demodulize ⇒ Hanami::Utils::String deprecated Deprecated.
- #gsub(pattern, replacement = nil, &blk) ⇒ ::String deprecated Deprecated.
- #hash ⇒ Integer deprecated Deprecated.
- #initialize(string) ⇒ Hanami::Utils::String constructor deprecated Deprecated.
-
#namespace ⇒ Hanami::Utils::String
deprecated
Deprecated.
Use String.namespace
-
#rsub(pattern, replacement) ⇒ Hanami::Utils::String
deprecated
Deprecated.
Use String.rsub
- #scan(pattern, &blk) ⇒ Array<::String> deprecated Deprecated.
- #split(pattern, limit = 0) ⇒ Array<::String> deprecated Deprecated.
-
#titleize ⇒ Hanami::Utils::String
deprecated
Deprecated.
Use String.titleize
- #to_s ⇒ ::String (also: #to_str) deprecated Deprecated.
- #tokenize { ... } ⇒ void deprecated Deprecated.
- #underscore ⇒ Hanami::Utils::String deprecated Deprecated.
Constructor Details
#initialize(string) ⇒ Hanami::Utils::String
Initialize the string
Source: | on GitHub
def initialize(string) @string = string.to_s end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method_name, *args, &blk) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Overrides Ruby’s method_missing in order to provide ::String interface
Source: | on GitHub
def method_missing(method_name, *args, &blk) raise NoMethodError.new(%(undefined method `#{method_name}' for "#{@string}":#{self.class})) unless respond_to?(method_name) s = @string.__send__(method_name, *args, &blk) s = self.class.new(s) if s.is_a?(::String) s end |
Class Method Details
.capitalize(input) ⇒ ::String
Returns a capitalized version of the string
Source: | on GitHub
def self.capitalize(input) string = ::String.new(input.to_s) head, *tail = underscore(string).split(CLASSIFY_SEPARATOR) tail.unshift(head.capitalize).join(CAPITALIZE_SEPARATOR) end |
.classify(input) ⇒ ::String
Returns a CamelCase version of the string
Source: | on GitHub
def self.classify(input) string = ::String.new(input.to_s) words = underscore(string).split(CLASSIFY_WORD_SEPARATOR).map!(&:capitalize) delimiters = underscore(string).scan(CLASSIFY_WORD_SEPARATOR) delimiters.map! do |delimiter| delimiter == CLASSIFY_SEPARATOR ? EMPTY_STRING : NAMESPACE_SEPARATOR end words.zip(delimiters).join end |
.dasherize(input) ⇒ Object
Hanami::Utils::String.dasherize(‘hanami_utils’) # => ‘hanami-utils’
Hanami::Utils::String.dasherize(‘HanamiUtils’) # => “hanami-utils”
Source: | on GitHub
def self.dasherize(input) string = ::String.new(input.to_s) underscore(string).split(CLASSIFY_SEPARATOR).join(DASHERIZE_SEPARATOR) end |
.demodulize(input) ⇒ ::String
Returns the string without the Ruby namespace of the class
Source: | on GitHub
def self.demodulize(input) ::String.new(input.to_s).split(NAMESPACE_SEPARATOR).last end |
.namespace(input) ⇒ ::String
Returns the top level namespace name
Source: | on GitHub
def self.namespace(input) ::String.new(input.to_s).split(NAMESPACE_SEPARATOR).first end |
.pluralize(input) ⇒ ::String
Returns a pluralized version of self.
.rsub(input, pattern, replacement) ⇒ ::String
Replaces the rightmost match of pattern
with replacement
If the pattern cannot be matched, it returns the original string.
This method does NOT mutate the original string.
Source: | on GitHub
def self.rsub(input, pattern, replacement) string = ::String.new(input.to_s) if i = string.rindex(pattern) # rubocop:disable Lint/AssignmentInCondition s = string.dup s[i] = replacement s else string end end |
.singularize(input) ⇒ ::String
Returns a singularized version of self.
.titleize(input) ⇒ ::String
Returns a titleized version of the string
Source: | on GitHub
def self.titleize(input) string = ::String.new(input.to_s) underscore(string).split(CLASSIFY_SEPARATOR).map(&:capitalize).join(TITLEIZE_SEPARATOR) end |
.transform(input, *transformations) ⇒ ::String
Applies the given transformation(s) to input
It performs a pipeline of transformations, by applying the given functions from Hanami::Utils::String
and ::String
. The transformations are applied in the given order.
It doesn’t mutate the input, unless you use destructive methods from ::String
Source: | on GitHub
def self.transform(input, *transformations) fn = @__transformations__.fetch_or_store(transformations.hash) do compose do |fns| transformations.each do |transformation, *args| fns << if transformation.is_a?(Proc) transformation elsif contain?(transformation) self[transformation, *args] elsif input.respond_to?(transformation) t(:bind, input, ->(i) { i.public_send(transformation, *args) }) else raise NoMethodError.new(%(undefined method `#{transformation.inspect}' for #{input.inspect}:#{input.class})) end end end end fn.call(input) end |
.underscore(input) ⇒ ::String
Returns a downcased and underscore separated version of the string
Revised version of ActiveSupport::Inflector.underscore
implementation
Source: | on GitHub
def self.underscore(input) string = ::String.new(input.to_s) string.gsub!(NAMESPACE_SEPARATOR, UNDERSCORE_SEPARATOR) string.gsub!(NAMESPACE_SEPARATOR, UNDERSCORE_SEPARATOR) string.gsub!(/([A-Z\d]+)([A-Z][a-z])/, UNDERSCORE_DIVISION_TARGET) string.gsub!(/([a-z\d])([A-Z])/, UNDERSCORE_DIVISION_TARGET) string.gsub!(/[[:space:]]|\-/, UNDERSCORE_DIVISION_TARGET) string.downcase end |
Instance Method Details
#==(other) ⇒ TrueClass, FalseClass Also known as: eql?
Equality
Source: | on GitHub
def ==(other) to_s == other end |
#capitalize ⇒ Hanami::Utils::String
Use capitalize
Returns a capitalized version of the string
Source: | on GitHub
def capitalize head, *tail = underscore.split(CLASSIFY_SEPARATOR) self.class.new( tail.unshift(head.capitalize).join(CAPITALIZE_SEPARATOR) ) end |
#classify ⇒ Hanami::Utils::String
Use classify
Returns a CamelCase version of the string
Source: | on GitHub
def classify words = underscore.split(CLASSIFY_WORD_SEPARATOR).map!(&:capitalize) delimiters = underscore.scan(CLASSIFY_WORD_SEPARATOR) delimiters.map! do |delimiter| delimiter == CLASSIFY_SEPARATOR ? EMPTY_STRING : NAMESPACE_SEPARATOR end self.class.new words.zip(delimiters).join end |
#dasherize ⇒ Hanami::Utils::String
Use dasherize
Returns a downcased and dash separated version of the string
Source: | on GitHub
def dasherize self.class.new underscore.split(CLASSIFY_SEPARATOR).join(DASHERIZE_SEPARATOR) end |
#demodulize ⇒ Hanami::Utils::String
Use demodulize
Returns the string without the Ruby namespace of the class
Source: | on GitHub
def demodulize self.class.new split(NAMESPACE_SEPARATOR).last end |
#gsub(pattern, replacement = nil, &blk) ⇒ ::String
Replaces the given pattern with the given replacement
Source: | on GitHub
def gsub(pattern, replacement = nil, &blk) if block_given? @string.gsub(pattern, &blk) else @string.gsub(pattern, replacement) end end |
#hash ⇒ Integer
Returns the hash of the internal string
Source: | on GitHub
def hash @string.hash end |
#namespace ⇒ Hanami::Utils::String
Use namespace
Returns the top level namespace name
Source: | on GitHub
def namespace self.class.new split(NAMESPACE_SEPARATOR).first end |
#rsub(pattern, replacement) ⇒ Hanami::Utils::String
Use rsub
Replaces the rightmost match of pattern
with replacement
If the pattern cannot be matched, it returns the original string.
This method does NOT mutate the original string.
Source: | on GitHub
def rsub(pattern, replacement) if i = rindex(pattern) # rubocop:disable Lint/AssignmentInCondition s = @string.dup s[i] = replacement self.class.new s else self end end |
#scan(pattern, &blk) ⇒ Array<::String>
Iterates through the string, matching the pattern. Either return all those patterns, or pass them to the block.
Source: | on GitHub
def scan(pattern, &blk) @string.scan(pattern, &blk) end |
#split(pattern, limit = 0) ⇒ Array<::String>
Splits the string with the given pattern
Source: | on GitHub
def split(pattern, limit = 0) @string.split(pattern, limit) end |
#titleize ⇒ Hanami::Utils::String
Use titleize
Returns a titleized version of the string
Source: | on GitHub
def titleize self.class.new underscore.split(CLASSIFY_SEPARATOR).map(&:capitalize).join(TITLEIZE_SEPARATOR) end |
#to_s ⇒ ::String Also known as: to_str
Returns a string representation
Source: | on GitHub
def to_s @string end |
#tokenize { ... } ⇒ void
This method returns an undefined value.
It iterates through the tokens and calls the given block. A token is a substring wrapped by ()
and separated by |
.
Source: | on GitHub
def tokenize if match = TOKENIZE_REGEXP.match(@string) # rubocop:disable Lint/AssignmentInCondition pre = match.pre_match post = match.post_match tokens = match[1].split(TOKENIZE_SEPARATOR) tokens.each do |token| yield(self.class.new("#{pre}#{token}#{post}")) end else yield(self.class.new(@string)) end nil end |
#underscore ⇒ Hanami::Utils::String
Use underscore
Returns a downcased and underscore separated version of the string
Revised version of ActiveSupport::Inflector.underscore
implementation
Source: | on GitHub
def underscore new_string = gsub(NAMESPACE_SEPARATOR, UNDERSCORE_SEPARATOR) new_string.gsub!(/([A-Z\d]+)([A-Z][a-z])/, UNDERSCORE_DIVISION_TARGET) new_string.gsub!(/([a-z\d])([A-Z])/, UNDERSCORE_DIVISION_TARGET) new_string.gsub!(/[[:space:]]|\-/, UNDERSCORE_DIVISION_TARGET) new_string.downcase! self.class.new new_string end |