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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f0d67cfe5db6bc84834af246ba504c8e662769f0
4
- data.tar.gz: e229c6ceac87150cfcdb1681377b35dd70a997d5
3
+ metadata.gz: e16ddd0201094ee13de4901c176047d140285840
4
+ data.tar.gz: 2bdeb9c9fec8d0e251a5b2e1ed027b8db8c6b3bb
5
5
  SHA512:
6
- metadata.gz: 993b69cdb146f2db194401a1c6a8f3466f0864f3a9cfbddcd5cd5a831cbe0def7e46ea6e3e5fdd545f2706d531cfcfd75b0f95b24d017aa402ca64f53362804f
7
- data.tar.gz: 508c950843829e4235a41592e6f24e935bcc4c865242a63fecf2a7861b09793a0a3e1b2d14af2675ca71dfe97a9ae85d9de0c638e0e43460fe971237089b4792
6
+ metadata.gz: f56a95421f7309c0f9f22e52ae273ee421c4327f28dd03a3f14e2dfac77359422d98c62e5fa1ba05c119858a619208090e61eb62315ed944121fd83dbbfc5eae
7
+ data.tar.gz: d2bd43b32716b2419bc6eae3e3bd8bcce70feadc6377cdb9b6cfc5353048ee58abc77d99fb83a4d6d1e75d0433554cd80a12b56ea89a3c7928fdc1ebe70c9c70
@@ -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
- if preposition?(downcased)
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) || GROUPS[self.class.detect_case_group(word)] != @case_group
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)
@@ -1,3 +1,3 @@
1
1
  class RussianInflect
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
@@ -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 "Комментарий", "Комментария", "Комментарию", "Комментарий", "Комментарием", "Комментарии"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: russian_inflect
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tõnis Simo