private String inflectTo(String name, Case $case, RuleSet ruleSet) {
        name = requireNonNull(name, "name must not be null");
        String[] chunks = normalizeName(name).split("-");
        int chunksLength = chunks.length;
        String[] result = new String[chunksLength];
        for (int idx = 0; idx < chunksLength; idx++) {
            boolean firstWord = idx == 0 && chunksLength > 1;
            result[idx] = (
                findAndApply(
                    chunks[idx],
                    $case,
                    ruleSet,
                    Collections.singletonMap("first_word", firstWord)
                )
            );
        }

        StringBuilder sb = new StringBuilder(name.length() + 10);
        for (String res : result) {
            sb.append(res).append('-');
        }
        int length = sb.length();
        if (length > 0) {
            sb.setLength(length - 1);
        }
        String stringResult = sb.toString();
        return stringResult.isEmpty() ? name : stringResult;
    }