petrovich 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -41,7 +41,7 @@ class Petrovich
41
41
  GENITIVE = :genitive # родительный
42
42
  DATIVE = :dative # дательный
43
43
  ACCUSATIVE = :accusative # винительный
44
- INSTRUMENTATIVE = :instrumental # творительный
44
+ INSTRUMENTAL = :instrumental # творительный
45
45
  PREPOSITIONAL = :prepositional # предложный
46
46
 
47
47
  def initialize(gender = nil)
@@ -4,6 +4,9 @@ class Petrovich
4
4
  # Загрузка правил происходит один раз
5
5
  RULES = YAML.load_file(File.dirname(__FILE__) + '/rules.yml')
6
6
 
7
+ class UnknownCaseException < Exception;;end
8
+ class UnknownRuleException < Exception;;end
9
+
7
10
  # Набор методов для нахождения и применения правил к имени, фамилии и отчеству.
8
11
  class Rules
9
12
  def initialize(gender = nil)
@@ -21,8 +24,10 @@ class Petrovich
21
24
  # # Винительный падеж
22
25
  # lastname_accusative('Комаров') # => Комарова
23
26
  #
24
- [:lastname, :firstname, :middlename].each do |m|
25
- define_method(m) { |name, gcase| find_and_apply(name, gcase, Petrovich::RULES[__method__.to_s]) }
27
+ [:lastname, :firstname, :middlename].each do |method_name|
28
+ define_method(method_name) do |name, gcase|
29
+ find_and_apply(name, gcase, Petrovich::RULES[method_name.to_s])
30
+ end
26
31
  end
27
32
 
28
33
  protected
@@ -64,7 +69,11 @@ class Petrovich
64
69
 
65
70
  # Найти правило и применить к имени с учетом склонения
66
71
  def find_and_apply(name, gcase, rules)
67
- apply(name, gcase, find_for(name, rules))
72
+ rule = find_for(name, rules)
73
+ apply(name, gcase, rule)
74
+ rescue UnknownRuleException
75
+ # Если не найдено правило для имени, возвращаем неизмененное имя.
76
+ name
68
77
  end
69
78
 
70
79
  # Найти подходящее правило в исключениях или суффиксах
@@ -77,7 +86,7 @@ class Petrovich
77
86
 
78
87
  # Не получилось, ищем в суффиксах. Если не получилось найти и в них,
79
88
  # возвращаем неизмененное имя.
80
- find(name, rules['suffixes'], false) || name
89
+ find(name, rules['suffixes'], false) or raise UnknownRuleException, "Cannot find rule for #{name}"
81
90
  end
82
91
 
83
92
  # Найти подходящее правило в конкретном списке правил
@@ -96,12 +105,12 @@ class Petrovich
96
105
  rule['mods'][1]
97
106
  when ACCUSATIVE
98
107
  rule['mods'][2]
99
- when INSTRUMENTATIVE
108
+ when INSTRUMENTAL
100
109
  rule['mods'][3]
101
110
  when PREPOSITIONAL
102
111
  rule['mods'][4]
103
112
  else
104
- raise "Unknown grammatic case: #{gcase}"
113
+ raise UnknownCaseException, "Unknown grammatic case: #{gcase}"
105
114
  end
106
115
  end
107
116
 
@@ -46,6 +46,10 @@ lastname:
46
46
  test: [б, в, г, д, ж, з, й, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, ъ, ь]
47
47
  mods: [., ., ., ., .]
48
48
 
49
+ - gender: androgynous
50
+ test: [гава, орота]
51
+ mods: [., ., ., ., .]
52
+
49
53
  - gender: female
50
54
  test: [ска, цка]
51
55
  mods: [-ой, -ой, -ую, -ой, -ой]
@@ -229,6 +233,10 @@ firstname:
229
233
  test: [га, ка, ха, ча, ща, жа]
230
234
  mods: [-и, -е, -у, -ой, -е]
231
235
 
236
+ - gender: female
237
+ test: [ша]
238
+ mods: [-и, -е, -у, -ей, -е]
239
+
232
240
  - gender: androgynous
233
241
  test: [а]
234
242
  mods: [-ы, -е, -у, -ой, -е]
@@ -13,11 +13,7 @@ CASES = [
13
13
 
14
14
  def check!(errors, correct, total, lemma, gender, gcase, expected)
15
15
  inflector = Petrovich.new(gender)
16
- inflection = begin
17
- UnicodeUtils.upcase(inflector.lastname(lemma, gcase))
18
- rescue
19
- ''
20
- end
16
+ inflection = UnicodeUtils.upcase(inflector.lastname(lemma, gcase))
21
17
 
22
18
  total[[gender, gcase]] += 1
23
19
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: petrovich
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-05-13 00:00:00.000000000 Z
13
+ date: 2013-06-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: unicode_utils