Skip to content

Commit

Permalink
Merge 625567a into 1b070bc
Browse files Browse the repository at this point in the history
  • Loading branch information
mixamlv committed Mar 26, 2018
2 parents 1b070bc + 625567a commit 7ccab0c
Show file tree
Hide file tree
Showing 10 changed files with 269 additions and 9 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,6 @@
# sonar
sonar-project.properties

# idea
# intellij
.idea
*.iml
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -96,3 +96,7 @@ modifyPom {
}
}
}

checkstyle {
toolVersion = "5.9"
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import static pl.allegro.finance.tradukisto.internal.Container.polishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.brazilianPortugueseContainer;
import static pl.allegro.finance.tradukisto.internal.Container.russianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.latvianContainer;

public enum MoneyConverters {

Expand All @@ -19,7 +20,8 @@ public enum MoneyConverters {
RUSSIAN_BANKING_MONEY_VALUE(russianContainer().getBankingMoneyConverter()),
POLISH_BANKING_MONEY_VALUE(polishContainer().getBankingMoneyConverter()),
CZECH_BANKING_MONEY_VALUE(czechContainer().getBankingMoneyConverter()),
ENGLISH_BANKING_MONEY_VALUE(englishContainer().getBankingMoneyConverter());
ENGLISH_BANKING_MONEY_VALUE(englishContainer().getBankingMoneyConverter()),
LATVIAN_BANKING_MONEY_VALUE(latvianContainer().getBankingMoneyConverter());

private final BigDecimalToStringConverter converter;

Expand Down
10 changes: 3 additions & 7 deletions src/main/java/pl/allegro/finance/tradukisto/ValueConverters.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@
import pl.allegro.finance.tradukisto.internal.IntegerToStringConverter;

import static com.google.common.base.Verify.verifyNotNull;
import static pl.allegro.finance.tradukisto.internal.Container.czechContainer;
import static pl.allegro.finance.tradukisto.internal.Container.englishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.germanContainer;
import static pl.allegro.finance.tradukisto.internal.Container.brazilianPortugueseContainer;
import static pl.allegro.finance.tradukisto.internal.Container.polishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.russianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.*;

public enum ValueConverters {

Expand All @@ -17,7 +12,8 @@ public enum ValueConverters {
POLISH_INTEGER(polishContainer().getNumbersConverter()),
RUSSIAN_INTEGER(russianContainer().getNumbersConverter()),
CZECH_INTEGER(czechContainer().getNumbersConverter()),
ENGLISH_INTEGER(englishContainer().getNumbersConverter());
ENGLISH_INTEGER(englishContainer().getNumbersConverter()),
LATVIAN_INTEGER(latvianContainer().getNumbersConverter());

private final IntegerToStringConverter converter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import pl.allegro.finance.tradukisto.internal.languages.german.GermanIntegerToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.german.GermanThousandToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.german.GermanValues;
import pl.allegro.finance.tradukisto.internal.languages.latvian.LatvianValues;
import pl.allegro.finance.tradukisto.internal.languages.polish.PolishValues;
import pl.allegro.finance.tradukisto.internal.languages.portuguese.PortugueseIntegerToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.portuguese.PortugueseIntegerToWordsConverterAdapter;
Expand Down Expand Up @@ -64,6 +65,10 @@ public static Container germanContainer() {
return new Container(converter, bigDecimalBankingMoneyValueConverter);
}

public static Container latvianContainer() {
return new Container(new LatvianValues());
}

public static Container brazilianPortugueseContainer() {
BrazilianPortugueseValues values = new BrazilianPortugueseValues();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package pl.allegro.finance.tradukisto.internal.languages.latvian;

import pl.allegro.finance.tradukisto.internal.languages.GenderType;
import pl.allegro.finance.tradukisto.internal.languages.PluralForms;

public class LatvianPluralForms implements PluralForms {

private final String singularForm;
private final String pluralForm;

private final GenderType genderType;

public LatvianPluralForms(String singularForm, String pluralForm, GenderType genderType) {
this.singularForm = singularForm;
this.pluralForm = pluralForm;
this.genderType = genderType;
}

@Override
public String formFor(Integer value) {
if (useSingular(value)) {
return singularForm;
} else {
return pluralForm;
}
}

private boolean useSingular(Integer value) {
return value == 1 || (value % 100 != 11 && value % 10 == 1);
}


@Override
public GenderType genderType() {
return genderType;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package pl.allegro.finance.tradukisto.internal.languages.latvian;

import pl.allegro.finance.tradukisto.internal.BaseValues;
import pl.allegro.finance.tradukisto.internal.languages.GenderForms;
import pl.allegro.finance.tradukisto.internal.languages.GenderType;
import pl.allegro.finance.tradukisto.internal.languages.PluralForms;

import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static pl.allegro.finance.tradukisto.internal.languages.GenderForms.genderForms;
import static pl.allegro.finance.tradukisto.internal.support.BaseNumbersBuilder.baseNumbersBuilder;

public class LatvianValues implements BaseValues {



@Override
public Map<Integer, GenderForms> baseNumbers() {
return baseNumbersBuilder()
.put(0, "nulle")
.put(1, genderForms("viens", "viena", "viens"))
.put(2, "divi")
.put(3, "trīs")
.put(4, "četri")
.put(5, "pieci")
.put(6, "seši")
.put(7, "septiņi")
.put(8, "astoņi")
.put(9, "deviņi")
.put(10, "desmit")
.put(11, "vienpadsmit")
.put(12, "divpadsmit")
.put(13, "trīspadsmit")
.put(14, "četrpadsmit")
.put(15, "piecpadsmit")
.put(16, "sešpadsmit")
.put(17, "septiņpadsmit")
.put(18, "astoņpadsmit")
.put(19, "deviņpadsmit")
.put(20, "divdesmit")
.put(30, "trīsdesmit")
.put(40, "četrdesmit")
.put(50, "piecdesmit")
.put(60, "sešdesmit")
.put(70, "septiņdesmit")
.put(80, "astoņdesmit")
.put(90, "deviņdesmit")
.put(100, "viens simts")
.put(200, "divi simti")
.put(300, "trīs simti")
.put(400, "četri simti")
.put(500, "pieci simti")
.put(600, "seši simti")
.put(700, "septiņi simti")
.put(800, "astoņi simti")
.put(900, "deviņi simti")
.build();
}

@Override
public List<PluralForms> pluralForms() {
return Arrays.<PluralForms>asList(
new LatvianPluralForms("", "", GenderType.MASCULINE),
new LatvianPluralForms("tūkstotis", "tūkstoši", GenderType.MASCULINE),
new LatvianPluralForms("miljons", "miljoni", GenderType.MASCULINE),
new LatvianPluralForms("miljards", "miljardi", GenderType.MASCULINE));
}

@Override
public String currency() {
return "EUR";
}

@Override
public char twoDigitsNumberSeparator() {
return ' ';
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import spock.lang.Specification
import static pl.allegro.finance.tradukisto.MoneyConverters.CZECH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.ENGLISH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.GERMAN_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.LATVIAN_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.POLISH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.BRAZILIAN_PORTUGUESE_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.RUSSIAN_BANKING_MONEY_VALUE
Expand Down Expand Up @@ -37,6 +38,11 @@ class MoneyConvertersTest extends Specification {
CZECH_BANKING_MONEY_VALUE.asWords(1_234.56) == "jeden tisíc dvě stě třicet čtyři Kč 56/100"
}

def "should convert money in Latvain"() {
expect:
LATVIAN_BANKING_MONEY_VALUE.asWords(1_234.56) == "viens tūkstotis divi simti trīsdesmit četri EUR 56/100"
}

def "should convert money in English"() {
expect:
ENGLISH_BANKING_MONEY_VALUE.asWords(1_234.56) == "one thousand two hundred thirty-four £ 56/100"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import static pl.allegro.finance.tradukisto.ValueConverters.GERMAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.BRAZILIAN_PORTUGUESE_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.POLISH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.RUSSIAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.LATVIAN_INTEGER

class ValueConvertersTest extends Specification {

Expand Down Expand Up @@ -42,6 +43,11 @@ class ValueConvertersTest extends Specification {
ENGLISH_INTEGER.asWords(1_234) == "one thousand two hundred thirty-four"
}

def "should convert numbers in Latvian"() {
expect:
LATVIAN_INTEGER.asWords(1_234) == "viens tūkstotis divi simti trīsdesmit četri"
}

def "should throw exception when null given"() {
when:
POLISH_INTEGER.asWords(null)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
package pl.allegro.finance.tradukisto.internal.languages.latvian

import spock.lang.Specification
import spock.lang.Unroll

import static pl.allegro.finance.tradukisto.internal.Container.latvianContainer

class LatvianValuesTest extends Specification {

static converter = latvianContainer().getNumbersConverter()

@Unroll
def "should convert #value to '#words' in English"() {
expect:
converter.asWords(value) == words

where:
value | words
0 | "nulle"
1 | "viens"
2 | "divi"
3 | "trīs"
4 | "četri"
5 | "pieci"
6 | "seši"
7 | "septiņi"
8 | "astoņi"
9 | "deviņi"

11 | "vienpadsmit"
12 | "divpadsmit"
13 | "trīspadsmit"
14 | "četrpadsmit"
15 | "piecpadsmit"
16 | "sešpadsmit"
17 | "septiņpadsmit"
18 | "astoņpadsmit"
19 | "deviņpadsmit"

10 | "desmit"
20 | "divdesmit"
30 | "trīsdesmit"
40 | "četrdesmit"
50 | "piecdesmit"
60 | "sešdesmit"
70 | "septiņdesmit"
80 | "astoņdesmit"
90 | "deviņdesmit"

21 | "divdesmit viens"
37 | "trīsdesmit septiņi"
43 | "četrdesmit trīs"
58 | "piecdesmit astoņi"
69 | "sešdesmit deviņi"
76 | "septiņdesmit seši"
82 | "astoņdesmit divi"
95 | "deviņdesmit pieci"

100 | "viens simts"
200 | "divi simti"
300 | "trīs simti"
400 | "četri simti"
500 | "pieci simti"
600 | "seši simti"
700 | "septiņi simti"
800 | "astoņi simti"
900 | "deviņi simti"

111 | "viens simts vienpadsmit"
272 | "divi simti septiņdesmit divi"
387 | "trīs simti astoņdesmit septiņi"
448 | "četri simti četrdesmit astoņi"
569 | "pieci simti sešdesmit deviņi"
625 | "seši simti divdesmit pieci"
777 | "septiņi simti septiņdesmit septiņi"
782 | "septiņi simti astoņdesmit divi"
895 | "astoņi simti deviņdesmit pieci"
999 | "deviņi simti deviņdesmit deviņi"

1_000 | "viens tūkstotis"
2_000 | "divi tūkstoši"
3_000 | "trīs tūkstoši"
4_000 | "četri tūkstoši"
5_000 | "pieci tūkstoši"
7_634 | "septiņi tūkstoši seši simti trīsdesmit četri"
11_000 | "vienpadsmit tūkstoši"
15_000 | "piecpadsmit tūkstoši"
21_000 | "divdesmit viens tūkstotis"
22_000 | "divdesmit divi tūkstoši"
24_190 | "divdesmit četri tūkstoši viens simts deviņdesmit"
653_000 | "seši simti piecdesmit trīs tūkstoši"
211_000 | "divi simti vienpadsmit tūkstoši"
123_454 | "viens simts divdesmit trīs tūkstoši četri simti piecdesmit četri"
700_000 | "septiņi simti tūkstoši"
751_221 | "septiņi simti piecdesmit viens tūkstotis divi simti divdesmit viens"
999_999 | "deviņi simti deviņdesmit deviņi tūkstoši deviņi simti deviņdesmit deviņi"

1_000_000 | "viens miljons"
2_000_000 | "divi miljoni"
5_000_000 | "pieci miljoni"
7_211_000 | "septiņi miljoni divi simti vienpadsmit tūkstoši"
23_437_219 | "divdesmit trīs miljoni četri simti trīsdesmit septiņi tūkstoši divi simti deviņpadsmit"
100_000_000 | "viens simts miljoni"
123_456_789 | "viens simts divdesmit trīs miljoni četri simti piecdesmit seši tūkstoši septiņi simti " +
"astoņdesmit deviņi"
322_089_890 | "trīs simti divdesmit divi miljoni astoņdesmit deviņi tūkstoši astoņi simti deviņdesmit"

1_000_000_000 | "viens miljards"
2_147_483_647 | "divi miljardi viens simts četrdesmit septiņi miljoni četri simti astoņdesmit trīs tūkstoši " +
"seši simti četrdesmit septiņi"
}

def "should convert any value in range of 0-999 in Latvian"() {
when:
def words = converter.asWords(value)

then:
notThrown(IllegalArgumentException)
words.length() > 0

where:
value << (0..999)
}
}

0 comments on commit 7ccab0c

Please sign in to comment.