diff --git a/bin/elixir-petstore.sh b/bin/elixir-petstore.sh index 915a02cfc05..5145f5b4dae 100755 --- a/bin/elixir-petstore.sh +++ b/bin/elixir-petstore.sh @@ -24,6 +24,11 @@ then mvn clean package fi +# remove existing lib and model file +echo "removing existing lib, model files" +rm -Rf "samples/client/petstore/elixir/lib/swagger_petstore/model/" +rm -Rf "samples/client/petstore/elixir/lib/swagger_petstore/lib/" + # if you've executed sbt assembly previously it will use that instead. export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" args="$@ generate -t modules/swagger-codegen/src/main/resources/elixir -i modules/swagger-codegen/src/test/resources/2_0/petstore-with-fake-endpoints-models-for-testing.yaml -l elixir -o samples/client/petstore/elixir" diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElixirClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElixirClientCodegen.java index c62cf74cd04..0df169706b7 100644 --- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElixirClientCodegen.java +++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/ElixirClientCodegen.java @@ -66,6 +66,7 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig /** * Reserved words. Override this with reserved words specific to your language + * Ref: https://github.com/itsgreggreg/elixir_quick_reference#reserved-words */ reservedWords = new HashSet( Arrays.asList( @@ -355,16 +356,49 @@ public class ElixirClientCodegen extends DefaultCodegen implements CodegenConfig if (name.length() == 0) { return "Default"; } - return initialCaps(name); + return camelize(name); } @Override public String toApiFilename(String name) { + // replace - with _ e.g. created-at => created_at + name = name.replaceAll("-", "_"); + + // e.g. PetApi.go => pet_api.go return underscore(name); } + @Override + public String toModelName(String name) { + // camelize the model name + // phone_number => PhoneNumber + return camelize(toModelFilename(name)); + } + @Override public String toModelFilename(String name) { + if (!StringUtils.isEmpty(modelNamePrefix)) { + name = modelNamePrefix + "_" + name; + } + + if (!StringUtils.isEmpty(modelNameSuffix)) { + name = name + "_" + modelNameSuffix; + } + + name = sanitizeName(name); + + // model name cannot use reserved keyword, e.g. return + if (isReservedWord(name)) { + LOGGER.warn(name + " (reserved word) cannot be used as model name. Renamed to " + ("model_" + name)); + name = "model_" + name; // e.g. return => ModelReturn (after camelize) + } + + // model name starts with number + if (name.matches("^\\d.*")) { + LOGGER.warn(name + " (model name starts with number) cannot be used as model name. Renamed to " + ("model_" + name)); + name = "model_" + name; // e.g. 200Response => Model200Response (after camelize) + } + return underscore(name); } diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/api/anotherFake.ex b/samples/client/petstore/elixir/lib/swagger_petstore/api/anotherFake.ex deleted file mode 100644 index 2a16a710eac..00000000000 --- a/samples/client/petstore/elixir/lib/swagger_petstore/api/anotherFake.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule SwaggerPetstore.Api.AnotherFake do - @moduledoc """ - Documentation for SwaggerPetstore.Api.AnotherFake. - """ - - use Tesla - - plug Tesla.Middleware.BaseUrl, "http://petstore.swagger.io:80/v2" - plug Tesla.Middleware.JSON - - @doc """ - To test special tags - - To test special tags - """ - def test_special_tags(body) do - method = [method: :patch] - url = [url: "/another-fake/dummy"] - query_params = [] - header_params = [] - body_params = [body: body] - form_params = [] - params = query_params ++ header_params ++ body_params ++ form_params - opts = [] - options = method ++ url ++ params ++ opts - - request(options) - end -end diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/api/fake.ex b/samples/client/petstore/elixir/lib/swagger_petstore/api/fake.ex index 369b2091029..0f9468166dc 100644 --- a/samples/client/petstore/elixir/lib/swagger_petstore/api/fake.ex +++ b/samples/client/petstore/elixir/lib/swagger_petstore/api/fake.ex @@ -274,21 +274,4 @@ defmodule SwaggerPetstore.Api.Fake do |> (&Connection.request(connection, &1)).() |> decode(false) end - - @doc """ - test json serialization of form data - """ - def test_json_form_data(param, param2) do - method = [method: :get] - url = [url: "/fake/jsonFormData"] - query_params = [] - header_params = [] - body_params = [] - form_params = [body: Enum.map_join([{:"param", param}, {:"param2", param2}], "&", &("#{elem(&1, 0)}=#{elem(&1, 1)}"))] - params = query_params ++ header_params ++ body_params ++ form_params - opts = [] - options = method ++ url ++ params ++ opts - - request(options) - end end diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/api/fakeClassnameTags123.ex b/samples/client/petstore/elixir/lib/swagger_petstore/api/fakeClassnameTags123.ex deleted file mode 100644 index cc0c2be0835..00000000000 --- a/samples/client/petstore/elixir/lib/swagger_petstore/api/fakeClassnameTags123.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule SwaggerPetstore.Api.FakeClassnameTags123 do - @moduledoc """ - Documentation for SwaggerPetstore.Api.FakeClassnameTags123. - """ - - use Tesla - - plug Tesla.Middleware.BaseUrl, "http://petstore.swagger.io:80/v2" - plug Tesla.Middleware.JSON - - @doc """ - To test class name in snake case - - - """ - def test_classname(body) do - method = [method: :patch] - url = [url: "/fake_classname_test"] - query_params = [] - header_params = [] - body_params = [body: body] - form_params = [] - params = query_params ++ header_params ++ body_params ++ form_params - opts = [] - options = method ++ url ++ params ++ opts - - request(options) - end -end diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/model/enum_test.ex b/samples/client/petstore/elixir/lib/swagger_petstore/model/enum_test.ex index d7a45b05854..efbc5dc8a12 100644 --- a/samples/client/petstore/elixir/lib/swagger_petstore/model/enum_test.ex +++ b/samples/client/petstore/elixir/lib/swagger_petstore/model/enum_test.ex @@ -2,7 +2,7 @@ # https://github.com/swagger-api/swagger-codegen.git # Do not edit the class manually. -defmodule SwaggerPetstore.Model.Enum_Test do +defmodule SwaggerPetstore.Model.EnumTest do @moduledoc """ """ @@ -16,7 +16,7 @@ defmodule SwaggerPetstore.Model.Enum_Test do ] end -defimpl Poison.Decoder, for: SwaggerPetstore.Model.Enum_Test do +defimpl Poison.Decoder, for: SwaggerPetstore.Model.EnumTest do import SwaggerPetstore.Deserializer def decode(value, options) do value diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/model/format_test.ex b/samples/client/petstore/elixir/lib/swagger_petstore/model/format_test.ex index 46e871e6f42..b612b5074c1 100644 --- a/samples/client/petstore/elixir/lib/swagger_petstore/model/format_test.ex +++ b/samples/client/petstore/elixir/lib/swagger_petstore/model/format_test.ex @@ -2,7 +2,7 @@ # https://github.com/swagger-api/swagger-codegen.git # Do not edit the class manually. -defmodule SwaggerPetstore.Model.Format_test do +defmodule SwaggerPetstore.Model.FormatTest do @moduledoc """ """ @@ -25,7 +25,7 @@ defmodule SwaggerPetstore.Model.Format_test do ] end -defimpl Poison.Decoder, for: SwaggerPetstore.Model.Format_test do +defimpl Poison.Decoder, for: SwaggerPetstore.Model.FormatTest do import SwaggerPetstore.Deserializer def decode(value, options) do value diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/model/200_response.ex b/samples/client/petstore/elixir/lib/swagger_petstore/model/model_200_response.ex similarity index 75% rename from samples/client/petstore/elixir/lib/swagger_petstore/model/200_response.ex rename to samples/client/petstore/elixir/lib/swagger_petstore/model/model_200_response.ex index a2889ebb9a4..0da12bc564e 100644 --- a/samples/client/petstore/elixir/lib/swagger_petstore/model/200_response.ex +++ b/samples/client/petstore/elixir/lib/swagger_petstore/model/model_200_response.ex @@ -2,7 +2,7 @@ # https://github.com/swagger-api/swagger-codegen.git # Do not edit the class manually. -defmodule SwaggerPetstore.Model.200_response do +defmodule SwaggerPetstore.Model.Model200Response do @moduledoc """ Model for testing model name starting with number """ @@ -14,7 +14,7 @@ defmodule SwaggerPetstore.Model.200_response do ] end -defimpl Poison.Decoder, for: SwaggerPetstore.Model.200_response do +defimpl Poison.Decoder, for: SwaggerPetstore.Model.Model200Response do def decode(value, _options) do value end diff --git a/samples/client/petstore/elixir/lib/swagger_petstore/model/__special[model/name].ex b/samples/client/petstore/elixir/lib/swagger_petstore/model/special_model_name.ex similarity index 71% rename from samples/client/petstore/elixir/lib/swagger_petstore/model/__special[model/name].ex rename to samples/client/petstore/elixir/lib/swagger_petstore/model/special_model_name.ex index f11d928a90f..0179846711e 100644 --- a/samples/client/petstore/elixir/lib/swagger_petstore/model/__special[model/name].ex +++ b/samples/client/petstore/elixir/lib/swagger_petstore/model/special_model_name.ex @@ -2,7 +2,7 @@ # https://github.com/swagger-api/swagger-codegen.git # Do not edit the class manually. -defmodule SwaggerPetstore.Model.$special[model.name] do +defmodule SwaggerPetstore.Model.SpecialModelName do @moduledoc """ """ @@ -13,7 +13,7 @@ defmodule SwaggerPetstore.Model.$special[model.name] do ] end -defimpl Poison.Decoder, for: SwaggerPetstore.Model.$special[model.name] do +defimpl Poison.Decoder, for: SwaggerPetstore.Model.SpecialModelName do def decode(value, _options) do value end