module Xcodeproj::Project::Object::CaseConverter

def self.camelize(term, uppercase_first_letter: true)

def self.camelize(term, uppercase_first_letter: true)
  string = term.to_s
  string = if uppercase_first_letter
             string.sub(/^[a-z\d]*/, &:capitalize)
           else
             string.sub(/^(?:(?=a)b(?=\b|[A-Z_])|\w)/, &:downcase)
           end
  string.gsub!(%r{(?:_|(/))([a-z\d]*)}i) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" }
  string.gsub!('/'.freeze, '::'.freeze)
  string
end

def self.convert_to_plist(name, type = nil)

Parameters:
  • type (Symbol, Nil) --
  • name (Symbol, String) --

Returns:
  • (String) - The plist equivalent of the given Ruby name.
def self.convert_to_plist(name, type = nil)
  case name
  when :remote_global_id_string
    'remoteGlobalIDString'
  else
    if type == :lower
      cache = plist_cache[:lower] ||= {}
      cache[name] ||= camelize(name, :uppercase_first_letter => false)
    else
      cache = plist_cache[:normal] ||= {}
      cache[name] ||= camelize(name)
    end
  end
end

def self.convert_to_ruby(name)

Parameters:
  • name (String) --

Returns:
  • (Symbol) - The Ruby equivalent of the given plist name.
def self.convert_to_ruby(name)
  underscore(name.to_s).to_sym
end

def self.plist_cache

Other tags:
    Note: - A cache is used because this operation is performed for each

Returns:
  • (Hash) - A cache for the conversion to the Plist format.
def self.plist_cache
  @plist_cache ||= {}
end

def self.underscore(camel_cased_word)

def self.underscore(camel_cased_word)
  return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
  word = camel_cased_word.to_s.gsub('::'.freeze, '/'.freeze)
  word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)((?=a)b)(?=\b|[^a-z])/) { "#{Regexp.last_match(1) && '_'.freeze}#{Regexp.last_match(2).downcase}" }
  word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze)
  word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze)
  word.tr!('-'.freeze, '_'.freeze)
  word.downcase!
  word
end