petrovich 0.0.1

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.
data/MIT-LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 tanraya
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,124 @@
1
+ ![Petrovich Logo](https://raw.github.com/rocsci/petrovich/master/petrovich.png)
2
+
3
+ Склонение падежей русских имён, фамилий и отчеств. Вы задаёте начальное имя в именительном падеже, а получаете в нужном вам.
4
+
5
+ [![Build Status](https://secure.travis-ci.org/rocsci/petrovich.png)](http://travis-ci.org/rocsci/petrovich)
6
+
7
+ ## Установка
8
+
9
+ Добавьте в Gemfile:
10
+
11
+ gem 'petrovich'
12
+
13
+ Установите гем:
14
+
15
+ $ bundle
16
+
17
+ Или, установите отдельно:
18
+
19
+ $ gem install petrovich
20
+
21
+ ## Использование
22
+
23
+ Вы задаёте начальные значения (фамилию, имя и отчество) в именительном падеже. Самое простое использование выглядит так:
24
+
25
+ ```ruby
26
+ # Указание пола снижает количество отказов
27
+ p = Petrovich.new(:male)
28
+ p.lastname('Иванов', :dative) # => Иванову
29
+ p.firstname('Пётр', :dative) # => Петру
30
+ p.lastname('Сергеевич', :dative) # => Сергеевичу
31
+ ```
32
+
33
+ Конструктор класса +Petrovich+ принимает в качестве единственного аргумента пол. Пол может иметь значения +:male+, +:female+ или +:both+. Последнее означает, что имя не склоняется по родам (обычно, это не нужно).
34
+
35
+ ### Продвинутое использование
36
+
37
+ Вы можете подмешать модуль +Petrovich::Extension+ в любой класс. Это особенно полезно при использовании +ActiveRecord+, и подобных ORM.
38
+
39
+ ```ruby
40
+ class User < ActiveRecord::Base
41
+ include Petrovich::Extension
42
+
43
+ petrovich :firstname => :my_firstname,
44
+ :middlename => :my_middlename,
45
+ :lastname => :my_lastname
46
+
47
+ def my_firstname
48
+ 'Пётр'
49
+ end
50
+
51
+ def my_middlename
52
+ 'Петрович'
53
+ end
54
+
55
+ def my_lastname
56
+ 'Петренко'
57
+ end
58
+ end
59
+ ```
60
+
61
+ Или, подмешиваем в обычный класс:
62
+
63
+ ```ruby
64
+ class Person
65
+
66
+ petrovich :firstname => :name,
67
+ :middlename => :patronymic,
68
+ :lastname => :surname
69
+
70
+ def name
71
+ 'Иван'
72
+ end
73
+
74
+ def patronymic
75
+ 'Олегович'
76
+ end
77
+
78
+ def surname
79
+ 'Сафронов'
80
+ end
81
+ end
82
+ ```
83
+
84
+ В примерах выше, вы указываете при помощи метода `petrovich` соответствие фамилии, имени и отчества соответствующим методам или аттрибутам класса. После этого, вы легко можете склонять имена, используя следующий синтаксис вызовов:
85
+
86
+ ```ruby
87
+ user = User.new
88
+ user.my_firstname # => Пётр
89
+ user.my_firstname_dative => Петру
90
+ ```
91
+
92
+ и для второго примера:
93
+
94
+ ```ruby
95
+ person = User.new
96
+ person.name # => Иван
97
+ person.name_dative => Ивану
98
+ ```
99
+
100
+ Вы просто добавляете `_падеж` в конец имени оригинального метода и получаете нужное значение. Вот список суффиксов, которые вы можете добавить к имени оригинального метода, чтобы получить имя в нужном падаже:
101
+
102
+ * nominative - именительный
103
+ * genitive - родительный
104
+ * dative - дательный
105
+ * accusative - винительный
106
+ * instrumentative - творительный
107
+ * prepositional - предложный
108
+
109
+ ## Разработчики
110
+
111
+ * [Андрей Козлов](https://github.com/tanraya) - идея, реализация
112
+ * [Дмитрий Усталов](https://github.com/eveel) - неоценимая помощь
113
+
114
+ ## Содействие
115
+
116
+ Если вы нашли баги, как программной части, так и в словаре, вы всегда можете форкнуть репозиторий и внести необходимые правки. Ваша помощь не останется незамеченной. Если вы заметили ошибки при склонении падежей имён, фамилий или отчеств, можете написать об этом в issues. Проблема будет сразу же исследована и решена.
117
+
118
+ Как всегда, чтобы помочь, вам нужно:
119
+
120
+ 1. Fork it
121
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
122
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
123
+ 4. Push to the branch (`git push origin my-new-feature`)
124
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ # Run tests by default
16
+ task :default => :spec
17
+
18
+ Bundler::GemHelper.install_tasks
data/lib/petrovich.rb ADDED
@@ -0,0 +1,88 @@
1
+ # encoding: utf-8
2
+ require 'yaml'
3
+ require 'petrovich/rules'
4
+ require 'petrovich/extension'
5
+
6
+ # Склонение падежей русских имён фамилий и отчеств. Вы задаёте начальное имя в именительном падеже,
7
+ # а получаете в нужном вам.
8
+ #
9
+ # Использование
10
+ #
11
+ # # Склонение в дательном падеже
12
+ # rn = Petrovich.new
13
+ # puts rn.firstname('Иван', :dative) # => Ивану
14
+ # puts rn.middlename('Сергеевич', :dative) # => Сергеевичу
15
+ # puts rn.lastname('Воронов', :dative) # => Воронову
16
+ #
17
+ #
18
+ # Если известен пол, то его можно передать в конструктор. Это повышает точность склонений
19
+ #
20
+ # rn = Petrovich.new('male')
21
+ #
22
+ # Если пол не известен, его можно определить по отчеству, при помощи метода +detect_gender+
23
+ #
24
+ # gender = Petrovich.detect_gender('Сергеевич')
25
+ # rn = Petrovich.new(gender)
26
+ #
27
+ # Возможные падежи
28
+ #
29
+ # * +:nominative+ - именительный
30
+ # * +:genitive+ - родительный
31
+ # * +:dative+ - дательный
32
+ # * +:accusative+ - винительный
33
+ # * +:instrumentative+ - творительный
34
+ # * +:prepositional+ - предложный
35
+ #
36
+ class Petrovich
37
+ CASES = [:nominative, :genitive, :dative, :accusative, :instrumentative, :prepositional]
38
+
39
+ NOMINATIVE = :nominative # именительный
40
+ GENITIVE = :genitive # родительный
41
+ DATIVE = :dative # дательный
42
+ ACCUSATIVE = :accusative # винительный
43
+ INSTRUMENTATIVE = :instrumentative # творительный
44
+ PREPOSITIONAL = :prepositional # предложный
45
+
46
+ def initialize(gender = nil)
47
+ @gender = gender.to_s
48
+ end
49
+
50
+ def lastname(name, gcase)
51
+ Rules.new(@gender).lastname(name, gcase)
52
+ end
53
+
54
+ def firstname(name, gcase)
55
+ Rules.new(@gender).firstname(name, gcase)
56
+ end
57
+
58
+ def middlename(name, gcase)
59
+ Rules.new(@gender).middlename(name, gcase)
60
+ end
61
+
62
+ alias :patronymic :middlename
63
+
64
+ def gender
65
+ @gender
66
+ end
67
+
68
+ class << self
69
+ # Определение пола по отчеству
70
+ #
71
+ # detect_gender('Алексеевич') # => male
72
+ #
73
+ # Если пол не был определён, метод возвращает значение +both+
74
+ #
75
+ # detect_gender('блаблабла') # => both
76
+ #
77
+ def detect_gender(midname)
78
+ case midname[-2, 2].mb_chars.downcase
79
+ when 'ич'
80
+ 'male'
81
+ when 'на'
82
+ 'female'
83
+ else
84
+ 'both'
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,133 @@
1
+ # encoding: utf-8
2
+
3
+ class Petrovich
4
+ # Этот модуль разработан для возможности его подмешивания в класс Ruby.
5
+ # Его можно подмешать в любой класс, например, в модель ActiveRecord.
6
+ #
7
+ # При помощи вызова метода +petrovich+ вы указываете, какие аттрибуты или методы класса
8
+ # будут возвращать фамилию, имя и отчество.
9
+ #
10
+ # Опции:
11
+ #
12
+ # [:+firstname+]
13
+ # Указывает метод, возвращающий имя
14
+ #
15
+ # [:+middlename+]
16
+ # Указывает метод, возвращающий отчество
17
+ #
18
+ # [:+lastname+]
19
+ # Указывает метод, возвращающий фамилию
20
+ #
21
+ # [:+order+]
22
+ # Задаёт порядок составляющих имени для их установки или вывода при использовании +:fullname+
23
+ #
24
+ # [:+fullname+]
25
+ # Задаёт или возвращает полное имя. Используется совместно с +:order+.
26
+ #
27
+ # petrovich :fullname => :my_fullname
28
+ # :order => [:firstname, :middlename, :lastname]
29
+ #
30
+ # def my_fullname
31
+ # 'Аркадий Семёнович Дичко'
32
+ # end
33
+ #
34
+ # Далее при вызове метода вы получите:
35
+ #
36
+ # my_fullname_dative # => Аркадию Семёновичу Дичко
37
+ #
38
+ #
39
+ # [:+delimeter+]
40
+ # Задаёт разделитель для +:fullname+. По-умолчанию равен +/\s+/+
41
+ #
42
+ # Пример использования
43
+ #
44
+ # class User
45
+ # include Petrovich::Extension
46
+ #
47
+ # petrovich :firstname => :my_firstname,
48
+ # :middlename => :my_middlename,
49
+ # :lastname => :my_lastname
50
+ #
51
+ # def my_firstname
52
+ # 'Пётр'
53
+ # end
54
+ #
55
+ # def my_middlename
56
+ # 'Александрович'
57
+ # end
58
+ #
59
+ # def my_lastname
60
+ # 'Ларин'
61
+ # end
62
+ # end
63
+ #
64
+ # Вы получите следующие методы
65
+ #
66
+ # user = User.new
67
+ # user.my_lastname_dative # => Ларину
68
+ # user.my_firstname_dative # => Петру
69
+ # user.my_middlename_dative # => Александровичу
70
+ #
71
+ # Вышеперечисленные методы доступны и внутри класса User.
72
+ #
73
+ module Extension
74
+ def self.included(base)
75
+ base.extend ClassMethods
76
+ end
77
+
78
+ module ClassMethods
79
+ def petrovich(options)
80
+ class_eval do
81
+ class << self
82
+ attr_accessor :petrovich_configuration
83
+ end
84
+ end
85
+
86
+ self.petrovich_configuration = {
87
+ :fullname => nil,
88
+ :firstname => nil,
89
+ :middlename => nil,
90
+ :lastname => nil,
91
+ :order => [:lastname, :firstname, :middlename],
92
+ :delimeter => /\s+/
93
+ }.merge(options)
94
+ end
95
+ end
96
+
97
+ def petrovich_create_getter(method_name, attribute, gcase, name)
98
+ options = self.class.petrovich_configuration
99
+ reflection = options.key(attribute.to_sym) or raise "No reflection for attribute '#{attribute}'!"
100
+
101
+ self.class.send(:define_method, method_name) do
102
+ rn = Petrovich.new
103
+ rn.send(reflection, name, gcase)
104
+ end
105
+ end
106
+
107
+ def method_missing(method_name, *args, &block)
108
+ if match = method_name.to_s.match(petrovich_method_regex)
109
+ attribute = match[1]
110
+ name = send(attribute)
111
+ gcase = match[2]
112
+
113
+ petrovich_create_getter(method_name, attribute, gcase, name).call
114
+ else
115
+ super
116
+ end
117
+ end
118
+
119
+ def respond_to?(method_name, include_private = false)
120
+ if match = method_name.to_s.match(petrovich_method_regex)
121
+ true
122
+ else
123
+ super
124
+ end
125
+ end
126
+
127
+ def petrovich_method_regex
128
+ %r{(.+)_(#{Petrovich::CASES.join('|')})$}
129
+ end
130
+
131
+ protected :petrovich_method_regex
132
+ end
133
+ end
@@ -0,0 +1,109 @@
1
+ require 'active_support/core_ext'
2
+
3
+ class Petrovich
4
+ # Загрузка правил происходит один раз
5
+ RULES = YAML.load_file(File.dirname(__FILE__) + '/rules.yml')
6
+
7
+ # Набор методов для нахождения и применения правил к имени, фамилии и отчеству.
8
+ class Rules
9
+ def initialize(gender = nil)
10
+ @gender = gender
11
+ end
12
+
13
+ # Определяет методы +lastname_<i>case</i>+, +firstname_<i>case</i>+ и +middlename_<i>case</i>+
14
+ # для получения имени, фамилии и отчества в нужном падеже.
15
+ #
16
+ # Использование:
17
+ #
18
+ # # Дательный падеж
19
+ # lastname_dative('Комаров') # => Комарову
20
+ #
21
+ # # Винительный падеж
22
+ # lastname_accusative('Комаров') # => Комарова
23
+ #
24
+ [:lastname, :firstname, :middlename].each do |m|
25
+ define_method(m) { |name, gcase| find_and_apply(name, gcase, Petrovich::RULES[__method__.to_s]) }
26
+ end
27
+
28
+ protected
29
+
30
+ def match?(name, rule, match_whole_word)
31
+ return false if rule['gender'] == 'male' && female? || rule['gender'] == 'female' && !female?
32
+
33
+ name = name.mb_chars.downcase
34
+ rule['test'].each do |chars|
35
+ test = match_whole_word ? name : name.slice([name.size - chars.size, 0].max .. -1)
36
+ return true if test == chars
37
+ end
38
+
39
+ false
40
+ end
41
+
42
+ def male?
43
+ @gender == 'male'
44
+ end
45
+
46
+ def female?
47
+ @gender == 'female'
48
+ end
49
+
50
+ # Применить правило
51
+ def apply(name, gcase, rule)
52
+ modificator_for(gcase, rule).each_char do |char|
53
+ case char
54
+ when '.'
55
+ when '-'
56
+ name = name.slice(0, name.size - 1)
57
+ else
58
+ name += char
59
+ end
60
+ end
61
+
62
+ name
63
+ end
64
+
65
+ # Найти правило и применить к имени с учетом склонения
66
+ def find_and_apply(name, gcase, rules)
67
+ apply(name, gcase, find_for(name, rules))
68
+ end
69
+
70
+ # Найти подходящее правило в исключениях или суффиксах
71
+ def find_for(name, rules)
72
+ # Сначала пытаемся найти исключения
73
+ if rules.has_key?('exceptions')
74
+ p = find(name, rules['exceptions'], true)
75
+ return p if p
76
+ end
77
+
78
+ # Не получилось, ищем в суффиксах. Если не получилось найти и в них,
79
+ # возвращаем неизмененное имя.
80
+ find(name, rules['suffixes'], false) || name
81
+ end
82
+
83
+ # Найти подходящее правило в конкретном списке правил
84
+ def find(name, rules, match_whole_word)
85
+ rules.find { |rule| match?(name, rule, match_whole_word) }
86
+ end
87
+
88
+ # Получить модификатор из указанного правиля для указанного склонения
89
+ def modificator_for(gcase, rule)
90
+ case gcase.to_sym
91
+ when NOMINATIVE
92
+ '.'
93
+ when GENITIVE
94
+ rule['mods'][0]
95
+ when DATIVE
96
+ rule['mods'][1]
97
+ when ACCUSATIVE
98
+ rule['mods'][2]
99
+ when INSTRUMENTATIVE
100
+ rule['mods'][3]
101
+ when PREPOSITIONAL
102
+ rule['mods'][4]
103
+ else
104
+ raise "Unknown grammatic case: #{gcase}"
105
+ end
106
+ end
107
+
108
+ end
109
+ end
@@ -0,0 +1,269 @@
1
+ # Набор правил для склонения русских имён, фамилий и отчеств по падежам.
2
+ #
3
+ # = Описание формата файла
4
+ #
5
+ # Файл содержит 3 группы правил. Это +lastname+, +firstname+ и +middlename+. Каждая группа
6
+ # содержит подгруппы с правилами:
7
+ #
8
+ # * Подгруппа +exceptions+ (её может не быть)
9
+ # * Подгруппа +suffixes+
10
+ #
11
+ # == Правила
12
+ #
13
+ # В свою очередь, каждая подгруппа содержит набор правил. Каждое правило содержит 3 составляющие:
14
+ #
15
+ # * Пол (gender). Допустимые значения: +male+, +female+, +both+
16
+ # * Что заменять (test). Массив суффиксов для замены.
17
+ # * На что заменять (mods). Массив модификаторов. Модификатор может иметь впереди один или
18
+ # дефис, он означает количество символов, которые нужно будет вырезать из слова.
19
+ #
20
+ # Правила отделяются друг от друга переносом строки для лучшего восприятия.
21
+ #
22
+ # === Из чего состоят суффиксы
23
+ #
24
+ # === Из чего состоят модификаторы
25
+ #
26
+ # [родительный, дательный, винительный, творительный, предложный]
27
+ #
28
+ # == Как добавить новое правило
29
+ #
30
+ lastname:
31
+ exceptions:
32
+ - gender: both
33
+ test: [дюма, тома, дега, люка, ферма, гамарра, петипа, шандра]
34
+ mods: [., ., ., ., .]
35
+
36
+ - gender: both
37
+ test: [гусь, ремень, камень, онук, богода, нечипас, долгопалец, маненок, рева, кива]
38
+ mods: [., ., ., ., .]
39
+
40
+ - gender: both
41
+ test: [вий, сой, цой, хой]
42
+ mods: [-я, -ю, -я, -ем, -е]
43
+
44
+ suffixes:
45
+ - gender: female
46
+ test: [б, в, г, д, ж, з, й, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, ъ, ь]
47
+ mods: [., ., ., ., .]
48
+
49
+ - gender: female
50
+ test: [ска, цка]
51
+ mods: [-ой, -ой, -ую, -ой, -ой]
52
+
53
+ - gender: female
54
+ test: [ая]
55
+ mods: [--ой, --ой, --ую, --ой, --ой]
56
+
57
+ - gender: both
58
+ test: [ская]
59
+ mods: [--ой, --ой, --ую, --ой, --ой]
60
+
61
+ - gender: female
62
+ test: [на]
63
+ mods: [-ой, -ой, -у, -ой, -ой]
64
+
65
+ - gender: both
66
+ test: [иной]
67
+ mods: [-я, -ю, -я, -ем, -е]
68
+
69
+ - gender: both
70
+ test: [уй]
71
+ mods: [-я, -ю, -я, -ем, -е]
72
+
73
+ - gender: both
74
+ test: [ца]
75
+ mods: [-ы, -е, -у, -ей, -е]
76
+
77
+ - gender: both
78
+ test: [рих]
79
+ mods: [а, у, а, ом, е]
80
+
81
+ - gender: both
82
+ test: [ия]
83
+ mods: [., ., ., ., .]
84
+
85
+ - gender: both
86
+ test: [иа, аа, оа, уа, ыа, еа, юа, эа]
87
+ mods: [., ., ., ., .]
88
+
89
+ - gender: both
90
+ test: [их, ых]
91
+ mods: [., ., ., ., .]
92
+
93
+ - gender: both
94
+ test: [о, е, э, и, ы, у, ю]
95
+ mods: [., ., ., ., .]
96
+
97
+ - gender: both
98
+ test: [ова, ева]
99
+ mods: [-ой, -ой, -у, -ой, -ой]
100
+
101
+ - gender: both
102
+ test: [га, ка, ха, ча, ща, жа]
103
+ mods: [-и, -е, -у, -ой, -е]
104
+
105
+ - gender: both
106
+ test: [ца]
107
+ mods: [-и, -е, -у, -ей, -е]
108
+
109
+ - gender: both
110
+ test: [а]
111
+ mods: [-ы, -е, -у, -ой, -е]
112
+
113
+ - gender: both
114
+ test: [ь]
115
+ mods: [-я, -ю, -я, -ем, -е]
116
+
117
+ - gender: both
118
+ test: [ия]
119
+ mods: [-и, -и, -ю, -ей, -и]
120
+
121
+ - gender: both
122
+ test: [я]
123
+ mods: [-и, -е, -ю, -ей, -е]
124
+
125
+ - gender: both
126
+ test: [ей]
127
+ mods: [-я, -ю, -я, -ем, -е]
128
+
129
+ - gender: both
130
+ test: [ян, ан, йн]
131
+ mods: [а, у, а, ом, е]
132
+
133
+ - gender: both
134
+ test: [ынец, обец]
135
+ mods: [--ца, --цу, --ца, --цем, --це]
136
+
137
+ - gender: both
138
+ test: [онец, овец]
139
+ mods: [--ца, --цу, --ца, --цом, --це]
140
+
141
+ - gender: both
142
+ test: [ай]
143
+ mods: [-я, -ю, -я, -ем, -е]
144
+
145
+ - gender: both
146
+ test: [гой, кой]
147
+ mods: [-го, -му, -го, --им, -м]
148
+
149
+ - gender: both
150
+ test: [ой]
151
+ mods: [-го, -му, -го, --ым, -м]
152
+
153
+ - gender: both
154
+ test: [ах, ив]
155
+ mods: [а, у, а, ом, е]
156
+
157
+ - gender: both
158
+ test: [ший, щий, жий, ний]
159
+ mods: [--его, --ему, --его, -м, --ем]
160
+
161
+ - gender: both
162
+ test: [кий, ый]
163
+ mods: [--ого, --ому, --ого, -м, --ом]
164
+
165
+ - gender: both
166
+ test: [ий]
167
+ mods: [-я, -ю, -я, -ем, -и]
168
+
169
+ - gender: both
170
+ test: [ок]
171
+ mods: [--ка, --ку, --ка, --ком, --ке]
172
+
173
+ - gender: both
174
+ test: [ец]
175
+ mods: [--ца, --цу, --ца, --цом, --це]
176
+
177
+ - gender: both
178
+ test: [ц, ч, ш, щ]
179
+ mods: [а, у, а, ем, е]
180
+
181
+ - gender: both
182
+ test: [в, н]
183
+ mods: [а, у, а, ым, е]
184
+
185
+ - gender: both
186
+ test: [б, г, д, ж, з, к, л, м, п, р, с, т, ф, х]
187
+ mods: [а, у, а, ом, е]
188
+
189
+ firstname:
190
+ exceptions:
191
+ - gender: both
192
+ test: [лев]
193
+ mods: [--ьва, --ьву, --ьва, --ьвом, --ьве]
194
+
195
+ - gender: both
196
+ test: [пётр]
197
+ mods: [---етра, ---етру, ---етра, ---етром, ---етре]
198
+
199
+ - gender: both
200
+ test: [павел]
201
+ mods: [--ла, --лу, --ла, --лом, --ле]
202
+
203
+ - gender: male
204
+ test: [шота]
205
+ mods: [., ., ., ., .]
206
+
207
+ - gender: female
208
+ test: [рашель, нинель, николь, габриэль, даниэль]
209
+ mods: [., ., ., ., .]
210
+
211
+ suffixes:
212
+ - gender: both
213
+ test: [е, ё, и, о, у, ы, э, ю]
214
+ mods: [., ., ., ., .]
215
+
216
+ - gender: female
217
+ test: [б, в, г, д, ж, з, й, к, л, м, н, п, р, с, т, ф, х, ц, ч, ш, щ, ъ]
218
+ mods: [., ., ., ., .]
219
+
220
+ - gender: female
221
+ test: [ь]
222
+ mods: [-и, -и, ., ю, -и]
223
+
224
+ - gender: male
225
+ test: [ь]
226
+ mods: [-я, -ю, -я, -ем, -е]
227
+
228
+ - gender: both
229
+ test: [га, ка, ха, ча, ща, жа]
230
+ mods: [-и, -е, -у, -ой, -е]
231
+
232
+ - gender: both
233
+ test: [а]
234
+ mods: [-ы, -е, -у, -ой, -е]
235
+
236
+ - gender: both
237
+ test: [ия]
238
+ mods: [-и, -и, -ю, -ей, -и]
239
+
240
+ - gender: both
241
+ test: [я]
242
+ mods: [-и, -е, -ю, -ей, -е]
243
+
244
+ - gender: both
245
+ test: [ей]
246
+ mods: [-я, -ю, -я, -ем, -е]
247
+
248
+ - gender: both
249
+ test: [ий]
250
+ mods: [-я, -ю, -я, -ем, -и]
251
+
252
+ - gender: both
253
+ test: [й]
254
+ mods: [-я, -ю, -я, -ем, -е]
255
+
256
+ - gender: both
257
+ test: [б, в, г, д, ж, з, к, л, м, н, п, р, с, т, ф, х, ц, ч]
258
+ mods: [а, у, а, ом, е]
259
+
260
+ middlename:
261
+ suffixes:
262
+ - gender: both
263
+ test: [ич]
264
+ mods: [а, у, а, ем, е]
265
+
266
+ - gender: both
267
+ test: [на]
268
+ mods: [-ы, -е, -у, -ой, -е]
269
+
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: petrovich
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Andrew Kozloff
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-04-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: i18n
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.6.4
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.6.4
30
+ - !ruby/object:Gem::Dependency
31
+ name: activesupport
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: 3.2.12
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 3.2.12
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: sqlite3
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: activerecord
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: 3.2.12
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 3.2.12
94
+ - !ruby/object:Gem::Dependency
95
+ name: gem-release
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.4.1
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: 0.4.1
110
+ description: Вы задаёте начальное имя в именительном падеже, а получаете в нужном
111
+ вам
112
+ email:
113
+ - demerest@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - lib/petrovich/extension.rb
119
+ - lib/petrovich/rules.rb
120
+ - lib/petrovich/rules.yml
121
+ - lib/petrovich.rb
122
+ - MIT-LICENSE
123
+ - Rakefile
124
+ - README.md
125
+ homepage: https://github.com/tanraya/papillon
126
+ licenses: []
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 1.8.24
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Склонение падежей русских имён, фамилий и отчеств
149
+ test_files: []