-
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adds working inflection for middlenames, names and lastnames
Changes: 1. Adds public interface functions 2. Adds some basic setup for gender detection 3. Adds new tests and travis support 4. Change library main module name 5. Adds development config 6. Adds base store agent to be reused in any other agents
- Loading branch information
Showing
14 changed files
with
393 additions
and
66 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
language: elixir | ||
|
||
sudo: false | ||
|
||
elixir: | ||
- 1.4 | ||
|
||
otp_release: | ||
- 18.2 | ||
- 19.3 | ||
|
||
env: MIX_ENV=test | ||
|
||
script: | ||
- mix coveralls.travis | ||
- mix credo --strict | ||
|
||
notifications: | ||
email: false |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
use Mix.Config | ||
|
||
# Configure Petrovich to use `rules` submodule: | ||
config :petrovich_elixir, | ||
rules_path: "rules/rules.json", | ||
gender_path: "rules/gender.json" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,18 @@ | ||
%{"bunt": {:hex, :bunt, "0.2.0", "951c6e801e8b1d2cbe58ebbd3e616a869061ddadcc4863d0a2182541acae9a38", [:mix], [], "hexpm"}, | ||
"certifi": {:hex, :certifi, "1.2.1", "c3904f192bd5284e5b13f20db3ceac9626e14eeacfbb492e19583cf0e37b22be", [:rebar3], [], "hexpm"}, | ||
"credo": {:hex, :credo, "0.8.1", "137efcc99b4bc507c958ba9b5dff70149e971250813cbe7d4537ec7e36997402", [:mix], [{:bunt, "~> 0.2.0", [hex: :bunt, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"dialyxir": {:hex, :dialyxir, "0.5.0", "5bc543f9c28ecd51b99cc1a685a3c2a1a93216990347f259406a910cf048d1d7", [:mix], [], "hexpm"}, | ||
"earmark": {:hex, :earmark, "1.2.2", "f718159d6b65068e8daeef709ccddae5f7fdc770707d82e7d126f584cd925b74", [:mix], [], "hexpm"}, | ||
"ex_doc": {:hex, :ex_doc, "0.16.1", "b4b8a23602b4ce0e9a5a960a81260d1f7b29635b9652c67e95b0c2f7ccee5e81", [:mix], [{:earmark, "~> 1.1", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"excoveralls": {:hex, :excoveralls, "0.7.0", "05cb3332c2b0f799df3ab90eb7df1ae5a147c86776e91792848a12b7ed87242f", [:mix], [{:exjsx, ">= 3.0.0", [hex: :exjsx, repo: "hexpm", optional: false]}, {:hackney, ">= 0.12.0", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"exjsx": {:hex, :exjsx, "4.0.0", "60548841e0212df401e38e63c0078ec57b33e7ea49b032c796ccad8cde794b5c", [:mix], [{:jsx, "~> 2.8.0", [hex: :jsx, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"hackney": {:hex, :hackney, "1.8.6", "21a725db3569b3fb11a6af17d5c5f654052ce9624219f1317e8639183de4a423", [:rebar3], [{:certifi, "1.2.1", [hex: :certifi, repo: "hexpm", optional: false]}, {:idna, "5.0.2", [hex: :idna, repo: "hexpm", optional: false]}, {:metrics, "1.0.1", [hex: :metrics, repo: "hexpm", optional: false]}, {:mimerl, "1.0.2", [hex: :mimerl, repo: "hexpm", optional: false]}, {:ssl_verify_fun, "1.1.1", [hex: :ssl_verify_fun, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"idna": {:hex, :idna, "5.0.2", "ac203208ada855d95dc591a764b6e87259cb0e2a364218f215ad662daa8cd6b4", [:rebar3], [{:unicode_util_compat, "0.2.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"jsx": {:hex, :jsx, "2.8.2", "7acc7d785b5abe8a6e9adbde926a24e481f29956dd8b4df49e3e4e7bcc92a018", [:mix, :rebar3], [], "hexpm"}, | ||
"meck": {:hex, :meck, "0.8.4", "59ca1cd971372aa223138efcf9b29475bde299e1953046a0c727184790ab1520", [:make, :rebar], [], "hexpm"}, | ||
"metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm"}, | ||
"mimerl": {:hex, :mimerl, "1.0.2", "993f9b0e084083405ed8252b99460c4f0563e41729ab42d9074fd5e52439be88", [:rebar3], [], "hexpm"}, | ||
"mock": {:hex, :mock, "0.2.1", "bfdba786903e77f9c18772dee472d020ceb8ef000783e737725a4c8f54ad28ec", [:mix], [{:meck, "~> 0.8.2", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm"}, | ||
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}} | ||
"poison": {:hex, :poison, "3.1.0", "d9eb636610e096f86f25d9a46f35a9facac35609a7591b3be3326e99a0484665", [:mix], [], "hexpm"}, | ||
"ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.1", "28a4d65b7f59893bc2c7de786dec1e1555bd742d336043fe644ae956c3497fbe", [:make, :rebar], [], "hexpm"}, | ||
"unicode_util_compat": {:hex, :unicode_util_compat, "0.2.0", "dbbccf6781821b1c0701845eaf966c9b6d83d7c3bfc65ca2b78b88b8678bfa35", [:rebar3], [], "hexpm"}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
defmodule PetrovichTest.ConfigTest do | ||
use ExUnit.Case | ||
|
||
test "config can read regular config values" do | ||
Application.put_env(:petrovich_elixir, :test_var, "test") | ||
|
||
assert Petrovich.Config.get_env(:petrovich_elixir, :test_var) == "test" | ||
end | ||
|
||
test "config can read environment variables" do | ||
System.put_env("TEST_VAR", "test_env_vars") | ||
Application.put_env( | ||
:petrovich_elixir, | ||
:test_env_var, | ||
{:system, "TEST_VAR"}) | ||
|
||
assert Petrovich.Config.get_env( | ||
:petrovich_elixir, :test_env_var) == "test_env_vars" | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
149 changes: 149 additions & 0 deletions
149
test/petrovich_elixir_test/parser_test/lastname_test.exs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
defmodule PetrovichTest.ParserTest.LastName.Normal do | ||
use ExUnit.Case | ||
|
||
alias Petrovich.Parser | ||
|
||
setup do | ||
values = %{ | ||
nomenative: [ | ||
{:male, "Соболев", "Соболев"}, | ||
{:female, "Горева", "Горева"} | ||
], | ||
|
||
genitive: [ | ||
{:male, "Соболев", "Соболева"}, | ||
{:female, "Горева", "Горевой"} | ||
], | ||
|
||
dative: [ | ||
{:male, "Соболев", "Соболеву"}, | ||
{:female, "Горева", "Горевой"} | ||
], | ||
|
||
accusative: [ | ||
{:male, "Соболев", "Соболева"}, | ||
{:female, "Горева", "Гореву"} | ||
], | ||
|
||
instrumental: [ | ||
{:male, "Соболев", "Соболевым"}, | ||
{:female, "Горева", "Горевой"} | ||
], | ||
|
||
prepositional: [ | ||
{:male, "Соболев", "Соболеве"}, | ||
{:female, "Горева", "Горевой"} | ||
] | ||
} | ||
{:ok, values: values} | ||
end | ||
|
||
test "parses nomenative name", %{values: values} do | ||
for {gender, name, result} <- values.nomenative do | ||
assert Parser.parse(name, :lastname, :nomenative, gender) == result | ||
end | ||
end | ||
|
||
test "parses genitive name", %{values: values} do | ||
for {gender, name, result} <- values.genitive do | ||
assert Parser.parse(name, :lastname, :genitive, gender) == result | ||
end | ||
end | ||
|
||
test "parses dative name", %{values: values} do | ||
for {gender, name, result} <- values.dative do | ||
assert Parser.parse(name, :lastname, :dative, gender) == result | ||
end | ||
end | ||
|
||
test "parses accusative name", %{values: values} do | ||
for {gender, name, result} <- values.accusative do | ||
assert Parser.parse(name, :lastname, :accusative, gender) == result | ||
end | ||
end | ||
|
||
test "parses instrumental name", %{values: values} do | ||
for {gender, name, result} <- values.instrumental do | ||
assert Parser.parse(name, :lastname, :instrumental, gender) == result | ||
end | ||
end | ||
|
||
test "parses prepositional name", %{values: values} do | ||
for {gender, name, result} <- values.prepositional do | ||
assert Parser.parse(name, :lastname, :prepositional, gender) == result | ||
end | ||
end | ||
end | ||
|
||
|
||
|
||
defmodule PetrovichTest.ParserTest.LastName.Multipart do | ||
use ExUnit.Case | ||
|
||
alias Petrovich.Parser | ||
|
||
setup do | ||
values = %{ | ||
nomenative: [ | ||
{:male, "Соболев-Водкин", "Соболев-Водкин"}, | ||
], | ||
|
||
genitive: [ | ||
{:male, "Соболев-Водкин", "Соболева-Водкина"}, | ||
], | ||
|
||
dative: [ | ||
{:male, "Соболев-Водкин", "Соболеву-Водкину"}, | ||
], | ||
|
||
accusative: [ | ||
{:male, "Соболев-Водкин", "Соболева-Водкина"}, | ||
], | ||
|
||
instrumental: [ | ||
{:male, "Соболев-Водкин", "Соболевым-Водкиным"}, | ||
], | ||
|
||
prepositional: [ | ||
{:male, "Соболев-Водкин", "Соболеве-Водкине"}, | ||
] | ||
} | ||
{:ok, values: values} | ||
end | ||
|
||
test "parses nomenative name", %{values: values} do | ||
for {gender, name, result} <- values.nomenative do | ||
assert Parser.parse(name, :lastname, :nomenative, gender) == result | ||
end | ||
end | ||
|
||
test "parses genitive name", %{values: values} do | ||
for {gender, name, result} <- values.genitive do | ||
assert Parser.parse(name, :lastname, :genitive, gender) == result | ||
end | ||
end | ||
|
||
test "parses dative name", %{values: values} do | ||
for {gender, name, result} <- values.dative do | ||
assert Parser.parse(name, :lastname, :dative, gender) == result | ||
end | ||
end | ||
|
||
test "parses accusative name", %{values: values} do | ||
for {gender, name, result} <- values.accusative do | ||
assert Parser.parse(name, :lastname, :accusative, gender) == result | ||
end | ||
end | ||
|
||
test "parses instrumental name", %{values: values} do | ||
for {gender, name, result} <- values.instrumental do | ||
assert Parser.parse(name, :lastname, :instrumental, gender) == result | ||
end | ||
end | ||
|
||
test "parses prepositional name", %{values: values} do | ||
for {gender, name, result} <- values.prepositional do | ||
assert Parser.parse(name, :lastname, :prepositional, gender) == result | ||
end | ||
end | ||
end |
76 changes: 76 additions & 0 deletions
76
test/petrovich_elixir_test/parser_test/middlename_test.exs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
defmodule PetrovichTest.ParserTest.MiddleName.Normal do | ||
use ExUnit.Case | ||
|
||
alias Petrovich.Parser | ||
|
||
setup do | ||
values = %{ | ||
nomenative: [ | ||
{:male, "Андреевич", "Андреевич"}, | ||
{:female, "Викторовна", "Викторовна"} | ||
], | ||
|
||
genitive: [ | ||
{:male, "Андреевич", "Андреевича"}, | ||
{:female, "Викторовна", "Викторовны"} | ||
], | ||
|
||
dative: [ | ||
{:male, "Андреевич", "Андреевичу"}, | ||
{:female, "Викторовна", "Викторовне"} | ||
], | ||
|
||
accusative: [ | ||
{:male, "Андреевич", "Андреевича"}, | ||
{:female, "Викторовна", "Викторовну"} | ||
], | ||
|
||
instrumental: [ | ||
{:male, "Андреевич", "Андреевичем"}, | ||
{:female, "Викторовна", "Викторовной"} | ||
], | ||
|
||
prepositional: [ | ||
{:male, "Андреевич", "Андреевиче"}, | ||
{:female, "Викторовна", "Викторовне"} | ||
] | ||
} | ||
{:ok, values: values} | ||
end | ||
|
||
test "parses nomenative name", %{values: values} do | ||
for {gender, name, result} <- values.nomenative do | ||
assert Parser.parse(name, :middlename, :nomenative, gender) == result | ||
end | ||
end | ||
|
||
test "parses genitive name", %{values: values} do | ||
for {gender, name, result} <- values.genitive do | ||
assert Parser.parse(name, :middlename, :genitive, gender) == result | ||
end | ||
end | ||
|
||
test "parses dative name", %{values: values} do | ||
for {gender, name, result} <- values.dative do | ||
assert Parser.parse(name, :middlename, :dative, gender) == result | ||
end | ||
end | ||
|
||
test "parses accusative name", %{values: values} do | ||
for {gender, name, result} <- values.accusative do | ||
assert Parser.parse(name, :middlename, :accusative, gender) == result | ||
end | ||
end | ||
|
||
test "parses instrumental name", %{values: values} do | ||
for {gender, name, result} <- values.instrumental do | ||
assert Parser.parse(name, :middlename, :instrumental, gender) == result | ||
end | ||
end | ||
|
||
test "parses prepositional name", %{values: values} do | ||
for {gender, name, result} <- values.prepositional do | ||
assert Parser.parse(name, :middlename, :prepositional, gender) == result | ||
end | ||
end | ||
end |
Oops, something went wrong.