From 9f6cf1e168624d597a900035fb6da58936396175 Mon Sep 17 00:00:00 2001 From: Danylo Negriienko Date: Sun, 30 Jun 2019 09:19:38 +0300 Subject: [PATCH] Core module functions --- lib/yandex_translate.ex | 20 +++++ lib/yandex_translate/client.ex | 22 +++--- test/yandex_translate_test.exs | 131 +-------------------------------- 3 files changed, 35 insertions(+), 138 deletions(-) diff --git a/lib/yandex_translate.ex b/lib/yandex_translate.ex index 606aada..6122787 100755 --- a/lib/yandex_translate.ex +++ b/lib/yandex_translate.ex @@ -1,2 +1,22 @@ defmodule YandexTranslate do + alias YandexTranslate.Client + + def languages(), do: Client.call(:listLanguages, %{}) + + def detect(params) when is_map(params), do: Client.call(:detectLanguage, params) + def detect(text) when is_binary(text), do: Client.call(:detectLanguage, %{text: text}) + + def translate(params) when is_map(params), do: Client.call(:translate, params) + + def translate(text, targetLanguageCode) when is_binary(text) and is_binary(targetLanguageCode), + do: Client.call(:translate, %{texts: [text], targetLanguageCode: targetLanguageCode}) + + def translate(text, targetLanguageCode, sourceLanguageCode) + when is_binary(text) and is_binary(targetLanguageCode) and is_binary(sourceLanguageCode), + do: + Client.call(:translate, %{ + texts: [text], + targetLanguageCode: targetLanguageCode, + sourceLanguageCode: sourceLanguageCode + }) end diff --git a/lib/yandex_translate/client.ex b/lib/yandex_translate/client.ex index 25e282e..1c30b41 100644 --- a/lib/yandex_translate/client.ex +++ b/lib/yandex_translate/client.ex @@ -11,6 +11,16 @@ defmodule YandexTranslate.Client do alias YandexTranslate.Auth + def call(method \\ :listLanguages, args \\ %{}) + when method in @availaible_api_methods and is_map(args) do + body = generate_body(method, args) + headers = generate_headers() + + method + |> fetch(headers, body) + |> parse() + end + defp generate_headers(headers \\ []) defp generate_headers(header) when is_tuple(header), @@ -47,6 +57,8 @@ defmodule YandexTranslate.Client do defp generate_glossary_pairs(glossary) when is_list(glossary), do: glossary |> Enum.map(fn {from, to} -> %{sourceText: from, translatedText: to} end) + defp transform_text(%{texts: texts} = params) when is_list(texts), do: params + defp transform_text(%{texts: text} = params) when is_binary(text), do: %{params | texts: [text]} @@ -62,16 +74,6 @@ defmodule YandexTranslate.Client do defp valid_argument_keys(_), do: [] - def call(method \\ :listLanguages, args \\ %{}) - when method in @availaible_api_methods and is_map(args) do - body = generate_body(method, args) - headers = generate_headers() - - method - |> fetch(headers, body) - |> parse() - end - defp parse(body), do: Jason.decode!(body) defp fetch(method, headers, body) do diff --git a/test/yandex_translate_test.exs b/test/yandex_translate_test.exs index ee8a89b..a657416 100755 --- a/test/yandex_translate_test.exs +++ b/test/yandex_translate_test.exs @@ -1,128 +1,3 @@ -# defmodule YandexTranslatorTest do -# use ExUnit.Case - -# setup_all do -# {:ok, %{"iamToken" => iam_token}} = YandexTranslator.get_iam_token -# {:ok, iam_token: iam_token} -# end - -# describe "cloud api" do -# test "request for getting languages with invalid key" do -# {:error, %{"error_message" => error_message}} = YandexTranslator.langs([iam_token: "1"]) - -# assert error_message == "rpc error: code = Unauthenticated desc = invalid auth data" -# end - -# test "request for detecting language with invalid key" do -# {:error, %{"error_message" => error_message}} = YandexTranslator.detect([iam_token: "1", text: "Hello"]) - -# assert error_message == "rpc error: code = Unauthenticated desc = invalid auth data" -# end - -# test "request for translating text with invalid key" do -# {:error, %{"error_message" => error_message}} = YandexTranslator.translate([iam_token: "1", text: "Hello", lang: "ru"]) - -# assert error_message == "rpc error: code = Unauthenticated desc = invalid auth data" -# end - -# test "request for getting languages", state do -# {:ok, %{"languages" => languages}} = YandexTranslator.langs([iam_token: state[:iam_token]]) - -# assert is_list(languages) == true -# end - -# test "request for detecting language", state do -# {:ok, %{"language" => language}} = YandexTranslator.detect([iam_token: state[:iam_token], text: "Hello"]) - -# assert language == "en" -# end - -# test "request for translating text", state do -# {:ok, %{"translations" => [%{"text" => text}]}} = YandexTranslator.translate([iam_token: state[:iam_token], text: "Hello", target: "es"]) - -# assert text == "Saludar" -# end -# end - -# describe "old api, invalid requests" do -# test "request for getting languages with invalid key" do -# {:error, %{"code" => code, "message" => message}} = YandexTranslator.langs([key: "", format: "json"]) - -# assert code == 401 -# assert message == "API key is invalid" -# end - -# test "request for getting languages with invalid key, xml format" do -# {:error, body} = YandexTranslator.langs([key: ""]) - -# assert String.length(body) != 0 -# end - -# test "request for detecting language with invalid key" do -# {:error, %{"code" => code, "message" => message}} = YandexTranslator.detect([key: "", text: "Hello", format: "json"]) - -# assert code == 401 -# assert message == "API key is invalid" -# end - -# test "request for detecting language with invalid key, xml format" do -# {:error, body} = YandexTranslator.detect([key: "", text: "Hello"]) - -# assert String.length(body) != 0 -# end - -# test "request for translating text with invalid key" do -# {:error, %{"code" => code, "message" => message}} = YandexTranslator.translate([key: "", text: "Hello", lang: "ru", format: "json"]) - -# assert code == 401 -# assert message == "API key is invalid" -# end - -# test "request for translating text with invalid key, xml format" do -# {:error, body} = YandexTranslator.translate([key: "", text: "Hello", lang: "ru"]) - -# assert String.length(body) != 0 -# end -# end - -# describe "old api, valid requests" do -# test "request for getting languages" do -# {:ok, %{"dirs" => dirs}} = YandexTranslator.langs([format: "json"]) - -# assert is_list(dirs) == true -# end - -# test "request for getting languages, xml format" do -# {:ok, body} = YandexTranslator.langs - -# assert String.length(body) != 0 -# end - -# test "request for detecting language" do -# {:ok, %{"code" => code, "lang" => lang}} = YandexTranslator.detect([text: "Hello", format: "json"]) - -# assert code == 200 -# assert lang == "en" -# end - -# test "request for detecting language, xml format" do -# {:ok, body} = YandexTranslator.detect([text: "Hello"]) - -# assert String.length(body) != 0 -# end - -# test "request for translating text" do -# {:ok, %{"code" => code, "lang" => lang, "text" => text}} = YandexTranslator.translate([text: "Hello", lang: "ru", format: "json"]) - -# assert code == 200 -# assert lang == "en-ru" -# assert text == ["Привет"] -# end - -# test "request for translating text, xml format" do -# {:ok, body} = YandexTranslator.translate([text: "Hello", lang: "ru"]) - -# assert String.length(body) != 0 -# end -# end -# end +defmodule YandexTranslatorTest do + use ExUnit.Case +end