public RubyClientCodegen() {
    super();
    modelPackage = "models";
    apiPackage = "api";
    outputFolder = "generated-code" + File.separator + "ruby";
    modelTemplateFiles.put("model.mustache", ".rb");
    apiTemplateFiles.put("api.mustache", ".rb");
    embeddedTemplateDir = templateDir = "ruby";

    typeMapping.clear();
    languageSpecificPrimitives.clear();

    reservedWords =
        new HashSet<String>(
            Arrays.asList(
                // local variable names used in API methods (endpoints)
                "path",
                "query_params",
                "header_params",
                "_header_accept",
                "_header_accept_result",
                "_header_content_type",
                "form_params",
                "post_body",
                "auth_names",
                // ruby reserved keywords
                "__FILE__",
                "and",
                "def",
                "end",
                "in",
                "or",
                "self",
                "unless",
                "__LINE__",
                "begin",
                "defined?",
                "ensure",
                "module",
                "redo",
                "super",
                "until",
                "BEGIN",
                "break",
                "do",
                "false",
                "next",
                "rescue",
                "then",
                "when",
                "END",
                "case",
                "else",
                "for",
                "nil",
                "retry",
                "true",
                "while",
                "alias",
                "class",
                "elsif",
                "if",
                "not",
                "return",
                "undef",
                "yield"));

    languageSpecificPrimitives.add("int");
    languageSpecificPrimitives.add("array");
    languageSpecificPrimitives.add("map");
    languageSpecificPrimitives.add("string");
    languageSpecificPrimitives.add("DateTime");

    typeMapping.put("string", "String");
    typeMapping.put("char", "String");
    typeMapping.put("int", "Integer");
    typeMapping.put("integer", "Integer");
    typeMapping.put("long", "Integer");
    typeMapping.put("short", "Integer");
    typeMapping.put("float", "Float");
    typeMapping.put("double", "Float");
    typeMapping.put("number", "Float");
    typeMapping.put("date", "Date");
    typeMapping.put("DateTime", "DateTime");
    typeMapping.put("boolean", "BOOLEAN");
    typeMapping.put("array", "Array");
    typeMapping.put("List", "Array");
    typeMapping.put("map", "Hash");
    typeMapping.put("object", "Object");
    typeMapping.put("file", "File");

    // remove modelPackage and apiPackage added by default
    Iterator<CliOption> itr = cliOptions.iterator();
    while (itr.hasNext()) {
      CliOption opt = itr.next();
      if (CodegenConstants.MODEL_PACKAGE.equals(opt.getOpt())
          || CodegenConstants.API_PACKAGE.equals(opt.getOpt())) {
        itr.remove();
      }
    }
    cliOptions.add(
        new CliOption(GEM_NAME, "gem name (convention: underscore_case).")
            .defaultValue("swagger_client"));
    cliOptions.add(
        new CliOption(
                MODULE_NAME,
                "top module name (convention: CamelCase, usually corresponding" + " to gem name).")
            .defaultValue("SwaggerClient"));
    cliOptions.add(new CliOption(GEM_VERSION, "gem version.").defaultValue("1.0.0"));

    cliOptions.add(new CliOption(GEM_LICENSE, "gem license. ").defaultValue("Apache-2.0"));

    cliOptions.add(new CliOption(GEM_HOMEPAGE, "gem homepage. ").defaultValue("http://swagger.io"));

    cliOptions.add(
        new CliOption(GEM_SUMMARY, "gem summary. ")
            .defaultValue("A ruby wrapper for the swagger APIs"));

    cliOptions.add(
        new CliOption(GEM_DESCRIPTION, "gem description. ")
            .defaultValue("This gem maps to a swagger API"));

    cliOptions.add(new CliOption(GEM_AUTHOR, "gem author (only one is supported)."));

    cliOptions.add(new CliOption(GEM_AUTHOR_EMAIL, "gem author email (only one is supported)."));
  }