russian_inflect 1.0.1 → 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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 "Комментарий", "Комментария", "Комментарию", "Комментарий", "Комментарием", "Комментарии"
|