rutils 0.2.3 → 0.2.4

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.
@@ -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