Module: StewEucen::Acts::IntactCase::String

Defined in:
lib/intact_case/modules.rb

Overview

Methods to include into String class.

Examples:

Include into String class.

String.send :include, StewEucen::Acts::IntactCase::String

Author:

  • StewEucen

Since:

  • Release 1.0.0

Instance Method Summary collapse

Instance Method Details

#camelize(delimiter = '_') ⇒ string

Convert compound words to camelCase from delimiterized.

Examples:

delimiterized to camelCase.

'snake_case'.camelize         #=> 'snakeCase'
'get_utc__day'.camelize       #=> 'getUTCDay'
'ui__view'.camelize           #=> 'ui_View'
'xml__html__request'.camelize #=> 'xml_HTMLRequest'

Parameters:

  • delimiter (string) (defaults to: '_')

    Delimiter.

Returns:

  • (string)

    camelCase String.

Author:

  • StewEucen

Since:

  • Release 1.0.0



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/intact_case/modules.rb', line 42

def camelize(delimiter = '_')
  d = Regexp.escape(delimiter)

  camel_head    = "^([a-z]{2,}#{d})(?:#{d}|$)"  # can not use (?![a-z]) because (?:)
  capitalize    = "(?<=#{d})([a-z])"
  rear_acronym  = "(?!^)([a-z]+)#{d}(?![a-z])"
  cut_delimiter = "(?<=^|[a-z]{2})#{d}|#{d}(?=[a-z]{2,}(?:#{d}[a-z]|$))"

  cases_pattern = /#{camel_head}|#{capitalize}|#{rear_acronym}|#{cut_delimiter}/
  self.gsub(cases_pattern) { "#{$1}" + "#{$2}#{$3}".upcase }
end

#delimiterize(delimiter = '_', as_vendor_prefix = false) ⇒ string

Convert compound words connected by a delimiter from camelCase|StudlyCaps.

Examples:

camelCase|StudlyCaps to delimiterized.

'camelCase'.delimiterize             #=> 'camel_case'
'StudlyCaps'.delimiterize('_', true) #=> '_studly_caps'
'chainCase'.delimiterize('-')        #=> 'chain-case'
'getUTCDay'.delimiterize             #=> 'get_utc__day'
'UIView'.delimiterize                #=> 'ui__view'
'XML_HTMLRequest'.delimiterize       #=> 'xml__html__request'

Parameters:

  • delimiter (string) (defaults to: '_')

    Concatenate tokens with between delimiter.

  • as_vendor_prefix (boolean) (defaults to: false)

    Treat as vendor-prefix (CSS).

Returns:

  • (string)

    Delimiterized compound words.

Author:

  • StewEucen

Since:

  • Release 1.0.0



87
88
89
90
91
92
93
94
95
96
97
# File 'lib/intact_case/modules.rb', line 87

def delimiterize(delimiter = '_', as_vendor_prefix = false)
  d = Regexp.escape(delimiter)

  before_acronym = "(?:^[a-z]{2,}#{d}|[a-z])(?=[A-Z](?![a-z]))"
  after_acronym  = "[A-Z]{2,}(?![a-z])"
  before_capital = "(?!^)(?=[A-Z][a-z])"
  p = /#{before_acronym}|#{after_acronym}|#{before_capital}/;

  head_delimiter = as_vendor_prefix && /^[A-Z]/ =~ self ? delimiter : ''
  head_delimiter + self.gsub(p) { $& + delimiter }.downcase
end

#hyphenated(as_vendor_prefix = false) ⇒ string

Hyphenate compound words from camelCase|StudlyCaps.

Examples:

camelCase|StudlyCaps to hyphenated string.

'chainCase'.hyphenated          #=> 'chain-case'
'VendorPrefix'.hyphenated(true) #=> '-vendor-prefix'
'camelCase'.hyphenated(true)    #=> 'camel-case'

Parameters:

  • as_vendor_prefix (boolean) (defaults to: false)

    Treat as vendor-prefix (CSS).

Returns:

  • (string)

    Hyphenated string.

Author:

  • StewEucen

Since:

  • Release 1.0.0



111
112
113
# File 'lib/intact_case/modules.rb', line 111

def hyphenated(as_vendor_prefix = false)
  self.delimiterize('-', as_vendor_prefix)
end

#lc_first(delimiter = '_') ⇒ string

Uncapitalize first word in compound words. When first word is acronym, convert it to delimiterized string.

Examples:

camelCase from StudlyCaps

'StudlyCaps'.lc_first #=> 'studlyCaps'
'UIView'.lc_first     #=> 'ui_View'

Parameters:

  • delimiter (string) (defaults to: '_')

    Delimiter after acronym.

Returns:

  • (string)

    camelCase (= uncapitalized StudlyCaps).

Author:

  • StewEucen

Since:

  • Release 1.0.0



212
213
214
# File 'lib/intact_case/modules.rb', line 212

def lc_first(delimiter = '_')
  self.delimiterize(delimiter).camelize(delimiter)
end

#studly_caps(delimiter = '_') ⇒ string

Convert compound words to StudlyCaps from delimiterized string.

Examples:

delimiterized to StudlyCaps.

'snake_case'.studly_caps         #=> 'SnakeCase'
'get_utc__day'.studly_caps       #=> 'GetUTCDay'
'ui__view'.studly_caps           #=> 'UIView'
'xml__html__request'.studly_caps #=> 'XML_HTMLRequest'

Parameters:

  • delimiter (string) (defaults to: '_')

    Delimiter.

Returns:

  • (string)

    StudlyCaps string.

Author:

  • StewEucen

Since:

  • Release 1.0.0



67
68
69
# File 'lib/intact_case/modules.rb', line 67

def studly_caps(delimiter = '_')
  ((self.start_with?(delimiter) ? '' : delimiter) + self).camel_case(delimiter)
end

#tokenize(delimiter = '_', raw_first = false) ⇒ array

Explode compound words to tokens.

Examples:

Tokens from compound words.

'camelCase'.tokenize            #=> ['Camel', 'Case']
'camelCase'.tokenize('_', true) #=> ['camel', 'Case']
'StudlyCaps'.tokenize           #=> ['Studly', 'Caps']
'snake_case'.tokenize           #=> ['snake', 'case']
'get_utc__day'.tokenize         #=> ['get', 'utc_', 'day']

Parameters:

  • delimiter (string) (defaults to: '_')

    Delimiter.

  • raw_first (boolean) (defaults to: false)

    Keep raw first word in tokens for camelCase.

Returns:

  • (array)

    Tokens except delimiter between acronym.

See Also:

  • _tokenize_from_delimiterized

Author:

  • StewEucen

Since:

  • Release 1.0.0



131
132
133
134
135
136
137
# File 'lib/intact_case/modules.rb', line 131

def tokenize(delimiter = '_', raw_first = false)
  if /[A-Z]/ =~ self then
    _tokenize_from_camelized(delimiter, raw_first)
  else
    _tokenize_from_delimiterized(delimiter)
  end
end

#uc_first(delimiter = '_') ⇒ string

Capitalize first word in compound words. When first word is acronym, convert it to StudlyCaps.

Examples:

StudlyCaps from camelCase

'camelCase'.uc_first       #=> 'CamelCase'
'xml_HTMLRequest'.uc_first #=> 'XML_HTMLRequest'

Parameters:

  • delimiter (string) (defaults to: '_')

    Delimiter after acronym.

Returns:

  • (string)

    StudlyCaps (= capitalized camelCase).

Author:

  • StewEucen

Since:

  • Release 1.0.0



196
197
198
# File 'lib/intact_case/modules.rb', line 196

def uc_first(delimiter = '_')
  self.delimiterize(delimiter).studly_caps(delimiter)
end