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.
File without changes
@@ -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
@@ -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/countries/countries.rb
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/pluralizer.rb
12
+ lib/pluralizer.rb
13
+ lib/rudates.rb
16
14
  lib/rutils.rb
17
- lib/transliteration/bidi.rb
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.rubyforge.org
3
+ http://github.com/julik/rutils
4
4
 
5
- RuTils - простой обработчик русского текста на Ruby.
6
- Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
7
- и приятной идеале - столь же простой как и разработку оных на английском).
5
+ RuTils был целым ящиком инструментов для простой обработки русского текста на Ruby
6
+ и руссификации Ryby-приложений. После тяжелого четырехлетного труда ящик списан на пенсию
7
+ в дедушкин сарай. Для справки - "дедушкин сарай" это то место где крутятся написанные с помощью
8
+ RuTils приложения и где клиенты очень не хотят чтобы при апдейтах RuTils приложение ломалось.
8
9
 
9
- == Чье это
10
-
11
- Разработчики RuTils - {Julik}[http://julik.nl], {Mash}[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
10
+ rutils в настоящий момент - минимальная прослойка между маленькими составными библиотеками которые
11
+ можно (и нужно!) использовать отдельно. Сам модуль rutils обновляться больше не будет, функционал
12
+ заморожен, авторы ушли и выключили свет.
12
13
 
13
14
  = Как воспользоваться
14
15
 
15
- Просто включите rutils в свою программу как библиотеку
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
- При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется
90
- "покрытие" стандартной функции Time#strftime ("родную" #strftime можно продолжать
91
- использовать через alias-метод #strftime_norutils):
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
- Используйте гем russian для дат и RuTils как дополнение (для транслита, функций kopeek и так далее)
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.x
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
- Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode
161
- 'u'). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
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
 
@@ -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 = 'Simple processing of russian strings'
28
- p.summary = 'Simple processing of russian strings'
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::DateTime::distance_of_time_in_words(*args) : super
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
- Date::RU_ABBR_MONTHNAMES
55
+ RuTils::RuDates::RU_ABBR_MONTHNAMES
56
56
  # использование в контексте date_select с днями требует родительный падеж
57
57
  when options[:order] && options[:order].include?(:day)
58
- Date::RU_INFLECTED_MONTHNAMES
58
+ RuTils::RuDates::RU_INFLECTED_MONTHNAMES
59
59
  else
60
- Date::RU_MONTHNAMES
60
+ RuTils::RuDates::RU_MONTHNAMES
61
61
  end
62
62
  else
63
63
  if defined? I18n
@@ -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