russian_inflect 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/russian_inflect.rb +8 -3
- data/lib/russian_inflect/version.rb +1 -1
- data/spec/lib/russian_inflect_spec.rb +5 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e16ddd0201094ee13de4901c176047d140285840
|
4
|
+
data.tar.gz: 2bdeb9c9fec8d0e251a5b2e1ed027b8db8c6b3bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f56a95421f7309c0f9f22e52ae273ee421c4327f28dd03a3f14e2dfac77359422d98c62e5fa1ba05c119858a619208090e61eb62315ed944121fd83dbbfc5eae
|
7
|
+
data.tar.gz: d2bd43b32716b2419bc6eae3e3bd8bcce70feadc6377cdb9b6cfc5353048ee58abc77d99fb83a4d6d1e75d0433554cd80a12b56ea89a3c7928fdc1ebe70c9c70
|
data/lib/russian_inflect.rb
CHANGED
@@ -33,11 +33,13 @@ class RussianInflect
|
|
33
33
|
|
34
34
|
def to_case(gcase, force_downcase: false)
|
35
35
|
after_prepositions = false
|
36
|
+
prev_type = nil
|
36
37
|
|
37
38
|
inflected_words = words.map do |word|
|
38
39
|
unless after_prepositions
|
39
40
|
downcased = UnicodeUtils.downcase(word)
|
40
|
-
|
41
|
+
current_type = self.class.detect_type(word)
|
42
|
+
if preposition?(downcased, prev_type, current_type)
|
41
43
|
after_prepositions = true
|
42
44
|
else
|
43
45
|
result = Rules[case_group].inflect(downcased, gcase)
|
@@ -48,6 +50,7 @@ class RussianInflect
|
|
48
50
|
word[0, len] << result[len..-1]
|
49
51
|
end
|
50
52
|
end
|
53
|
+
prev_type = current_type
|
51
54
|
end
|
52
55
|
|
53
56
|
word
|
@@ -56,8 +59,10 @@ class RussianInflect
|
|
56
59
|
inflected_words.join(' ')
|
57
60
|
end
|
58
61
|
|
59
|
-
def preposition?(word)
|
60
|
-
Rules.prepositions.include?(word) ||
|
62
|
+
def preposition?(word, prev_type, current_type)
|
63
|
+
Rules.prepositions.include?(word) ||
|
64
|
+
GROUPS[self.class.detect_case_group(word)] != @case_group ||
|
65
|
+
(prev_type == :noun && current_type == :noun)
|
61
66
|
end
|
62
67
|
|
63
68
|
def self.inflect(text, gcase, force_downcase: false)
|
@@ -28,6 +28,11 @@ describe RussianInflect do
|
|
28
28
|
source.test_each_case "Накладка моторного отсека", "Накладки моторного отсека", "Накладке моторного отсека", "Накладку моторного отсека", "Накладкой моторного отсека", "Накладке моторного отсека"
|
29
29
|
end
|
30
30
|
|
31
|
+
it "должен правильно склонять словосочение «Решетка радиатора»" do
|
32
|
+
source = RussianInflect.new("Решетка радиатора")
|
33
|
+
source.test_each_case "Решетка радиатора", "Решетки радиатора", "Решетке радиатора", "Решетку радиатора", "Решеткой радиатора", "Решетке радиатора"
|
34
|
+
end
|
35
|
+
|
31
36
|
it "должен правильно склонять слово «Комментарий»" do
|
32
37
|
source = RussianInflect.new("Комментарий")
|
33
38
|
source.test_each_case "Комментарий", "Комментария", "Комментарию", "Комментарий", "Комментарием", "Комментарии"
|