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 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