module PolyglotIos module Helper module General include Terminal ESCAPE_KEYWORDS = ["associatedtype", "class", "deinit", "enum", "extension", "fileprivate", "func", "import", "init", "inout", "internal", "let", "operator", "private", "protocol", "public", "static", "struct", "subscript", "typealias", "var", "break", "case", "continue", "default", "defer", "do", "else", "fallthrough", "for", "guard", "if", "in", "repeat", "return", "switch", "where", "while", "as", "Any", "catch", "false", "is", "nil", "rethrows", "super", "self", "Self", "throw", "throws", "true", "try", "_"] def token @token ||= PolyglotIos::IO::Token.read(token_env_variable) if @token.to_s.empty? prompt.error("No Auth Token provided!\n") prompt.warn(generate_token_message(token_env_variable)) exit end @token end def config @config ||= PolyglotIos::IO::Config.read.with_indifferent_access end def project_configs @project_configs ||= config[:projects] end def programming_language @programming_language ||= config[:language] end def skip_writing_language_struct @skip_writing_language_struct ||= config[:skip_writing_language_struct] end def use_old_naming @useOldNaming ||= config[:useOldNaming] end def url @url ||= config[:url] || PolyglotIos::DEFAULT_API_URL end def token_env_variable begin @token_env_variable ||= config[:token_env_variable] || PolyglotIos::DEFAULT_TOKEN_ENVIRONMENT_VARIABLE rescue @token_env_variable = PolyglotIos::DEFAULT_TOKEN_ENVIRONMENT_VARIABLE end end def indent(level = 0, initial = "") (1..level) .to_a.reduce("") { |result, value| result + " " } .concat(initial) end def clean_enum_name(name) clean_name = name .split(/[^0-9a-zA-Z]/) .reject { |c| c.empty? } .map { |value| value.capitalize } .join escape_with_underscore_if_needed(clean_name) end def clean_case_name(name) clean_variable_name(name) end def clean_variable_name(name) clean_name = name .split(/[^0-9a-zA-Z]/) .reject { |c| c.empty? } .each_with_index .map { |value, index| index == 0 ? value.downcase : value.capitalize } .join escaped_underscore = escape_with_underscore_if_needed(clean_name) escape_keyword_if_needed(escaped_underscore) end def escape_with_underscore_if_needed(name) return name if name.match(/^[A-Za-z_]/) "_" + name end def escape_keyword_if_needed(name) return name if !ESCAPE_KEYWORDS.include? name "`#{name}`" end end end end