rutils 1.1.4 → 2.0.0

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