Core module functions
This commit is contained in:
parent
b3402f10d7
commit
9f6cf1e168
@ -1,2 +1,22 @@
|
|||||||
defmodule YandexTranslate do
|
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
|
end
|
||||||
|
@ -11,6 +11,16 @@ defmodule YandexTranslate.Client do
|
|||||||
|
|
||||||
alias YandexTranslate.Auth
|
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(headers \\ [])
|
||||||
|
|
||||||
defp generate_headers(header) when is_tuple(header),
|
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),
|
defp generate_glossary_pairs(glossary) when is_list(glossary),
|
||||||
do: glossary |> Enum.map(fn {from, to} -> %{sourceText: from, translatedText: to} end)
|
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),
|
defp transform_text(%{texts: text} = params) when is_binary(text),
|
||||||
do: %{params | texts: [text]}
|
do: %{params | texts: [text]}
|
||||||
|
|
||||||
@ -62,16 +74,6 @@ defmodule YandexTranslate.Client do
|
|||||||
|
|
||||||
defp valid_argument_keys(_), 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 parse(body), do: Jason.decode!(body)
|
||||||
|
|
||||||
defp fetch(method, headers, body) do
|
defp fetch(method, headers, body) do
|
||||||
|
@ -1,128 +1,3 @@
|
|||||||
# defmodule YandexTranslatorTest do
|
defmodule YandexTranslatorTest do
|
||||||
# use ExUnit.Case
|
use ExUnit.Case
|
||||||
|
end
|
||||||
# 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
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user