Skip to content

Commit

Permalink
Merge branch 'gradle-kotlin-dsl' of github.com:allegro/tradukisto int…
Browse files Browse the repository at this point in the history
…o gradle-kotlin-dsl
  • Loading branch information
jglaszka committed Jul 11, 2023
2 parents 3b899fa + fa57fb1 commit cbfbed4
Show file tree
Hide file tree
Showing 13 changed files with 438 additions and 9 deletions.
13 changes: 6 additions & 7 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
name: Build

on:
pull_request:
push:
tags-ignore:
- 'v*'
workflow_dispatch:

permissions:
contents: write
Expand All @@ -18,10 +16,11 @@ jobs:
matrix:
java: ['8', '11', '17']

name: Run tests for Java ${{ matrix.java }}
steps:
- uses: actions/checkout@v3

- name: Set up ${{ matrix.java }}
- name: Set up Java ${{ matrix.java }}
uses: actions/setup-java@v3
with:
distribution: 'temurin'
Expand All @@ -41,19 +40,19 @@ jobs:
- name: Upload coverage to Codecov
if: matrix.Java == '17'
uses: codecov/codecov-action@v3

dependabot:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' && github.actor == 'dependabot[bot]' }}
needs: build

steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/[email protected]
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"

- name: Enable auto-merge for Dependabot PRs
run: gh pr merge --auto --merge "$PR_URL"
env:
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ With Tradukisto, you can now transform numbers into their word equivalents easy
* 🇧🇬 Bulgarian
* 🇭🇷 Croatian
* 🇨🇿 Czech
* 🇳🇱 Dutch
* 🇬🇧 English
* 🇫🇷 French
* 🇩🇪 German
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import static pl.allegro.finance.tradukisto.internal.Container.turkishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.ukrainianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.bulgarianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.dutchContainer;

public enum MoneyConverters {

Expand All @@ -43,7 +44,8 @@ public enum MoneyConverters {
SERBIAN_BANKING_MONEY_VALUE(serbianContainer().getBankingMoneyConverter()),
SERBIAN_CYRILLIC_BANKING_MONEY_VALUE(serbianCyrillicContainer().getBankingMoneyConverter()),
FRENCH_BANKING_MONEY_VALUE(frenchContainer().getBankingMoneyConverter()),
BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter());
BULGARIAN_BANKING_MONEY_VALUE(bulgarianContainer().getBankingMoneyConverter()),
DUTCH_BANKING_MONEY_VALUE(dutchContainer().getBankingMoneyConverter());

private final BigDecimalToStringConverter converter;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@
import static pl.allegro.finance.tradukisto.internal.Container.slovakContainer;
import static pl.allegro.finance.tradukisto.internal.Container.turkishContainer;
import static pl.allegro.finance.tradukisto.internal.Container.ukrainianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.bulgarianContainer;
import static pl.allegro.finance.tradukisto.internal.Container.dutchContainer;

public enum ValueConverters {

Expand All @@ -45,7 +47,8 @@ public enum ValueConverters {
SERBIAN_CYRILLIC_INTEGER(serbianCyrillicContainer().getIntegerConverter(), getLanguageCodeFor("sr", "Cyrl")),
BULGARIAN_INTEGER(bulgarianContainer().getIntegerConverter(), "bg"),
FRENCH_INTEGER(frenchContainer().getIntegerConverter(), "fr"),
TURKISH_INTEGER(turkishContainer().getIntegerConverter(), "tr");
TURKISH_INTEGER(turkishContainer().getIntegerConverter(), "tr"),
DUTCH_INTEGER(dutchContainer().getIntegerConverter(), "nl");

private final IntegerToStringConverter converter;
private final List<String> languageCodes;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
import pl.allegro.finance.tradukisto.internal.languages.czech.CzechIntegerToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.czech.CzechValues;
import pl.allegro.finance.tradukisto.internal.languages.czech.CzechValuesForSmallNumbers;
import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchIntegerToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchThousandToWordsConverter;
import pl.allegro.finance.tradukisto.internal.languages.dutch.DutchValues;
import pl.allegro.finance.tradukisto.internal.languages.english.AmericanEnglishValues;
import pl.allegro.finance.tradukisto.internal.languages.english.EnglishValues;
import pl.allegro.finance.tradukisto.internal.languages.french.FrenchNumberToWordsConverter;
Expand Down Expand Up @@ -152,6 +155,23 @@ public static Container germanContainer() {
return new Container(converter, null, bigDecimalBankingMoneyValueConverter);
}

public static Container dutchContainer() {

DutchValues values = new DutchValues();

DutchThousandToWordsConverter dutchThousandToWordsConverter = new DutchThousandToWordsConverter(
values.baseNumbers());

IntegerToStringConverter converter = new DutchIntegerToWordsConverter(
new NumberToWordsConverter(dutchThousandToWordsConverter, values.pluralForms()), values.exceptions(),
dutchThousandToWordsConverter);

BigDecimalToStringConverter bigDecimalBankingMoneyValueConverter = new BigDecimalToBankingMoneyConverter(
converter, values.currency());

return new Container(converter, null, bigDecimalBankingMoneyValueConverter);
}

public static Container italianContainer() {
ItalianValues values = new ItalianValues();

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

import java.util.Map;

import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter;
import pl.allegro.finance.tradukisto.internal.IntegerToStringConverter;
import pl.allegro.finance.tradukisto.internal.NumberProcessor;

public class DutchIntegerToWordsConverter implements IntegerToStringConverter {

private final IntegerToStringConverter bigNumbersConverter;
private final Map<Integer, String> exceptions;
private final GenderAwareIntegerToStringConverter smallNumbersConverter;

public DutchIntegerToWordsConverter(IntegerToStringConverter bigNumbersConverter,
Map<Integer, String> exceptions,
GenderAwareIntegerToStringConverter smallNumbersConverter) {
this.bigNumbersConverter = bigNumbersConverter;
this.exceptions = exceptions;
this.smallNumbersConverter = smallNumbersConverter;
}

@Override
public String asWords(Integer value) {
if (exceptions.containsKey(value)) {
return exceptions.get(value);
}

Integer bigNumber = value / 1000000;
Integer smallNumber = value % 1000000;

return new NumberProcessor(bigNumbersConverter, smallNumbersConverter).process(bigNumber, smallNumber);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package pl.allegro.finance.tradukisto.internal.languages.dutch;

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

/**
* @author Dilaver Demirel
*/
public class DutchPluralForms implements PluralForms {

private final String form;

public DutchPluralForms(String form) {
this.form = form;
}

@Override
public String formFor(Integer value) {
return form;
}

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

import pl.allegro.finance.tradukisto.internal.support.Range;
import pl.allegro.finance.tradukisto.internal.GenderAwareIntegerToStringConverter;
import pl.allegro.finance.tradukisto.internal.languages.GenderForms;
import pl.allegro.finance.tradukisto.internal.languages.GenderType;

import java.util.Map;

import static java.lang.String.format;
public class DutchThousandToWordsConverter implements GenderAwareIntegerToStringConverter {

private final Map<Integer, GenderForms> baseValues;

public DutchThousandToWordsConverter(Map<Integer, GenderForms> baseValues) {
this.baseValues = baseValues;
}

@Override
public String asWords(Integer value, GenderType genderType) {
if (baseValues.containsKey(value)) {
return baseValues.get(value).formFor(genderType);
} else if (Range.closed(21, 99).contains(value)) {
return twoDigitsNumberAsString(value, genderType);
} else if (Range.closed(101, 999).contains(value)) {
return threeDigitsNumberAsString(value, genderType);
} else if (Range.closed(1000, 999999).contains(value)) {
return thousandsAsString(value, genderType);
}

throw new IllegalArgumentException(format("Can't convert %d", value));
}

private String twoDigitsNumberAsString(Integer value, GenderType genderType) {
Integer units = value % 10;
Integer tens = value - units;

// When units are 2 or 3, between the tens and the units
if (units == 2 || units == 3) {
return format("%sën%s", asWords(units, genderType), asWords(tens, genderType));
} else {
return format("%sen%s", asWords(units, genderType), asWords(tens, genderType));
}
}

private String threeDigitsNumberAsString(Integer value, GenderType genderType) {
Integer tensWithUnits = value % 100;
Integer hundreds = value - tensWithUnits;

return format("%s%s", asWords(hundreds, genderType), asWords(tensWithUnits, genderType));
}

private String thousandsAsString(Integer value, GenderType genderType) {
Integer thousands = value / 1000;
Integer other = value % 1000;

if (isOneThousand(thousands)) {
return getOneThousandAsWords(other, genderType);
}

return getThousandsAsWords(thousands, other, genderType);
}

private String getThousandsAsWords(Integer thousands, Integer other, GenderType genderType) {
if (other == 0) {
return format("%sduizend", asWords(thousands, genderType));
}
return format("%sduizend%s", asWords(thousands, genderType), asWords(other, genderType));
}

private String getOneThousandAsWords(Integer other, GenderType genderType) {
return format("duizend%s", asWords(other, genderType));
}

private boolean isOneThousand(Integer thousands) {
return thousands == 1;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
package pl.allegro.finance.tradukisto.internal.languages.dutch;

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

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

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

import static java.util.Collections.singletonMap;


public class DutchValues {

public Map<Integer, GenderForms> baseNumbers() {
return baseNumbersBuilder()
.put(0, "nul")
.put(1, "één")
.put(2, "twee")
.put(3, "drie")
.put(4, "vier")
.put(5, "vijf")
.put(6, "zes")
.put(7, "zeven")
.put(8, "acht")
.put(9, "negen")
.put(10, "tien")
.put(11, "elf")
.put(12, "twaalf")
.put(13, "dertien")
.put(14, "veertien")
.put(15, "vijftien")
.put(16, "zestien")
.put(17, "zeventien")
.put(18, "achttien")
.put(19, "negentien")
.put(20, "twintig")
.put(30, "dertig")
.put(40, "veertig")
.put(50, "vijftig")
.put(60, "zestig")
.put(70, "zeventig")
.put(80, "tachtig")
.put(90, "negentig")
.put(100, "honderd")
.put(200, "tweehonderd")
.put(300, "driehonderd")
.put(400, "vierhonderd")
.put(500, "vijfhonderd")
.put(600, "zeshonderd")
.put(700, "zevenhonderd")
.put(800, "achthonderd")
.put(900, "negenhonderd")
.build();
}

public Map<Integer, String> exceptions() {
return singletonMap(1000, "duizend");
}

public List<PluralForms> pluralForms() {
return Arrays.asList(
new DutchPluralForms("miljoen"),
new DutchPluralForms("miljard"));
}

public String currency() {
return "€";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import static pl.allegro.finance.tradukisto.MoneyConverters.SERBIAN_CYRILLIC_BAN
import static pl.allegro.finance.tradukisto.MoneyConverters.SLOVAK_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.TURKISH_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.UKRAINIAN_BANKING_MONEY_VALUE
import static pl.allegro.finance.tradukisto.MoneyConverters.DUTCH_BANKING_MONEY_VALUE

class MoneyConvertersTest extends Specification {

Expand All @@ -34,6 +35,7 @@ class MoneyConvertersTest extends Specification {
"Brazilian Portuguese" | BRAZILIAN_PORTUGUESE_BANKING_MONEY_VALUE || "mil duzentos e trinta e quatro R\$ 56/100"
"Bulgarian" | BULGARIAN_BANKING_MONEY_VALUE || "хиляда двеста тридесет четири лв 56/100"
"Czech" | CZECH_BANKING_MONEY_VALUE || "jeden tisíc dvě stě třicet čtyři Kč 56/100"
"Dutch" | DUTCH_BANKING_MONEY_VALUE || "duizendtweehonderdvierendertig € 56/100"
"English" | ENGLISH_BANKING_MONEY_VALUE || "one thousand two hundred thirty-four £ 56/100"
"French" | FRENCH_BANKING_MONEY_VALUE || "mille deux cent trente-quatre € 56/100"
"German" | GERMAN_BANKING_MONEY_VALUE || "eintausendzweihundertvierunddreißig € 56/100"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import static pl.allegro.finance.tradukisto.ValueConverters.SERBIAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.SLOVAK_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.TURKISH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.UKRAINIAN_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.DUTCH_INTEGER
import static pl.allegro.finance.tradukisto.ValueConverters.getByLanguageCodeOrDefault
import static pl.allegro.finance.tradukisto.ValueConverters.getByLocaleOrDefault

Expand All @@ -34,6 +35,7 @@ class ValueConvertersTest extends Specification {
"Brazilian Portuguese" | BRAZILIAN_PORTUGUESE_INTEGER || "mil duzentos e trinta e quatro"
"Bulgarian" | BULGARIAN_INTEGER || "хиляда двеста тридесет четири"
"Czech" | CZECH_INTEGER || "jeden tisíc dvě stě třicet čtyři"
"Dutch" | DUTCH_INTEGER || "duizendtweehonderdvierendertig"
"English" | ENGLISH_INTEGER || "one thousand two hundred thirty-four"
"French" | FRENCH_INTEGER || "mille deux cent trente-quatre"
"German" | GERMAN_INTEGER || "eintausendzweihundertvierunddreißig"
Expand Down Expand Up @@ -88,6 +90,7 @@ class ValueConvertersTest extends Specification {
new Locale("sk") || SLOVAK_INTEGER
new Locale("tr") || TURKISH_INTEGER
new Locale("uk") || UKRAINIAN_INTEGER
new Locale("nl") || DUTCH_INTEGER
}

def "should return supplied default converter when locale is unknown"() {
Expand Down Expand Up @@ -118,6 +121,7 @@ class ValueConvertersTest extends Specification {
"pt" || BRAZILIAN_PORTUGUESE_INTEGER
"bg" || BULGARIAN_INTEGER
"cs" || CZECH_INTEGER
"nl" || DUTCH_INTEGER
"en" || ENGLISH_INTEGER
"fr" || FRENCH_INTEGER
"it" || ITALIAN_INTEGER
Expand Down
Loading

0 comments on commit cbfbed4

Please sign in to comment.