Module: Flexor::CaseConversion

Defined in:
lib/flexor/case_conversion.rb

Overview

Pure-function utilities for converting between camelCase and snake_case. Used by the FlexKeys plugin to compute alternate key forms.

Constant Summary collapse

CAMEL_BOUNDARY =
/(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-z\d])(?=[A-Z])/
UNDERSCORE_SEGMENT =
%r{(?:_|(/))([a-z\d]*)}

Class Method Summary collapse

Class Method Details

.camelize(term) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/flexor/case_conversion.rb', line 11

def camelize(term)
  string = term.to_s.dup
  return string if string.empty?

  string.gsub!(UNDERSCORE_SEGMENT) do
    "#{Regexp.last_match(1) && "::"}#{Regexp.last_match(2).capitalize}"
  end
  return string if string.empty?

  string[0] = string[0].downcase
  string
end

.case_counterpart(key) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/flexor/case_conversion.rb', line 34

def case_counterpart(key)
  str = key.to_s
  if str.include?("_")
    camelize(str).to_sym
  elsif str.match?(/[A-Z]/)
    underscore(str).to_sym
  end
end

.underscore(camel_cased_word) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/flexor/case_conversion.rb', line 24

def underscore(camel_cased_word)
  return camel_cased_word.to_s.dup unless /[A-Z-]/.match?(camel_cased_word)

  word = camel_cased_word.to_s.dup
  word.gsub!(CAMEL_BOUNDARY, "_")
  word.tr!("-", "_")
  word.downcase!
  word
end