petrovich 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []