rutils 1.1.4 → 2.0.0
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/.gemtest +0 -0
- data/History.txt +10 -0
- data/Manifest.txt +4 -8
- data/README.txt +20 -172
- data/Rakefile.rb +5 -11
- data/init.rb +3 -3
- data/lib/{gilenson/gilenson_stub.rb → gilenson_stub.rb} +0 -6
- data/lib/integration/integration.rb +1 -1
- data/lib/integration/rails_date_helper_override.rb +4 -4
- data/lib/pluralizer.rb +101 -0
- data/lib/rudates.rb +85 -0
- data/lib/rutils.rb +13 -7
- data/lib/transliteration.rb +30 -0
- data/lib/version.rb +1 -1
- data/test/extras/integration_rails_filter.rb +1 -1
- data/test/extras/integration_rails_gilenson_helpers.rb +1 -1
- data/test/extras/integration_rails_helpers.rb +1 -1
- data/test/run_tests.rb +1 -1
- data/test/test_datetime.rb +16 -7
- data/test/test_integration.rb +1 -1
- data/test/test_integration_flag.rb +1 -1
- data/test/test_pluralize.rb +1 -1
- data/test/test_rutils_base.rb +1 -1
- data/test/test_transliteration.rb +1 -32
- metadata +45 -32
- data/bin/rutilize +0 -38
- data/lib/countries/countries.rb +0 -1773
- data/lib/datetime/datetime.rb +0 -83
- data/lib/pluralizer/pluralizer.rb +0 -288
- data/lib/transliteration/bidi.rb +0 -21
- data/lib/transliteration/simple.rb +0 -75
- data/lib/transliteration/transliteration.rb +0 -79
data/.gemtest
ADDED
File without changes
|
data/History.txt
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
=== 2.0.0 - 19.03.2011
|
2
|
+
|
3
|
+
* Все ребята, хватит. Пользоваться рутилями на Rails 3 с Ruby 1.9.2 это пиздец и привет горячий.
|
4
|
+
Примерно как ставить тюнингованный жигулевский карбюратор на феррари.
|
5
|
+
Рутили остаются в рабочем состоянии для старых приложений для которых апгрейд на i18n+russian
|
6
|
+
не является целесообразным. Если вы использовали какую-то конкретную маленькую полезняшку из рутилей
|
7
|
+
она скорее всего доступна отдельным модулем.
|
8
|
+
|
9
|
+
Спасибо что были с нами и до новых встреч!
|
10
|
+
|
1
11
|
=== 1.1.4 - 03.11.2010
|
2
12
|
|
3
13
|
* Подавление KCODE для Ruby 1.9
|
data/Manifest.txt
CHANGED
@@ -4,19 +4,15 @@ Manifest.txt
|
|
4
4
|
README.txt
|
5
5
|
Rakefile.rb
|
6
6
|
TODO.txt
|
7
|
-
bin/rutilize
|
8
7
|
init.rb
|
9
|
-
lib/
|
10
|
-
lib/datetime/datetime.rb
|
11
|
-
lib/gilenson/gilenson_stub.rb
|
8
|
+
lib/gilenson_stub.rb
|
12
9
|
lib/integration/integration.rb
|
13
10
|
lib/integration/rails_date_helper_override.rb
|
14
11
|
lib/integration/rails_pre_filter.rb
|
15
|
-
lib/pluralizer
|
12
|
+
lib/pluralizer.rb
|
13
|
+
lib/rudates.rb
|
16
14
|
lib/rutils.rb
|
17
|
-
lib/transliteration
|
18
|
-
lib/transliteration/simple.rb
|
19
|
-
lib/transliteration/transliteration.rb
|
15
|
+
lib/transliteration.rb
|
20
16
|
lib/version.rb
|
21
17
|
test/extras/integration_rails_filter.rb
|
22
18
|
test/extras/integration_rails_gilenson_helpers.rb
|
data/README.txt
CHANGED
@@ -1,108 +1,28 @@
|
|
1
1
|
= RuTils
|
2
2
|
|
3
|
-
http://rutils
|
3
|
+
http://github.com/julik/rutils
|
4
4
|
|
5
|
-
RuTils
|
6
|
-
|
7
|
-
|
5
|
+
RuTils был целым ящиком инструментов для простой обработки русского текста на Ruby
|
6
|
+
и руссификации Ryby-приложений. После тяжелого четырехлетного труда ящик списан на пенсию
|
7
|
+
в дедушкин сарай. Для справки - "дедушкин сарай" это то место где крутятся написанные с помощью
|
8
|
+
RuTils приложения и где клиенты очень не хотят чтобы при апдейтах RuTils приложение ломалось.
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
10
|
+
rutils в настоящий момент - минимальная прослойка между маленькими составными библиотеками которые
|
11
|
+
можно (и нужно!) использовать отдельно. Сам модуль rutils обновляться больше не будет, функционал
|
12
|
+
заморожен, авторы ушли и выключили свет.
|
12
13
|
|
13
14
|
= Как воспользоваться
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
require 'rutils'
|
18
|
-
|
19
|
-
Для использования с Ruby on Rails установите RuTils как плагин
|
20
|
-
(скопируйте библиотеку в vendor/plugins приложения).
|
21
|
-
|
22
|
-
= Что оно делает
|
23
|
-
|
24
|
-
== Cумма прописью и выбор числительного
|
25
|
-
|
26
|
-
RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным
|
27
|
-
учетом рода. Например:
|
28
|
-
|
29
|
-
4.propisju => "четыре"
|
30
|
-
345.propisju => "триста сорок пять"
|
31
|
-
231.propisju(2) => "двести тридцать одна"
|
32
|
-
341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
|
33
|
-
(212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
|
34
|
-
четыре десятых сволочи"
|
35
|
-
|
36
|
-
Также реализуется выбор варианта числительного в зависимости от числа
|
37
|
-
|
38
|
-
15.items("кодер", "кодера", "кодеров") => "кодеров"
|
39
|
-
|
40
|
-
и вывод "суммы прописью" для денежных сумм в рублях
|
41
|
-
|
42
|
-
(413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
|
43
|
-
1.rubl => "один рубль"
|
44
|
-
22.rublja => "двадцать два рубля"
|
45
|
-
|
46
|
-
Если вы храните денежные единицы в целочисленных типах, пользуйтесь "копеечными" вариантами:
|
47
|
-
|
48
|
-
300.kopeek => "три рубля"
|
49
|
-
121.kopeika => "один рубль двадцать одна копейка"
|
50
|
-
|
51
|
-
== Транслит
|
52
|
-
|
53
|
-
RuTils на данный момент реализует простейший транслит "в одну сторону".
|
54
|
-
"Взаимно-однозначный транслит" (BiDi-транслит) больше не поддерживается.
|
55
|
-
|
56
|
-
"Вот такое вот дело".translify => "Vot takoye vot delo"
|
57
|
-
"Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
|
58
|
-
|
59
|
-
== Обработка русской типографики в HTML
|
60
|
-
|
61
|
-
rutils автоматически использует Gilenson (http://github.com/julik/gilenson) - улучшайзер типографики в русском наборе.
|
62
|
-
|
63
|
-
Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы,
|
64
|
-
английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и
|
65
|
-
отформатирует знаки типа (c), (tm), телефоны и адреса.
|
66
|
-
|
67
|
-
%q{"И это называется языком?", -- таков был его вопрос}.gilensize => "«И
|
68
|
-
это называется языком?», — таков был его вопрос"
|
69
|
-
|
70
|
-
== Даты
|
71
|
-
|
72
|
-
В класс Date введены следующие константы:
|
73
|
-
|
74
|
-
* RU_MONTHNAMES (Январь Февраль Март...)
|
75
|
-
* RU_DAYNAMES (Воскресенье Понедельник...)
|
76
|
-
* RU_ABBR_MONTHNAMES (Янв Фев Мар...)
|
77
|
-
* RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
|
78
|
-
* RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
|
79
|
-
* RU_DAYNAMES_E (первое второе третье...)
|
80
|
-
|
81
|
-
Пример использования:
|
82
|
-
|
83
|
-
require 'date' date = Date.new(2005, 11, 9)
|
84
|
-
puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
|
85
|
-
puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
|
86
|
-
puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
|
87
|
-
puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
|
16
|
+
RuTils больше пользоваться не надо. Когда будет время просто рефакторните его вон. Гемы которые вам понадобятся
|
17
|
+
для реализации функций RuTils и сверх того:
|
88
18
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
|
94
|
-
Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
|
95
|
-
|
96
|
-
== Интеграция с RedCloth и BlueCloth
|
97
|
-
|
98
|
-
RuTils в первую очередь задумывался как максимально "прозрачный" механизм
|
99
|
-
обработки русского текста в контексте Rails-приложения. Вывод стандартных рельсовых
|
100
|
-
хелперов +markdown+ и +textilize+ будет автоматически (при включенных overrides) пропускаться через
|
101
|
-
Гиленсон.
|
19
|
+
* russian
|
20
|
+
* ru_propisju
|
21
|
+
* gilenson
|
102
22
|
|
103
23
|
== Интеграция с Rails версии 2.2.2 и выше
|
104
24
|
|
105
|
-
|
25
|
+
Не надо использовать RuTils для этих приложений. Вот собственно и все.
|
106
26
|
|
107
27
|
== Интеграция с Rails версий 1.2 - 2.1.1
|
108
28
|
|
@@ -114,93 +34,21 @@ RuTils заставляет следующие функции старых (pre-
|
|
114
34
|
* +distance_of_time_in_words+ будет выводить
|
115
35
|
русские описания длительности ("более 2 часов")
|
116
36
|
|
117
|
-
== Управление оверрайдами
|
118
|
-
|
119
|
-
Перегрузку всех функций других модулей можно включать и отключать в любое время с
|
120
|
-
помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
|
121
|
-
хелперы будут работать в стандартном режиме (например, даты и время будут выводиться по-русски).
|
122
|
-
Это нужно когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
|
123
|
-
|
124
|
-
Рекомендуемый способ использования RuTils с Ruby on Rails приложением -- установка RuTils
|
125
|
-
плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего
|
126
|
-
приложения или воспользуйтесь командой rutilize путь_к_rails_приложению чтобы сделать это
|
127
|
-
автоматически. После этого вы сможете использовать RuTils без необходимости
|
128
|
-
установки gem на вашем сервере (не забудьте перезапустить приложение чтобы
|
129
|
-
вгрузить в него RuTils).
|
130
|
-
|
131
|
-
$ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
|
132
|
-
|
133
37
|
== Распространения
|
134
38
|
|
135
39
|
Вы можете свободно распространять RuTils со своим приложением при условии
|
136
|
-
сохранения структуры и файла README.
|
40
|
+
сохранения структуры и файла README. Но лучше не распространяйте RuTils потому что он безнадежно устарел.
|
137
41
|
|
138
|
-
==
|
42
|
+
== Совместимость/требования
|
139
43
|
|
140
|
-
* Ruby 1.8
|
141
|
-
* Ruby 1.9.x (релизные версии начиная с 1.9.1)
|
142
|
-
* JRuby 1.1.6
|
143
|
-
|
144
|
-
== Требования
|
145
|
-
|
146
|
-
* Ruby 1.8.2 или выше, немного прямых рук
|
44
|
+
* Ruby 1.8 или выше, немного прямых рук
|
147
45
|
* Rake[http://rake.rubyforge.org],
|
148
46
|
|
149
|
-
|
150
|
-
Rails[http://rubyonrails.org],
|
151
|
-
RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
|
152
|
-
BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов.
|
153
|
-
|
154
|
-
== Работает ли это с текстом в кодировке отличной от UTF-8 (Windows-1251, KOI-8)
|
155
|
-
|
156
|
-
Нет и никогда не будет.
|
157
|
-
|
158
47
|
== Как получить помощь
|
159
48
|
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
* Переменная $KCODE включена в режим 'u'
|
164
|
-
* Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
|
165
|
-
|
166
|
-
Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой
|
167
|
-
RubyKanjiCode в своем httpd.conf.
|
168
|
-
|
169
|
-
== Если вы все сделали правильно но что-то не работает
|
170
|
-
|
171
|
-
Сообщите об ошибке на странице проекта на github[http://github.com/julik/rutils/issues]
|
172
|
-
Не забудьте указать версию, ее всегда можно узнать в константе
|
173
|
-
|
174
|
-
RuTils::VERSION
|
175
|
-
|
176
|
-
== Как ускорить реализацию новых функций
|
177
|
-
|
178
|
-
Опишите нужный вам функционал и приложите тесты, которым этот функционал должен удовлетворять.
|
179
|
-
Схему организации тестов вы можете скопировать из собственных тестов RuTils.
|
180
|
-
|
181
|
-
Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы,
|
182
|
-
пожалуйста следуйте следующим правилам оформления кода:
|
183
|
-
|
184
|
-
* Unix line breaks (LF)
|
185
|
-
* Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
|
186
|
-
* Все файлы должны содержать emacs-прагму
|
187
|
-
# -*- encoding: utf-8 -*-
|
188
|
-
в первой строке
|
189
|
-
* Отступы в 2 пробела, без табуляций
|
190
|
-
* Только однозначный код для 1.8 и 1.9
|
191
|
-
* Без функций которые отсутствуют в 1.8 (в первую очередь encodings)
|
192
|
-
* Без функций которые убраны из 1.9
|
193
|
-
* Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
|
194
|
-
* Все другие конвенции нормального написания
|
195
|
-
Ruby-кода (http://github.com/chneukirchen/styleguide/tree/master)
|
196
|
-
|
197
|
-
При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
|
198
|
-
- он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
|
199
|
-
разницу между двумя разными пробелами, например)
|
200
|
-
|
201
|
-
Если вы хотите участвовать в разработке RuTils - fork us on GitHub
|
202
|
-
|
203
|
-
git clone git://github.com/julik/rutils.git
|
49
|
+
Помощь по RuTils предоставляется в строго дозированном и ограниченном виде, потому что совесть тоже надо иметь.
|
50
|
+
В настоящее время есть большое количество более новых, современных библиотек реализующий функции рутилей быстро,
|
51
|
+
эффективно и совместимых с большим количеством версий Rails, ruby и так далее.
|
204
52
|
|
205
53
|
== Лицензия
|
206
54
|
|
data/Rakefile.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
$KCODE = 'u' if RUBY_VERSION < '1.9.0'
|
3
3
|
$:.reject! { |e| e.include? 'TextMate' }
|
4
4
|
|
5
|
-
require 'lib/version'
|
5
|
+
require File.expand_path(File.dirname(__FILE__) + '/lib/version')
|
6
6
|
|
7
7
|
begin
|
8
8
|
require 'rubygems'
|
@@ -14,22 +14,16 @@ begin
|
|
14
14
|
Hoe::RUBY_FLAGS.replace ENV['RUBY_FLAGS'] || "-I#{%w(lib test).join(File::PATH_SEPARATOR)}" +
|
15
15
|
(Hoe::RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
|
16
16
|
|
17
|
-
#Rake::RDocTask.class_eval do
|
18
|
-
# alias_method :_odefine, :define
|
19
|
-
# def define; @options.unshift(*DOCOPTS); _odefine; end
|
20
|
-
#end
|
21
|
-
|
22
17
|
rutils = Hoe.spec('rutils') do |p|
|
23
18
|
p.version = RuTils::VERSION
|
24
19
|
p.name = "rutils"
|
25
20
|
p.author = ["Julian 'Julik' Tarkhanov", "Danil Ivanov", "Yaroslav Markin"]
|
26
21
|
p.email = ['me@julik.nl', 'yaroslav@markin.net']
|
27
|
-
p.description = '
|
28
|
-
p.summary = '
|
29
|
-
p.extra_deps = {"gilenson" => ">=1.1.0"}
|
30
|
-
p.remote_rdoc_dir = ''
|
31
|
-
p.need_zip = true # ненвижу
|
22
|
+
p.description = 'DEPRECATED processing of russian strings'
|
23
|
+
p.summary = 'DEPRECATED processing of russian strings'
|
24
|
+
p.extra_deps = {"gilenson" => ">=1.1.0", "russian" => ">= 0.2.7", "ru_propisju" => ">= 1.0.0" }
|
32
25
|
end
|
26
|
+
|
33
27
|
rutils.spec.rdoc_options += DOCOPTS
|
34
28
|
|
35
29
|
require 'load_multi_rails_rake_tasks'
|
data/init.rb
CHANGED
@@ -5,10 +5,10 @@
|
|
5
5
|
RuTils будет автоматически загружен с включенным флагом <tt>RuTils::overrides = true</tt>.
|
6
6
|
В ActionController::Base будет установлен пре-фильтр устанавливающий флаг <tt>overrides.</tt>
|
7
7
|
=end
|
8
|
-
require File.dirname(__FILE__) + '/lib/rutils' unless defined?(RuTils)
|
8
|
+
require File.expand_path(File.dirname(__FILE__)) + '/lib/rutils' unless defined?(RuTils)
|
9
9
|
|
10
10
|
RuTils::overrides = true
|
11
|
-
require File.dirname(__FILE__) + '/lib/integration/rails_pre_filter'
|
11
|
+
require File.expand_path(File.dirname(__FILE__)) + '/lib/integration/rails_pre_filter'
|
12
12
|
|
13
13
|
def russan_gem_required?
|
14
14
|
require 'action_pack/version'
|
@@ -20,7 +20,7 @@ end
|
|
20
20
|
if russan_gem_required?
|
21
21
|
STDERR.puts "RuTils WARNING: On this version of Rails use the `russian` gem for date helper overrides instead"
|
22
22
|
else
|
23
|
-
require File.dirname(__FILE__) + '/lib/integration/rails_date_helper_override'
|
23
|
+
require File.expand_path(File.dirname(__FILE__)) + '/lib/integration/rails_date_helper_override'
|
24
24
|
::ActionController::Base.send(:helper, RuTils::DateHelper)
|
25
25
|
end
|
26
26
|
|
@@ -5,12 +5,6 @@ require "gilenson"
|
|
5
5
|
module RuTils
|
6
6
|
module GilensonStub
|
7
7
|
|
8
|
-
# Позволяет возвращать класс форматтера при вызове
|
9
|
-
# RuTils::Gilenson.new
|
10
|
-
def self.new(*args) #:nodoc:
|
11
|
-
Gilenson.new(*args)
|
12
|
-
end
|
13
|
-
|
14
8
|
# Включается на правах хелпера в Rails-приложение
|
15
9
|
module Helper
|
16
10
|
|
@@ -1 +1 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/rails_date_helper_override' if defined?(ActionView)
|
1
|
+
require File.expand_path(File.dirname(__FILE__)) + '/rails_date_helper_override' if defined?(ActionView)
|
@@ -25,7 +25,7 @@ module RuTils::DateHelper
|
|
25
25
|
# Целые числа интерпретируются как секунды.
|
26
26
|
# <tt>distance_of_time_in_words(50)</tt> возвращает "меньше минуты".
|
27
27
|
def distance_of_time_in_words(*args)
|
28
|
-
RuTils::overrides_enabled? ? RuTils::
|
28
|
+
RuTils::overrides_enabled? ? RuTils::RuDates.distance_of_time_in_words(*args) : super
|
29
29
|
end
|
30
30
|
|
31
31
|
# Заменяет ActionView::Helpers::DateHelper::select_month меню выбора русских месяцев.
|
@@ -52,12 +52,12 @@ module RuTils::DateHelper
|
|
52
52
|
if RuTils::overrides_enabled?
|
53
53
|
month_names = case true
|
54
54
|
when options[:use_short_month]
|
55
|
-
|
55
|
+
RuTils::RuDates::RU_ABBR_MONTHNAMES
|
56
56
|
# использование в контексте date_select с днями требует родительный падеж
|
57
57
|
when options[:order] && options[:order].include?(:day)
|
58
|
-
|
58
|
+
RuTils::RuDates::RU_INFLECTED_MONTHNAMES
|
59
59
|
else
|
60
|
-
|
60
|
+
RuTils::RuDates::RU_MONTHNAMES
|
61
61
|
end
|
62
62
|
else
|
63
63
|
if defined? I18n
|
data/lib/pluralizer.rb
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require "rubygems"
|
3
|
+
require "ru_propisju"
|
4
|
+
|
5
|
+
module RuTils
|
6
|
+
|
7
|
+
# ++DEPRECATED++ - Сумма прописью и выбор падежа
|
8
|
+
module Pluralization #:nodoc:
|
9
|
+
def self.choose_plural(amount, *variants)
|
10
|
+
RuPropisju.choose_plural(amount, *variants)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.rublej(amount)
|
14
|
+
RuPropisju.rublej(amount)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.griven(amount)
|
18
|
+
RuPropisju.griven(amount)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.kopeek(amount)
|
22
|
+
RuPropisju.kopeek(amount)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Реализует вывод прописью любого объекта, реализующего Float
|
26
|
+
module FloatFormatting
|
27
|
+
|
28
|
+
# Выдает сумму прописью с учетом дробной доли. Дробная доля округляется до миллионной, или (если
|
29
|
+
# дробная доля оканчивается на нули) до ближайшей доли ( 500 тысячных округляется до 5 десятых).
|
30
|
+
# Дополнительный аргумент - род существительного (1 - мужской, 2- женский, 3-средний)
|
31
|
+
def propisju(gender = 2)
|
32
|
+
RuPropisju.propisju(self, gender)
|
33
|
+
end
|
34
|
+
|
35
|
+
def propisju_items(gender=1, *forms)
|
36
|
+
RuPropisju.propisju_shtuk(self, gender, *forms)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
# Реализует вывод прописью любого объекта, реализующего Numeric
|
42
|
+
module NumericFormatting
|
43
|
+
# Выбирает корректный вариант числительного в зависимости от рода и числа и оформляет сумму прописью
|
44
|
+
# 234.propisju => "двести сорок три"
|
45
|
+
# 221.propisju(2) => "двести двадцать одна"
|
46
|
+
def propisju(gender = 1)
|
47
|
+
RuPropisju.propisju(self, gender)
|
48
|
+
end
|
49
|
+
|
50
|
+
def propisju_items(gender=1, *forms)
|
51
|
+
RuPropisju.propisju_shtuk(self, gender, *forms)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Выбирает корректный вариант числительного в зависимости от рода и числа. Например:
|
55
|
+
# * 4.items("колесо", "колеса", "колес") => "колеса"
|
56
|
+
def items(one_item, two_items, five_items)
|
57
|
+
RuPropisju.choose_plural(self, one_item, two_items, five_items)
|
58
|
+
end
|
59
|
+
|
60
|
+
# Выводит сумму в рублях прописью. Например:
|
61
|
+
# * (15.4).rublej => "пятнадцать рублей сорок копеек"
|
62
|
+
# * 1.rubl => "один рубль"
|
63
|
+
# * (3.14).rublja => "три рубля четырнадцать копеек"
|
64
|
+
def rublej
|
65
|
+
RuPropisju.rublej(self)
|
66
|
+
end
|
67
|
+
alias :rubl :rublej
|
68
|
+
alias :rublja :rublej
|
69
|
+
|
70
|
+
# Выводит сумму в гривнах прописью. Например:
|
71
|
+
# * (15.4).griven => "пятнадцать гривен сорок копеек"
|
72
|
+
# * 1.grivna => "одна гривна"
|
73
|
+
# * (3.14).grivny => "три гривны четырнадцать копеек"
|
74
|
+
def griven
|
75
|
+
RuPropisju.griven(self)
|
76
|
+
end
|
77
|
+
alias :grivna :griven
|
78
|
+
alias :grivny :griven
|
79
|
+
end
|
80
|
+
|
81
|
+
module FixnumFormatting
|
82
|
+
def kopeek
|
83
|
+
RuPropisju.kopeek(self)
|
84
|
+
end
|
85
|
+
alias :kopeika :kopeek
|
86
|
+
alias :kopeiki :kopeek
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class Object::Numeric
|
92
|
+
include RuTils::Pluralization::NumericFormatting
|
93
|
+
end
|
94
|
+
|
95
|
+
class Object::Fixnum
|
96
|
+
include RuTils::Pluralization::FixnumFormatting
|
97
|
+
end
|
98
|
+
|
99
|
+
class Object::Float
|
100
|
+
include RuTils::Pluralization::FloatFormatting
|
101
|
+
end
|