rutils 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,38 +1,63 @@
1
- Версия 0.2.3 - 27.09.2007
2
- * Кошмар - в новой версии rubygems изменилась семантика s.files из-за чего мы забыли все файлы в корневой директории
3
- - включая init.rb (julik)
1
+ === 0.2.4 - 10.07.2008
2
+
3
+ * Форматтер даты-времени должен гарантированно возвращать результат (Eugene Pimenov + julik)
4
+ * Передаваемый формат даты-времени не должен мутировать в пути (Eugene Pimenov)
5
+ * В Gilenson закрывающая латинская кавычка не принимается за знак дюйма
6
+ * В Gilenson корректно обрабатываются неразрывные пробелы если в сегменте присутствуют пунктуация из глифов
7
+ * В Gilenson добавлены настройки force_en_quotes и force_ru_quotes (если нужно свести все кавычки к одной форме)
8
+ * До свидания, Gilenson::Obsolete (julik)
9
+ * Небольшая чистка инфраструктуры билдов (julik)
10
+ * strftime("%d %B") теперь возвращает день в двузначном формате (например, 01 декабря) (Anonymous)
11
+ * добавлены алиасы #rubl и #rublja для Numeric#rublej. Теперь можно писать: 1.rubl, 3.rublja. (Yaroslav Markin)
12
+ * Переписаны Date хелперы для Rails. Теперь поддерживаются все опции Rails 1.2--2.0 и
13
+ Rails 2.1+ (Yaroslav Markin)
14
+ * Переписаны и дополнены тесты на перегрузку Date хелперов Rails (Yaroslav Markin)
15
+ * Для тестирования оверрайдов Rails используется gem multi_rail10s
16
+ * До свидания, <nobr>. Указывайте .nobr { text-wrap: nowrap } в своих стилевых таблицах.
17
+
18
+ === 0.2.3 - 27.09.2007
19
+
20
+ * Кошмар - в новой версии rubygems изменилась семантика s.files из-за чего мы забыли
21
+ все файлы в корневой директории - включая init.rb (julik)
22
+
23
+ === 0.2.2 - 24.09.2007
4
24
 
5
- Версия 0.2.2 - 24.09.2007
6
25
  * Gilenson - обрабатываем акронимы по принципу Textile (zajats, julik)
7
26
  * Gilenson - отформатирован под 2 пробела (julik)
8
27
  * В тестах пользуйтесь assert_equal_cp (julik)
9
28
  * Welcome to subversion (julik)
10
29
 
11
- Версия 0.2.1 - 02.04.2007
30
+ === 0.2.1 - 02.04.2007
31
+
12
32
  * Восстановлен в gemspec gilenson.rb (Сергей Барабаш)
13
33
 
14
- Версия 0.2.0 - 02.04.2007
34
+ === 0.2.0 - 02.04.2007
35
+
15
36
  * Фикс squeeze в dirify (Сергей Барабаш)
16
37
  * Формат даты по умолчанию - %F (Сергей Барабаш)
17
38
 
18
- Версия 0.1.9 - 17.02.2007
39
+ === 0.1.9 - 17.02.2007
40
+
19
41
  * Gilenson integration - не съедаем пробелы между тегами при прогоне текста через Textile
20
42
 
21
- Версия 0.1.8 - 05.02.2007
43
+ === 0.1.8 - 05.02.2007
44
+
22
45
  * Gilenson - расстановка инициалов не должна цеплять аббревиатуры (julik)
23
46
 
24
- Версия 0.1.7 - 05.02.2007
47
+ === 0.1.7 - 05.02.2007
25
48
  * Date helpers приведены в более веселый вид (и в соответствие с Rails 1.2.1) (julik)
26
49
  * date_helper надо поменять чтобы передавать рельсовому хелперу весь массив options в хеше (julik)
27
50
 
28
- Версия 0.1.6 - 18.08.2006
51
+ === 0.1.6 - 18.08.2006
52
+
29
53
  * Удалили jcode, он нам не сильно нужен (julik)
30
54
  * В простом транслите Шипилов - Schipilov вместо SCHipilov (julik)
31
55
  * Тесты интеграции валятся явно и громко если зависимые модули на машине отсутствуют (julik)
32
56
  * Масса крошечных твиков чтобы сделать все немножко аккуратнее (julik)
33
- * Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B == 31 декабря) в strftime (mash)
57
+ * Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B === 31 декабря) в strftime (mash)
58
+
59
+ === 0.1.5 - 08.05.2006
34
60
 
35
- Версия 0.1.5 - 08.05.2006
36
61
  * Транслитераторы вынесены в отдельные файлы (julik)
37
62
  * Починен баг с передачей часа в нужном падеже в distance_of_time (anonyomous)
38
63
  * Добавлены корректные методы публикации доков, сменены параметры их генерации (julik)
@@ -41,7 +66,8 @@
41
66
  * Поддерживаем оба класса Locale (из ruby-locale и gettext - они немного отличаются по семантике) (julik)
42
67
 
43
68
 
44
- Версия 0.1.4 - 02.12.2005
69
+ === 0.1.4 - 02.12.2005
70
+
45
71
  * Поправлен импорт Rails-плагина (julik)
46
72
  * Поправлен паттерн сбора тестируемых файлов (julik)
47
73
  * Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
@@ -51,7 +77,8 @@
51
77
  * Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
52
78
  * DateTime - RU_INFLECTED_MONTHNAMES => Авгуса --> Августа (mash)
53
79
 
54
- Версия 0.1.3 - 14.11.2005
80
+ === 0.1.3 - 14.11.2005
81
+
55
82
  * Gilenson - замена троеточий на ellipsis (julik)
56
83
  * Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
57
84
  меняется на glyph[:nbsp]. (mash)
@@ -95,14 +122,18 @@
95
122
  * Добавлена функциия Numeric#rublej (julik)
96
123
  * Добавлена русская версия Time#ru_strftime и Date#ru_strftime (mash)
97
124
 
98
- Версия 0.1.2 - 01.11.2005
125
+ === 0.1.2 - 01.11.2005
126
+
99
127
  * Добавлен BiDi-транслит c тестами (mash)
100
128
 
101
- Версия 0.04 - 20.10.2005
129
+ === 0.04 - 20.10.2005
130
+
102
131
  * Чистка документации
103
132
 
104
- Версия 0.03 - 18.10.2005
133
+ === 0.03 - 18.10.2005
134
+
105
135
  * Легкий рефакторинг и чистка документации, добавлена реализация BiDi-транслита
106
136
 
107
- Версия 0.02 - 12.07.2005
137
+ === 0.02 - 12.07.2005
138
+
108
139
  * Заменен маркер подстановки тегов в Gilenson. Ранее без oniguruma из-за его применения "проглатывалась" буква "р"
data/Manifest.txt ADDED
@@ -0,0 +1,27 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile.rb
5
+ TODO.txt
6
+ bin/gilensize
7
+ bin/rutilize
8
+ init.rb
9
+ lib/countries/countries.rb
10
+ lib/datetime/datetime.rb
11
+ lib/gilenson/gilenson.rb
12
+ lib/integration/blue_cloth_override.rb
13
+ lib/integration/integration.rb
14
+ lib/integration/rails_date_helper_override.rb
15
+ lib/integration/red_cloth_override.rb
16
+ lib/pluralizer/pluralizer.rb
17
+ lib/rutils.rb
18
+ lib/transliteration/bidi.rb
19
+ lib/transliteration/simple.rb
20
+ lib/transliteration/transliteration.rb
21
+ test/run_tests.rb
22
+ test/t_datetime.rb
23
+ test/t_gilenson.rb
24
+ test/t_integration.rb
25
+ test/t_pluralize.rb
26
+ test/t_rutils_base.rb
27
+ test/t_transliteration.rb
data/README.txt ADDED
@@ -0,0 +1,214 @@
1
+ = RuTils
2
+
3
+ RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils -
4
+ сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
5
+ и приятной (в идеале - столь же простой как и разработку оных на английском).
6
+
7
+ == Чье это
8
+
9
+ Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за
10
+ реализацию большинства алгоритмов на PHP.
11
+
12
+ Разработчики RuTils - Julik[http://julik.nl], Mash[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
13
+
14
+ = Как воспользоваться
15
+
16
+ Просто включите rutils в свою программу как библиотеку
17
+
18
+ require 'rutils'
19
+
20
+ Для использования с Ruby on Rails установите RuTils как плагин
21
+ (скопируйте библиотеку в vendor/plugins приложения).
22
+
23
+ = Что оно делает
24
+
25
+ == Cумма прописью и выбор числительного
26
+
27
+ RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным
28
+ учетом рода. Например:
29
+
30
+ 4.propisju => "четыре"
31
+ 345.propisju => "триста сорок пять"
32
+ 231.propisju(2) => "двести тридцать одна"
33
+ 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
34
+ (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
35
+ четыре десятых сволочи"
36
+
37
+ Также реализуется выбор варианта числительного в зависимости от числа
38
+
39
+ 15.items("кодер", "кодера", "кодеров") => "кодеров"
40
+
41
+ и вывод "суммы прописью" для денежных сумм в рублях
42
+
43
+ (413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
44
+ 1.rubl => "один рубль"
45
+ 22.rublja => "двадцать два рубля"
46
+
47
+ == Транслит
48
+
49
+ RuTils на данный момент реализует простейший транслит "в одну сторону" и
50
+ "взаимно-однозначный транслит" (BiDi-транслит).
51
+
52
+ Простейший транслит "в одну сторону".
53
+
54
+ "Вот такое вот дело".translify => "Vot takoye vot delo"
55
+ "Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
56
+
57
+ == BiDi-транслит
58
+
59
+ Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
60
+ Реализует транслитерацию "в обе стороны", предоставляя возможность получить
61
+ валидный URL из строки, содержащей русские и английские буквы. С некоторыми
62
+ потерями (запятых и прочих "слабозначащих" символов) возможно восстановление
63
+ исходной строки.
64
+
65
+ Два режима работы:
66
+
67
+ 1. Уничтожение всех слешей, которые встретятся во входной строке. В этом случае методы вызываются с передачей в них false. Например, <tt>"Web/Скрипты".bidi_translify(false)</tt>
68
+ 2. Пропуск слэшей (используется по умолчанию). Например,
69
+
70
+ "WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
71
+ "+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
72
+ "WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
73
+ "+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
74
+
75
+ == Обработка русской типографики в HTML
76
+
77
+ Gilenson - порт Typografica[http://pixel-apes.com/typografica] от Pixel Apes.
78
+ Тыпографица - механизм автоматической расстановки подстановок в тексте перед его
79
+ выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому
80
+ подобные "украшательства".
81
+
82
+ Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы,
83
+ английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и
84
+ отформатирует знаки типа (c), (tm), телефоны и адреса.
85
+
86
+ %q{"И это называется языком?", -- таков был его вопрос}.gilensize => "&#171;И
87
+ это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос"
88
+
89
+ Более подробная документация по Gilenson доступна в документах к
90
+ RuTils::Gilenson::Formatter
91
+
92
+ В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать
93
+ Unicode-тексты в среде UNIX пользуясь стандартным выводом
94
+
95
+ $ cat myfile.txt | gilensize > myfile.html
96
+
97
+ == Даты
98
+
99
+ В класс Date введены следующие константы:
100
+
101
+ * RU_MONTHNAMES (Январь Февраль Март...)
102
+ * RU_DAYNAMES (Воскресенье Понедельник...)
103
+ * RU_ABBR_MONTHNAMES (Янв Фев Мар...)
104
+ * RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
105
+ * RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
106
+ * RU_DAYNAMES_E (первое второе третье...)
107
+
108
+ Пример использования:
109
+
110
+ require 'date' date = Date.new(2005, 11, 9)
111
+ puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя puts
112
+ puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
113
+ puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
114
+ puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
115
+
116
+ При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется
117
+ "покрытие" стандартной функции Time#strftime ("родную" #strftime можно продолжать
118
+ использовать через alias-метод #strftime_norutils):
119
+
120
+ Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
121
+ Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
122
+
123
+ == Интеграция с Rails, RedCloth и BlueCloth
124
+
125
+ RuTils в первую очередь задумывался как максимально "прозрачный" механизм
126
+ обработки русского текста в контексте Rails-приложения. В связи с этим RuTils
127
+ "вторгается" в работу других Ruby-модулей и изменяет механизм их работы.
128
+
129
+ Если вы используете RuTils в одном приложении с RedCloth или BlueCloth, RuTils
130
+ автоматически будет обрабатывать типографику во всех текстах, пропускаемых через
131
+ них. Имейте в виду, что для корректной работы этой функции RuTils надо загружать
132
+ *после* модулей RedCloth и BlueCloth.
133
+
134
+ Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
135
+
136
+ * Меню выбора даты (+date_select+ и +datetime_select+) и связанные с этим хелперы
137
+ будут выводиться с русскими именами месяцев, и учитывая локализованный порядок дат
138
+ (сначала число, потом месяц, потом год)
139
+ * +distance_of_time_in_words+ будет выводить
140
+ русские описания длительности ("более 2 часов")
141
+
142
+ Перегрузку всех функций других модулей можно включать и отключать в любое время с
143
+ помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
144
+ библиотеки будут работать в стандартном режиме (например, RedCloth будет
145
+ расставлять английские типографские кавычки). Это нужно когда вам нужно
146
+ переключиться на английский (или любой другой язык) без перезапуска приложения.
147
+
148
+ Рекомендуемый способ использования RuTils с Ruby on Rails приложением -- установка RuTils
149
+ плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего
150
+ приложения или воспользуйтесь командой rutilize путь_к_rails_приложению чтобы сделать это
151
+ автоматически. После этого вы сможете использовать RuTils без необходимости
152
+ установки gem на вашем сервере (не забудьте перезапустить приложение чтобы
153
+ вгрузить в него RuTils).
154
+
155
+ $ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
156
+
157
+ Вы можете свободно распространять RuTils со своим Rails-приложением при условии
158
+ сохранения структуры и файла README.
159
+
160
+ == Требования
161
+
162
+ * Ruby 1.8.2 или выше, немного прямых рук.
163
+ * Rake[http://rake.rubyforge.org],
164
+
165
+ Rails[http://rubyonrails.org],
166
+ RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
167
+ BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов.
168
+
169
+ == Работает ли это с текстом в кодировке отличной от UTF-8 (Windows-1251, KOI-8)
170
+
171
+ Нет и никогда не будет.
172
+
173
+ == Как получить помощь
174
+
175
+ Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode
176
+ 'u'). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
177
+
178
+ * Переменная $KCODE включена в режим 'u'
179
+ * Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
180
+
181
+ Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой
182
+ RubyKanjiCode в своем httpd.conf.
183
+
184
+ == Если вы все сделали правильно но что-то не работает
185
+
186
+ Сообщите об ошибке на странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
187
+ Не забудьте указать версию, ее всегда можно узнать в константе
188
+
189
+ RuTils::VERSION
190
+
191
+ == Как ускорить реализацию новых функций
192
+
193
+ Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите
194
+ тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы
195
+ можете скопировать из собственных тестов RuTils.
196
+
197
+ Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы,
198
+ пожалуйста следуйте следующим правилам оформления кода:
199
+
200
+ * Unix line breaks (LF)
201
+ * Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
202
+ * Отступы в 2 пробела, без табуляций.
203
+ * Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
204
+ * Все другие конвенции нормального написания
205
+ Ruby-кода (http://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
206
+
207
+ При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
208
+ - он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
209
+ разницу между двумя разными пробелами, например)
210
+
211
+ Если вы хотите участвовать в разработке RuTils пользуйтесь версией из subversion
212
+ trunk.
213
+
214
+ http://rutils.rubyforge.org/svn/trunk
data/Rakefile.rb CHANGED
@@ -1,128 +1,56 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'rake/testtask'
4
- require 'rake/rdoctask'
5
- require 'rake/packagetask'
6
- require 'rake/gempackagetask'
7
- require 'rake/contrib/rubyforgepublisher'
8
- require 'fileutils'
1
+ $KCODE = 'u'
2
+
9
3
  require 'lib/rutils'
4
+ require 'rubygems'
10
5
 
11
6
  begin
12
- require 'xforge'
7
+ require 'hoe'
8
+
9
+ # Disable spurious warnings when running tests, ActiveMagic cannot stand -w
10
+ Hoe::RUBY_FLAGS.replace ENV['RUBY_FLAGS'] || "-I#{%w(lib test).join(File::PATH_SEPARATOR)}" +
11
+ (Hoe::RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
12
+
13
+ # Hoe minus dependency pollution plus unidocs plus rdoc fix. Kommunizm, perestroika.
14
+ class KolkHoe < Hoe
15
+ DOCOPTS = %w(--webcvs=http://rutils.rubyforge.org/svn/trunk/%s --charset=utf-8 --promiscuous)
16
+ Rake::RDocTask.class_eval do
17
+ alias_method :_odefine, :define
18
+ def define; @options.unshift(*DOCOPTS); _odefine; end
19
+ end
20
+
21
+ def define_tasks
22
+ extra_deps.reject! {|e| e[0] == 'hoe' }
23
+ super
24
+ end
25
+ end
26
+
27
+ KolkHoe.new('rutils', RuTils::VERSION) do |p|
28
+ p.name = "rutils"
29
+ p.author = ["Julian 'Julik' Tarkhanov", "Danil Ivanov", "Yaroslav Markin"]
30
+ p.email = ['me@julik.nl', 'yaroslav@markin.net']
31
+ p.description = 'Simple processing of russian strings'
32
+ p.summary = 'Simple processing of russian strings'
33
+ p.url = "http://rutils.rubyforge.org"
34
+ p.test_globs = 'test/t_*.rb'
35
+ p.need_zip = true
36
+ p.remote_rdoc_dir = ''
37
+ end
38
+
13
39
  rescue LoadError
14
- end
15
-
16
- PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
17
- PKG_NAME = 'rutils'
18
- PKG_VERSION = RuTils::VERSION
19
- PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
20
- PKG_DESTINATION = "../#{PKG_NAME}"
21
- PKG_SUMMARY = %q{ Simple processing of russian strings }
22
- PKG_DESCRIPTION = %q{ Allows simple processing of russian strings - transliteration, numerals as text and HTML beautification }
23
- PKG_HOMEPAGE = 'http://rubyforge.org/projects/rutils'
24
- PKG_EMAIL = 'me@julik.nl'
25
- PKG_MAINTAINER = 'Julian "Julik" Tarkhanov'
26
-
27
- RELEASE_NAME = "rutils-#{PKG_VERSION}"
28
-
29
- RUBY_FORGE_PROJECT = "rutils"
30
- RUBY_FORGE_USER = ENV['RUBY_FORGE_USER'] ? ENV['RUBY_FORGE_USER'] : "julik"
31
-
32
- # нам нужна документация в Юникоде. А вы думали?
33
- PKG_RDOC_OPTS = ['--main=README',
34
- '--line-numbers',
35
- '--webcvs=http://rubyforge.org/cgi-bin/viewcvs.cgi/rutils/%s?cvsroot=rutils',
36
- '--charset=utf-8',
37
- '--promiscuous']
38
-
39
- task :default => [ :test ]
40
-
41
- desc "Run all tests (requires BlueCloth, RedCloth and Rails for integration tests)"
42
- Rake::TestTask.new("test") { |t|
43
- t.libs << "test"
44
- t.pattern = 'test/t_*.rb'
45
- t.verbose = true
46
- }
47
-
48
- desc "Report KLOCs"
49
- task :stats do
50
- require 'code_statistics'
51
- CodeStatistics.new(
52
- ["Libraries", "lib"],
53
- ["Units", "test"]
54
- ).to_s
55
- end
56
-
57
- desc "Generate RDoc documentation"
58
- Rake::RDocTask.new("doc") do |rdoc|
59
- rdoc.rdoc_dir = 'doc'
60
- rdoc.title = PKG_SUMMARY
61
- rdoc.rdoc_files.include('README')
62
- rdoc.rdoc_files.include('CHANGELOG')
63
- rdoc.rdoc_files.include('TODO')
64
- rdoc.options = PKG_RDOC_OPTS
65
- rdoc.rdoc_files.include FileList['lib/*.rb', 'lib/**/*.rb']
66
- end
67
-
68
- spec = Gem::Specification.new do |s|
69
- s.platform = Gem::Platform::RUBY
70
- s.name = PKG_NAME
71
- s.summary = PKG_SUMMARY
72
- s.description = PKG_DESCRIPTION
73
- s.version = PKG_VERSION
74
-
75
- s.author = PKG_MAINTAINER
76
- s.email = PKG_EMAIL
77
- s.rubyforge_project = RUBY_FORGE_PROJECT
78
- s.homepage = PKG_HOMEPAGE
79
-
80
- s.has_rdoc = true
81
- s.files = FileList["{bin,test,lib}/**/*"].exclude("rdoc").exclude(".svn").exclude(".CVS").exclude(".DS_Store").to_a +
82
- %w(CHANGELOG init.rb Rakefile.rb README TODO)
83
- s.require_path = "lib"
84
- s.autorequire = "rutils"
85
- s.test_file = "test/run_tests.rb"
86
- s.has_rdoc = true
87
- s.extra_rdoc_files = ["README", "TODO", "CHANGELOG"]
88
- s.rdoc_options = PKG_RDOC_OPTS
89
- s.executables << 'gilensize'
90
- s.executables << 'rutilize'
91
- end
92
-
93
- Rake::GemPackageTask.new(spec) do |p|
94
- p.gem_spec = spec
95
- p.need_tar = true
96
- p.need_zip = true
97
- end
98
-
99
-
100
- desc "Remove packaging products (doc and pkg) - they are not source-managed"
101
- task :clobber do
102
- `rm -rf ./doc`
103
- `rm -rf ./pkg`
104
- end
105
-
106
- desc "Publish the new docs"
107
- task :publish_docs => [:clobber, :doc] do
108
- push_docs
109
- end
110
-
111
- desc "Push docs to servers"
112
- task :push_docs do
113
- user = "#{ENV['USER']}@rubyforge.org"
114
- project = '/var/www/gforge-projects/rutils'
115
- local_dir = 'doc'
116
- [
117
- Rake::SshDirPublisher.new( user, project, local_dir),
118
- Rake::SshDirPublisher.new('julik', '~/www/code/rutils', local_dir),
40
+ $stderr.puts "Meta-operations on this package require Hoe and multi_rails"
41
+ task :default => [ :test ]
119
42
 
120
- ].each { |p| p.upload }
43
+ require 'rake/testtask'
44
+ desc "Run all tests (requires BlueCloth, RedCloth and Rails for integration tests)"
45
+ Rake::TestTask.new("test") do |t|
46
+ t.libs << "test"
47
+ t.pattern = 'test/t_*.rb'
48
+ t.verbose = true
49
+ end
121
50
  end
122
51
 
123
-
124
- desc "Publish the release files to RubyForge."
125
- task :release => [:clobber, :package] do
126
- cvs_aware_revision = 'r_' + PKG_VERSION.gsub(/-|\./, '_')
127
- `cvs tag #{cvs_aware_revision} .`
52
+ begin
53
+ require 'load_multi_rails_rake_tasks'
54
+ rescue LoadError
55
+ $stderr.puts "Proper testing of this package with Rails requires multi_rails"
128
56
  end
data/{TODO → TODO.txt} RENAMED
@@ -1,11 +1,8 @@
1
1
  =TODO
2
2
 
3
- ==Даты
4
-
5
- ==Gilenson
6
-
7
3
  ==Pluralization
8
4
 
9
5
  * Истинная плюрализация без передачи рода и вариантов (как в Rails)
10
6
 
11
7
  ==Rails
8
+
data/bin/gilensize CHANGED
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
- $KCODE = 'u'
3
- require File.dirname(__FILE__) + '/../lib/rutils'
4
-
5
2
  # == Synopsis
6
3
  #
7
- # Processes text on standard input with Typografica
4
+ # Processes text on standard input with Gilenson. Please feed it UTF-8!
8
5
  #
9
6
  # == Usage
10
7
  #
@@ -13,6 +10,13 @@ require File.dirname(__FILE__) + '/../lib/rutils'
13
10
  # == Author
14
11
  # Julik <me@julik.nl>
15
12
 
13
+ $KCODE = 'u'
14
+ require File.dirname(__FILE__) + '/../lib/rutils'
15
+ require 'optparse'
16
+ OptionParser.new do | p |
17
+ p.on(" -h", "--help") { require 'rdoc/usage'; RDoc::usage }
18
+ end.parse!
19
+
16
20
  while st = gets do
17
21
  puts RuTils::Gilenson.new(st).to_html
18
22
  end
data/bin/rutilize CHANGED
File without changes
@@ -32,16 +32,17 @@ module RuTils
32
32
  end
33
33
  end
34
34
 
35
- @@ignored = "\xFF\xFF\xFF\xFF" # %% == Literal "%" character
36
-
37
- def self.ru_strftime(date='%d.%m.%Y', time='')
38
- date.gsub!(/%%/, @@ignored)
39
- date.gsub!(/%a/, Date::RU_ABBR_DAYNAMES[time.wday])
40
- date.gsub!(/%A/, Date::RU_DAYNAMES[time.wday])
41
- date.gsub!(/%b/, Date::RU_ABBR_MONTHNAMES[time.mon])
42
- date.gsub!(/%d(\s)*%B/, time.day.to_s + '\1' + Date::RU_INFLECTED_MONTHNAMES[time.mon])
43
- date.gsub!(/%B/, Date::RU_MONTHNAMES[time.mon])
44
- date.gsub!(@@ignored, '%%')
35
+ def self.ru_strftime(time, format_str='%d.%m.%Y')
36
+ clean_fmt = format_str.gsub(/%{2}/, RuTils::SUBSTITUTION_MARKER).
37
+ gsub(/%a/, Date::RU_ABBR_DAYNAMES[time.wday]).
38
+ gsub(/%A/, Date::RU_DAYNAMES[time.wday]).
39
+ gsub(/%b/, Date::RU_ABBR_MONTHNAMES[time.mon]).
40
+ gsub(/%d(\s)*%B/, '%02d' % time.day + '\1' + Date::RU_INFLECTED_MONTHNAMES[time.mon]).
41
+ gsub(/%B/, Date::RU_MONTHNAMES[time.mon]).
42
+ gsub(/#{RuTils::SUBSTITUTION_MARKER}/, '%%')
43
+
44
+ # Теперь когда все нужные нам маркеры заменены можно отдать это стандартному strftime
45
+ time.respond_to?(:strftime_norutils) ? time.strftime_norutils(clean_fmt) : time.to_time.strftime_norutils(clean_fmt)
45
46
  end
46
47
  end
47
48
  end
@@ -60,8 +61,7 @@ class Time
60
61
  alias_method :strftime_norutils, :strftime
61
62
 
62
63
  def strftime(fmt)
63
- RuTils::DateTime::ru_strftime(fmt, self) if RuTils::overrides_enabled?
64
- strftime_norutils(fmt)
64
+ RuTils::overrides_enabled? ? RuTils::DateTime::ru_strftime(self, fmt) : strftime_norutils(fmt)
65
65
  end
66
66
  end
67
67
 
@@ -71,14 +71,12 @@ class Date
71
71
  if self.instance_methods.include?('strftime')
72
72
  alias_method :strftime_norutils, :strftime
73
73
  def strftime(fmt='%F')
74
- RuTils::DateTime::ru_strftime(fmt, self) if RuTils::overrides_enabled?
75
- strftime_norutils(fmt)
74
+ RuTils::overrides_enabled? ? RuTils::DateTime::ru_strftime(self, fmt) : strftime_norutils(fmt)
76
75
  end
77
-
76
+
78
77
  else
79
78
  def strftime(fmt='%F')
80
- RuTils::DateTime::ru_strftime(fmt, self) if RuTils::overrides_enabled?
81
- self.to_time.strftime(fmt)
79
+ RuTils::overrides_enabled? ? RuTils::DateTime::ru_strftime(self, fmt) : to_time.strftime(fmt)
82
80
  end
83
81
  end
84
82