Class: Hanami::Utils::String
- Inherits:
 - 
      Object
      
        
- Object
 - Hanami::Utils::String
 
 
- Extended by:
 - Transproc::Composer, Transproc::Registry
 
- Defined in:
 - gems/gems/hanami-utils-1.3.2/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
patternwithreplacement. - .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  |