petrovich 0.2.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +79 -177
- data/Rakefile +7 -9
- data/lib/petrovich.rb +78 -77
- data/lib/petrovich/case/rule.rb +63 -0
- data/lib/petrovich/case/rule/modifier.rb +19 -0
- data/lib/petrovich/case/rule/test.rb +23 -0
- data/lib/petrovich/gender.rb +39 -0
- data/lib/petrovich/gender/rule.rb +22 -0
- data/lib/petrovich/inflected.rb +18 -0
- data/lib/petrovich/inflector.rb +42 -0
- data/lib/petrovich/name.rb +75 -0
- data/lib/petrovich/rule_set.rb +118 -0
- data/lib/petrovich/unicode.rb +4 -3
- data/lib/petrovich/value.rb +12 -0
- data/lib/tasks/evaluate.rake +14 -32
- data/rules/rules.yml +186 -44
- metadata +57 -7
- data/lib/petrovich/extension.rb +0 -140
- data/lib/petrovich/rules.rb +0 -209
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e6066940e4b5258379235c3252ff522958d539b
|
4
|
+
data.tar.gz: 5ecd85e3a147030e003819d3866061a927eb1552
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 95f3fd34b305b733f233df19c9bb31a71e712c7a8d298104f0a2764baa2f56deeb07876cd6f2fbb62915c8d64ff060229505cc0d484014044a5140728c55484f
|
7
|
+
data.tar.gz: da1eac52ca78014e3ecf10fcda4ecee604d35a7d05dff8a78d3d24a3ae39c0f4af150ae74b13d23f1951c331ccba9163956dc7ac2b51d4a910126e4b828ea6ec
|
data/README.md
CHANGED
@@ -3,16 +3,16 @@
|
|
3
3
|
Склонение падежей русских имён, фамилий и отчеств. Вы задаёте начальное имя
|
4
4
|
в именительном падеже, а получаете в нужном вам.
|
5
5
|
|
6
|
-
|
6
|
+
Petrovich также позволяет определять пол по имени, фамилии, отчеству.
|
7
7
|
|
8
|
-
|
8
|
+
[![Build Status](https://travis-ci.org/petrovich/petrovich-ruby.svg?branch=dev-1.0)](https://travis-ci.org/petrovich/petrovich-ruby)
|
9
9
|
|
10
10
|
## Установка
|
11
11
|
|
12
12
|
Добавьте в Gemfile:
|
13
13
|
|
14
14
|
```ruby
|
15
|
-
gem 'petrovich'
|
15
|
+
gem 'petrovich', '~> 1.0'
|
16
16
|
```
|
17
17
|
|
18
18
|
Установите гем cредствами Bundler:
|
@@ -25,199 +25,100 @@ gem 'petrovich'
|
|
25
25
|
|
26
26
|
## Зависимости
|
27
27
|
|
28
|
-
Для работы гема требуется Ruby не младше версии 1.9.
|
28
|
+
Для работы гема требуется Ruby не младше версии 1.9.3. Petrovich не
|
29
29
|
привязан к Ruby on Rails и может свободно использоваться практически
|
30
30
|
в любых приложениях и библиотеках на языке Ruby.
|
31
31
|
|
32
32
|
## Использование
|
33
33
|
|
34
34
|
Вы задаёте начальные значения (фамилию, имя и отчество) в именительном
|
35
|
-
падеже, а библиотека делает всё остальное.
|
35
|
+
падеже, а библиотека делает всё остальное. Если вам известен пол - укажите его, это повысит скорость работы и даст более точные результаты. Если пол не указан, то Petrovich попытается определить его автоматически. Примеры:
|
36
36
|
|
37
37
|
```ruby
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
38
|
+
# Склонение в дательный падеж при помощи метода `dative`. Существуют методы `genitive`,
|
39
|
+
# `dative`, `accusative`, `instrumental`, `prepositional`.
|
40
|
+
Petrovich(
|
41
|
+
lastname: 'Салтыков-Щедрин',
|
42
|
+
firstname: 'Михаил',
|
43
|
+
middlename: 'Евграфович',
|
44
|
+
).dative.to_s # => Салтыкову-Щедрину Михаилу Евграфовичу
|
45
|
+
|
46
|
+
# Склонение в творительный падеж с использованием метода `to` и возвратом отчества.
|
47
|
+
# Аналогично можно вызвать метод `firstname`, чтобы получить имя.
|
48
|
+
Petrovich(
|
49
|
+
firstname: 'Иван',
|
50
|
+
middlename: 'Петрович',
|
51
|
+
).to(:instrumental).middlename # => Петровича Ивана
|
52
|
+
|
53
|
+
# Склонение с указанием пола. В данном случае по имени и фамилии не возможно определить пол
|
54
|
+
# человека, поэтому, если вам известен пол, всегда передавайте его в аргументах,
|
55
|
+
# чтобы склонение было верным.
|
56
|
+
# Если пол неизвестен, то гем попытается определить его самостоятельно.
|
57
|
+
# Пол должен быть указан в виде строки или символа, возможные значения: male, female.
|
58
|
+
Petrovich(
|
59
|
+
lastname: 'Андрейчук',
|
60
|
+
firstname: 'Саша',
|
61
|
+
gender: :male
|
62
|
+
).to(:instrumental).to_s # => Андрейчуку Саше
|
42
63
|
```
|
43
64
|
|
44
|
-
|
45
|
-
аргумента. Пол может принимать значения `:male`, `:female` или
|
46
|
-
`:androgynous`. Последнее означает, что слово не склоняется по родам.
|
47
|
-
По нормам языка, некоторые фамилии не склоняются. Например, такие
|
48
|
-
украинские фамилии, как Симоненко, а также заимствованные фамилии,
|
49
|
-
такие как Нельсон.
|
50
|
-
|
51
|
-
Важно понимать, что явное указание пола повышает аккуратность обработки слов.
|
52
|
-
Если пол неизвестен, однако известно отчество, то гем постарается
|
53
|
-
определить пол по отчеству на основе простой эвристики.
|
54
|
-
|
55
|
-
### Продвинутое использование
|
56
|
-
|
57
|
-
Вы можете подмешать модуль `Petrovich::Extension` в любой класс. Это
|
58
|
-
особенно полезно при использовании ActiveRecord и подобных ORM.
|
59
|
-
|
60
|
-
```ruby
|
61
|
-
class User < ActiveRecord::Base
|
62
|
-
include Petrovich::Extension
|
63
|
-
|
64
|
-
petrovich :firstname => :my_firstname,
|
65
|
-
:middlename => :my_middlename,
|
66
|
-
:lastname => :my_lastname,
|
67
|
-
:gender => :my_gender
|
68
|
-
|
69
|
-
def my_firstname
|
70
|
-
'Пётр'
|
71
|
-
end
|
72
|
-
|
73
|
-
def my_middlename
|
74
|
-
'Петрович'
|
75
|
-
end
|
76
|
-
|
77
|
-
def my_lastname
|
78
|
-
'Петренко'
|
79
|
-
end
|
80
|
-
|
81
|
-
# Если пол не был указан, используется автоматическое определение
|
82
|
-
# пола на основе отчества. Если отчество также не было указано,
|
83
|
-
# пытаемся определить правильное склонение на основе файла правил.
|
84
|
-
def my_gender
|
85
|
-
:male # :male, :female или :androgynous
|
86
|
-
end
|
87
|
-
end
|
88
|
-
```
|
89
|
-
|
90
|
-
Ничего не мешает подмешать модуль `Petrovich::Extension` в самый обычный
|
91
|
-
класс.
|
92
|
-
|
93
|
-
```ruby
|
94
|
-
class Person
|
95
|
-
include Petrovich::Extension
|
96
|
-
|
97
|
-
# А здесь мы не указали пол - он будет определяться на основе отчества
|
98
|
-
petrovich :firstname => :name,
|
99
|
-
:middlename => :patronymic,
|
100
|
-
:lastname => :surname
|
101
|
-
|
102
|
-
def name
|
103
|
-
'Иван'
|
104
|
-
end
|
105
|
-
|
106
|
-
def patronymic
|
107
|
-
'Олегович'
|
108
|
-
end
|
109
|
-
|
110
|
-
def surname
|
111
|
-
'Сафронов'
|
112
|
-
end
|
113
|
-
end
|
114
|
-
```
|
115
|
-
|
116
|
-
При помощи метода `petrovich` указываются методы, представляющие фамилию,
|
117
|
-
имя и отчество. В данном примере указано, что метод `name` представляет
|
118
|
-
имя, метод `lastname` представляет фамилию, метод `patronymic` представляет
|
119
|
-
отчество.
|
120
|
-
|
121
|
-
После конфигурации Petrovich можно легко выполнять склонение необходимых
|
122
|
-
строк.
|
123
|
-
|
124
|
-
```ruby
|
125
|
-
user = User.new
|
126
|
-
user.my_firstname # => Пётр
|
127
|
-
|
128
|
-
user.my_firstname_dative # => Петру
|
129
|
-
user.my_middlename_dative # => Петровичу
|
130
|
-
user.my_lastname_dative # => Петренко
|
131
|
-
```
|
132
|
-
|
133
|
-
```ruby
|
134
|
-
person = Person.new
|
135
|
-
person.name # => Иван
|
136
|
-
|
137
|
-
person.my_firstname_dative # => Ивану
|
138
|
-
person.my_middlename_dative # => Олеговичу
|
139
|
-
person.my_lastname_dative # => Сафронову
|
140
|
-
```
|
141
|
-
|
142
|
-
Базовое имя должно быть в именительном падеже. Вы просто добавляете
|
143
|
-
`_<суффикс>` в конец имени оригинального метода и получаете заданное имя
|
144
|
-
в требуемом падеже.
|
145
|
-
|
146
|
-
Названия суффиксов для методов образованы от английских названий
|
147
|
-
соответствующих падежей. Полный список поддерживаемых падежей приведён
|
65
|
+
Полный список поддерживаемых методов склонения приведён
|
148
66
|
в таблице ниже.
|
149
67
|
|
150
|
-
|
|
68
|
+
| Метод | Падеж | Характеризующий вопрос |
|
151
69
|
|----------------|--------------|------------------------|
|
152
|
-
| genitive | родительный | Кого?
|
153
|
-
| dative | дательный | Кому?
|
154
|
-
| accusative | винительный | Кого?
|
155
|
-
| instrumental | творительный | Кем?
|
156
|
-
| prepositional | предложный | О ком?
|
157
|
-
|
158
|
-
## Лемматизация
|
159
|
-
|
160
|
-
Petrovich умеет выполнять преобразовывание фамилии, имени и отчества
|
161
|
-
в произвольном падеже к нормальной форме, а именно в именительный падеж.
|
162
|
-
Такой процесс называется *лемматизацией*.
|
163
|
-
|
164
|
-
Для выполнения лемматизации нужно передать в методы склонения третий
|
165
|
-
аргумент, означающий текущий падеж слова, а во втором аргументе указать
|
166
|
-
желаемый падеж — именительный.
|
70
|
+
| genitive | родительный | Кого? |
|
71
|
+
| dative | дательный | Кому? |
|
72
|
+
| accusative | винительный | Кого? |
|
73
|
+
| instrumental | творительный | Кем? |
|
74
|
+
| prepositional | предложный | О ком? |
|
167
75
|
|
168
|
-
|
169
|
-
p = Petrovich.new(:male )
|
170
|
-
p.firstname('Савве', :nominative, :dative) # => Савва
|
171
|
-
p.middlename('Палладиевичу', :nominative, :dative) # => Палладиевич
|
172
|
-
p.lastname('Солунскому', :nominative, :dative) # => Солунский
|
173
|
-
```
|
76
|
+
### Определение пола
|
174
77
|
|
175
|
-
|
176
|
-
отличный от именительного:
|
78
|
+
Примеры:
|
177
79
|
|
178
80
|
```ruby
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
81
|
+
Petrovich(
|
82
|
+
lastname: 'Склифасовский'
|
83
|
+
).gender # => :male
|
84
|
+
|
85
|
+
Petrovich(
|
86
|
+
firstname: 'Александра',
|
87
|
+
lastname: 'Склифасовская'
|
88
|
+
).female? # => true
|
89
|
+
|
90
|
+
Petrovich(
|
91
|
+
lastname: 'Склифасовский'
|
92
|
+
).male? # => true
|
93
|
+
|
94
|
+
Petrovich(
|
95
|
+
firstname: 'Саша',
|
96
|
+
lastname: 'Андрейчук'
|
97
|
+
).androgynous? # => true
|
98
|
+
|
99
|
+
Petrovich(
|
100
|
+
firstname: 'Саша',
|
101
|
+
lastname: 'Андрейчук'
|
102
|
+
gender: :male,
|
103
|
+
).male? # => true
|
183
104
|
```
|
184
105
|
|
185
|
-
##
|
106
|
+
## CLI
|
186
107
|
|
187
|
-
|
188
|
-
словаря [АОТ] показало аккуратность около 99%. Оригинальный словарь
|
189
|
-
распространяется по лицензии LGPL версии 2.1, однако используется
|
190
|
-
только в задаче оценки аккуратности данного гема.
|
108
|
+
Примеры вызовов:
|
191
109
|
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
```
|
197
|
-
Ac(nominative|male) = 100.0000%
|
198
|
-
Ac(genitive|male) = 99.7635%
|
199
|
-
Ac(dative|male) = 99.7884%
|
200
|
-
Ac(accusative|male) = 99.8008%
|
201
|
-
Ac(instrumental|male) = 99.3037%
|
202
|
-
Ac(prepositional|male) = 99.7759%
|
203
|
-
```
|
204
|
-
```
|
205
|
-
Ac(nominative|female) = 100.0000%
|
206
|
-
Ac(genitive|female) = 99.9102%
|
207
|
-
Ac(dative|female) = 99.9401%
|
208
|
-
Ac(accusative|female) = 99.9701%
|
209
|
-
Ac(instrumental|female) = 99.4636%
|
210
|
-
Ac(prepositional|female) = 99.9401%
|
110
|
+
```bash
|
111
|
+
petrovich -l Иванов -f Иван -m Иванович -g male -t accusative
|
112
|
+
petrovich -l Иванов -f Иван -m Иванович -t accusative -d
|
113
|
+
petrovich -l Иванов -f Иван -m Иванович -t accusative -o
|
211
114
|
```
|
212
115
|
|
213
|
-
|
214
|
-
88314 примеров.
|
215
|
-
|
216
|
-
[АОТ]: http://seman.svn.sourceforge.net/viewvc/seman/trunk/Docs/Morph_UNIX.txt?revision=HEAD&view=markup
|
116
|
+
Подробное руководство: `petrovich inflect --help`
|
217
117
|
|
218
118
|
## Модульные тесты
|
219
119
|
|
220
|
-
Для запуска тестов достаточно выполнить
|
120
|
+
Для запуска тестов достаточно выполнить команду `rake`.
|
121
|
+
Чтобы запустить тесты "аккуратности" по словарю фамилий, выполните команду `rake evaluate`, после выполнения вы увидите подробный отчёт.
|
221
122
|
|
222
123
|
## Разработчики
|
223
124
|
|
@@ -237,20 +138,21 @@ Ac(prepositional|female) = 99.9401%
|
|
237
138
|
## Дальнейшее развитие
|
238
139
|
|
239
140
|
Мы планируем и далее улучшать этот проект. Поэтому нам важен отклик от
|
240
|
-
пользователей данного гема.
|
141
|
+
пользователей данного гема.
|
142
|
+
|
143
|
+
Наши приоритеты следующие:
|
241
144
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
* проверка совместимости с различными ORM и сторонними библиотеками.
|
145
|
+
* Повысить аккуратность склонения женских фамилий до 98%
|
146
|
+
* Обрабатывать ФИО в тексте. Например, чтобы выделить ФИО в виде гиперссылки. Не обязательно только ФИО, возможно просто фамилии, имена и так далее.
|
147
|
+
* Перевести реализацию на язык Rust. Это даст возможность использовать библиотеку в различных языках, подключая её через FFI и не потребует отдельной реализации в каждом языке. Это также увеличит скорость работы библиотеки.
|
246
148
|
|
247
149
|
Если вы хотите помочь этому проекту, вы можете реализовать любую
|
248
150
|
вышеперечисленную идею. Перед этим желательно связаться с нами,
|
249
|
-
чтобы мы были в курсе.
|
151
|
+
чтобы мы были в курсе. Если у вас появилось такое желание, напишите в issues.
|
250
152
|
|
251
153
|
## Содействие
|
252
154
|
|
253
|
-
Если вы нашли
|
155
|
+
Если вы нашли баги как программной части, так и в базе правил, то вы всегда
|
254
156
|
можете форкнуть репозиторий и внести необходимые изменения. Ваша помощь не
|
255
157
|
останется незамеченной! Если вы заметили ошибки при склонении падежей имён,
|
256
158
|
фамилий или отчеств, можете написать об этом в Issues на GitHub.
|
data/Rakefile
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
# encoding: utf-8
|
3
3
|
|
4
|
-
require
|
5
|
-
require
|
4
|
+
require "bundler/gem_tasks"
|
5
|
+
require "rake/testtask"
|
6
6
|
|
7
|
-
Rake::TestTask.new
|
8
|
-
|
9
|
-
test.test_files = Dir['spec/**/*_spec.rb']
|
10
|
-
test.verbose = true
|
7
|
+
Rake::TestTask.new do |t|
|
8
|
+
t.test_files = FileList['test/*_test.rb']
|
11
9
|
end
|
12
10
|
|
11
|
+
task default: :test
|
12
|
+
|
13
|
+
# We need this to avoid loading the library in tasks directly.
|
13
14
|
task :petrovich do
|
14
15
|
require 'petrovich'
|
15
16
|
end
|
16
17
|
|
17
|
-
# Run tests and perform evaluation by default
|
18
|
-
task :default => [:spec, :evaluate]
|
19
|
-
|
20
18
|
Dir.glob('lib/tasks/*.rake').each { |r| import r }
|
data/lib/petrovich.rb
CHANGED
@@ -1,91 +1,92 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require '
|
2
|
+
require 'forwardable'
|
3
|
+
require 'petrovich/value'
|
4
|
+
require 'petrovich/inflector'
|
5
|
+
require 'petrovich/inflected'
|
6
|
+
require 'petrovich/gender'
|
3
7
|
require 'petrovich/unicode'
|
4
|
-
require 'petrovich/
|
5
|
-
require 'petrovich/
|
8
|
+
require 'petrovich/rule_set'
|
9
|
+
require 'petrovich/case/rule'
|
10
|
+
require 'petrovich/case/rule/modifier'
|
11
|
+
require 'petrovich/case/rule/test'
|
12
|
+
require 'petrovich/gender/rule'
|
6
13
|
|
7
|
-
#
|
8
|
-
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
#
|
19
|
-
# Если известен пол, то его можно передать в конструктор. Это повышает точность склонений
|
20
|
-
#
|
21
|
-
# rn = Petrovich.new('male')
|
22
|
-
#
|
23
|
-
# Если пол не известен, его можно определить по отчеству, при помощи метода +detect_gender+
|
24
|
-
#
|
25
|
-
# gender = Petrovich.detect_gender('Сергеевич')
|
26
|
-
# rn = Petrovich.new(gender)
|
27
|
-
#
|
28
|
-
# Возможные падежи
|
29
|
-
#
|
30
|
-
# * +:nominative+ - именительный
|
31
|
-
# * +:genitive+ - родительный
|
32
|
-
# * +:dative+ - дательный
|
33
|
-
# * +:accusative+ - винительный
|
34
|
-
# * +:instrumental+ - творительный
|
35
|
-
# * +:prepositional+ - предложный
|
36
|
-
#
|
37
|
-
class Petrovich
|
38
|
-
CASES = [:nominative, :genitive, :dative, :accusative, :instrumental, :prepositional]
|
14
|
+
# A library to inflect Russian anthroponyms such as first names, last names, and middle names.
|
15
|
+
module Petrovich
|
16
|
+
# Possible cases
|
17
|
+
CASES = [
|
18
|
+
:nominative,
|
19
|
+
:genitive,
|
20
|
+
:dative,
|
21
|
+
:accusative,
|
22
|
+
:instrumental,
|
23
|
+
:prepositional
|
24
|
+
]
|
39
25
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
PREPOSITIONAL = :prepositional # предложный
|
46
|
-
|
47
|
-
def initialize(gender = nil)
|
48
|
-
@gender = gender.to_s
|
49
|
-
end
|
50
|
-
|
51
|
-
def lastname(name, gcase, scase = :nominative)
|
52
|
-
Rules.new(@gender).lastname(name, gcase, scase)
|
53
|
-
end
|
54
|
-
|
55
|
-
def firstname(name, gcase, scase = :nominative)
|
56
|
-
Rules.new(@gender).firstname(name, gcase, scase)
|
57
|
-
end
|
58
|
-
|
59
|
-
def middlename(name, gcase, scase = :nominative)
|
60
|
-
Rules.new(@gender).middlename(name, gcase, scase)
|
61
|
-
end
|
62
|
-
|
63
|
-
alias :patronymic :middlename
|
26
|
+
class << self
|
27
|
+
# A place that keeps inflection and gender rules loaded from yaml file.
|
28
|
+
#
|
29
|
+
# @return Petrovich::RuleSet
|
30
|
+
attr_accessor :rule_set
|
64
31
|
|
65
|
-
|
66
|
-
|
67
|
-
|
32
|
+
# Checks name that should be value object, instance of {Petrovich::Value}
|
33
|
+
#
|
34
|
+
# Raises an ArgumentError if passed argument not of type Petrovich::Value or
|
35
|
+
# all values is empty in this object.
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# Petrovich.assert_name!(name)
|
39
|
+
#
|
40
|
+
# @param [Foo] name Value to check
|
41
|
+
def assert_name!(name)
|
42
|
+
unless name.is_a?(Value)
|
43
|
+
fail ArgumentError, 'Passed argument should be Petrovich::Value instace'.freeze
|
44
|
+
end
|
68
45
|
|
69
|
-
|
70
|
-
|
46
|
+
if [name.lastname, name.firstname, name.middlename].compact.size == 0
|
47
|
+
fail ArgumentError, 'You should set at least one of :lastname, :firstname or :middlename'.freeze
|
48
|
+
end
|
49
|
+
end
|
71
50
|
|
72
|
-
#
|
51
|
+
# Checks passed argument that should be member of {CASES}
|
73
52
|
#
|
74
|
-
#
|
53
|
+
# Raises an ArgumentError if passed argument not in {CASES}
|
75
54
|
#
|
76
|
-
#
|
55
|
+
# @example
|
56
|
+
# Petrovich.assert_case!(name_case)
|
77
57
|
#
|
78
|
-
#
|
58
|
+
# @param [Foo] name_case Value to check
|
59
|
+
def assert_case!(name_case)
|
60
|
+
return if CASES.include?(name_case)
|
61
|
+
fail ArgumentError, "Unknown case #{name_case}"
|
62
|
+
end
|
63
|
+
|
64
|
+
# Converts hash to {Petrovich::Value} value object
|
79
65
|
#
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
66
|
+
# @example
|
67
|
+
# Petrovich.normalize_name(firstname: 'Иван', lastname: 'Иванов')
|
68
|
+
#
|
69
|
+
# @param [Hash] name Value hash with lastname, firstname, middlename
|
70
|
+
# @return [Petrovich::Value] Value object
|
71
|
+
def normalize_name(name)
|
72
|
+
name = Value.new(name) if name.is_a?(Hash)
|
73
|
+
name
|
74
|
+
end
|
75
|
+
|
76
|
+
# Loads YAML rules into {Petrovich::RuleSet} object
|
77
|
+
# @return [void]
|
78
|
+
def load_rules!
|
79
|
+
self.rule_set ||= RuleSet.new
|
80
|
+
self.rule_set.load!
|
89
81
|
end
|
90
82
|
end
|
83
|
+
|
84
|
+
load_rules!
|
85
|
+
|
86
|
+
require 'petrovich/name'
|
87
|
+
end
|
88
|
+
|
89
|
+
# Main entry point
|
90
|
+
def Petrovich(opts)
|
91
|
+
Petrovich::Name.new(opts)
|
91
92
|
end
|