Class: KnowItAll::StringHelper

Inherits:
Object
  • Object
show all
Defined in:
lib/know_it_all/string_helper.rb

Constant Summary collapse

EMPTY_STRING =
''.freeze
UNDERSCORE_DIVISION_TARGET =
'\1_\2'.freeze
NAMESPACE_SEPARATOR =
'::'.freeze
CLASSIFY_SEPARATOR =
'_'.freeze
UNDERSCORE_SEPARATOR =
'/'.freeze
DASHERIZE_SEPARATOR =
'-'.freeze
CLASSIFY_WORD_SEPARATOR =
/#{CLASSIFY_SEPARATOR}|#{NAMESPACE_SEPARATOR}|#{UNDERSCORE_SEPARATOR}|#{DASHERIZE_SEPARATOR}/

Class Method Summary collapse

Class Method Details

.classify(string) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/know_it_all/string_helper.rb', line 15

def self.classify(string)
  string = string.to_s

  words = underscore(string).split(CLASSIFY_WORD_SEPARATOR).map!(&:capitalize)
  delimiters = string.scan(CLASSIFY_WORD_SEPARATOR)

  delimiters.map! do |delimiter|
    delimiter == CLASSIFY_SEPARATOR ? EMPTY_STRING : NAMESPACE_SEPARATOR
  end

  words.zip(delimiters).join
end

.underscore(string) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/know_it_all/string_helper.rb', line 28

def self.underscore(string)
  new_string = 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
end