julik-rutils 1.0.2

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.
Files changed (43) hide show
  1. data/History.txt +162 -0
  2. data/Manifest.txt +42 -0
  3. data/README.txt +234 -0
  4. data/Rakefile.rb +41 -0
  5. data/TODO.txt +6 -0
  6. data/WHAT_HAS_CHANGED.txt +44 -0
  7. data/bin/gilensize +22 -0
  8. data/bin/rutilize +38 -0
  9. data/init.rb +27 -0
  10. data/lib/countries/countries.rb +1773 -0
  11. data/lib/datetime/datetime.rb +83 -0
  12. data/lib/gilenson/bluecloth_extra.rb +7 -0
  13. data/lib/gilenson/gilenson.rb +665 -0
  14. data/lib/gilenson/helper.rb +34 -0
  15. data/lib/gilenson/maruku_extra.rb +19 -0
  16. data/lib/gilenson/rdiscount_extra.rb +7 -0
  17. data/lib/gilenson/redcloth_extra.rb +42 -0
  18. data/lib/integration/integration.rb +1 -0
  19. data/lib/integration/rails_date_helper_override.rb +127 -0
  20. data/lib/integration/rails_pre_filter.rb +4 -0
  21. data/lib/pluralizer/pluralizer.rb +261 -0
  22. data/lib/rutils.rb +54 -0
  23. data/lib/transliteration/bidi.rb +21 -0
  24. data/lib/transliteration/simple.rb +75 -0
  25. data/lib/transliteration/transliteration.rb +53 -0
  26. data/lib/version.rb +5 -0
  27. data/test/extras/integration_bluecloth.rb +13 -0
  28. data/test/extras/integration_maruku.rb +15 -0
  29. data/test/extras/integration_rails_filter.rb +29 -0
  30. data/test/extras/integration_rails_gilenson_helpers.rb +80 -0
  31. data/test/extras/integration_rails_helpers.rb +85 -0
  32. data/test/extras/integration_rdiscount.rb +15 -0
  33. data/test/extras/integration_redcloth3.rb +18 -0
  34. data/test/extras/integration_redcloth4.rb +19 -0
  35. data/test/run_tests.rb +4 -0
  36. data/test/test_datetime.rb +145 -0
  37. data/test/test_gilenson.rb +396 -0
  38. data/test/test_integration.rb +22 -0
  39. data/test/test_integration_flag.rb +18 -0
  40. data/test/test_pluralize.rb +84 -0
  41. data/test/test_rutils_base.rb +11 -0
  42. data/test/test_transliteration.rb +53 -0
  43. metadata +121 -0
@@ -0,0 +1,162 @@
1
+ === 1.0.2 - 09.02.2009
2
+
3
+ * В 1879 раз поправлена генерация rdoc из gems
4
+
5
+ === 1.0.1 - 08.02.2009
6
+
7
+ * Оверрайды очищены и уничтожены, перегрузка форматтеров выполняется через наследование и рельсовый хелпер (julik)
8
+ * Протестировано на JRuby 1.1.6 (julik)
9
+ * Основные шестеренки совместимы с Ruby 1.9.1 (julik)
10
+ * BiDi транслит покидает нас. URL давно поддерживают Unicode, если нет - сохраняйте транслитерированный slug отдельно.
11
+ Если кому-то это не нравится - см. Wikipedia (julik)
12
+
13
+ === 0.2.5 - 08.08.2008
14
+
15
+ * Поддержка Rails Edge (pre-2.2) для хелперов DateTime. RuTils при overrides_enabled пытается поставить себя выше I18n -- при overrides_enabled I18n не вызывается для datetime хелперов. (Yaroslav Markin)
16
+ * Частичная поддержка RedCloth 4 (julik)
17
+ * Фильтр для контроллера чтобы установить верный флаг для экшена, то что происходит в экшене - thread local (julik)
18
+ * Разделяем тесты и хаки (julik)
19
+ * Добавлена поддержка strftime макроса %e (номер дня в месяце без лидирующего нуля) -- по аналогии с %d, при использовании %e мы склоняем имя месяца (Yaroslav Markin)
20
+ * Использование с RedCloth 4 больше не вызывает ошибки (совместимости для перегрузки все еще нет) (Yaroslav Markin)
21
+ * Добавлен метод Fixnum#kopeek для вывода целочисленных Денег (julik)
22
+ * RuTils::overrides безопасен для нитей (julik)
23
+
24
+ === 0.2.4 - 10.07.2008
25
+
26
+ * Форматтер даты-времени должен гарантированно возвращать результат (Eugene Pimenov + julik)
27
+ * Передаваемый формат даты-времени не должен мутировать в пути (Eugene Pimenov)
28
+ * В Gilenson закрывающая латинская кавычка не принимается за знак дюйма
29
+ * В Gilenson корректно обрабатываются неразрывные пробелы если в сегменте присутствуют пунктуация из глифов
30
+ * В Gilenson добавлены настройки force_en_quotes и force_ru_quotes (если нужно свести все кавычки к одной форме)
31
+ * До свидания, Gilenson::Obsolete (julik)
32
+ * Небольшая чистка инфраструктуры билдов (julik)
33
+ * strftime("%d %B") теперь возвращает день в двузначном формате (например, 01 декабря) (Anonymous)
34
+ * добавлены алиасы #rubl и #rublja для Numeric#rublej. Теперь можно писать: 1.rubl, 3.rublja. (Yaroslav Markin)
35
+ * Переписаны Date хелперы для Rails. Теперь поддерживаются все опции Rails 1.2--2.0 и
36
+ Rails 2.1+ (Yaroslav Markin)
37
+ * Переписаны и дополнены тесты на перегрузку Date хелперов Rails (Yaroslav Markin)
38
+ * Для тестирования оверрайдов Rails используется gem multi_rails
39
+ * До свидания, <nobr>. Указывайте .nobr { text-wrap: nowrap } в своих стилевых таблицах.
40
+
41
+ === 0.2.3 - 27.09.2007
42
+
43
+ * Кошмар - в новой версии rubygems изменилась семантика s.files из-за чего мы забыли
44
+ все файлы в корневой директории - включая init.rb (julik)
45
+
46
+ === 0.2.2 - 24.09.2007
47
+
48
+ * Gilenson - обрабатываем акронимы по принципу Textile (zajats, julik)
49
+ * Gilenson - отформатирован под 2 пробела (julik)
50
+ * В тестах пользуйтесь assert_equal_cp (julik)
51
+ * Welcome to subversion (julik)
52
+
53
+ === 0.2.1 - 02.04.2007
54
+
55
+ * Восстановлен в gemspec gilenson.rb (Сергей Барабаш)
56
+
57
+ === 0.2.0 - 02.04.2007
58
+
59
+ * Фикс squeeze в dirify (Сергей Барабаш)
60
+ * Формат даты по умолчанию - %F (Сергей Барабаш)
61
+
62
+ === 0.1.9 - 17.02.2007
63
+
64
+ * Gilenson integration - не съедаем пробелы между тегами при прогоне текста через Textile
65
+
66
+ === 0.1.8 - 05.02.2007
67
+
68
+ * Gilenson - расстановка инициалов не должна цеплять аббревиатуры (julik)
69
+
70
+ === 0.1.7 - 05.02.2007
71
+ * Date helpers приведены в более веселый вид (и в соответствие с Rails 1.2.1) (julik)
72
+ * date_helper надо поменять чтобы передавать рельсовому хелперу весь массив options в хеше (julik)
73
+
74
+ === 0.1.6 - 18.08.2006
75
+
76
+ * Удалили jcode, он нам не сильно нужен (julik)
77
+ * В простом транслите Шипилов - Schipilov вместо SCHipilov (julik)
78
+ * Тесты интеграции валятся явно и громко если зависимые модули на машине отсутствуют (julik)
79
+ * Масса крошечных твиков чтобы сделать все немножко аккуратнее (julik)
80
+ * Родительный падеж (RU_INFLECTED_MONTHNAMES) для месяцев после числа (%d %B === 31 декабря) в strftime (mash)
81
+
82
+ === 0.1.5 - 08.05.2006
83
+
84
+ * Транслитераторы вынесены в отдельные файлы (julik)
85
+ * Починен баг с передачей часа в нужном падеже в distance_of_time (anonyomous)
86
+ * Добавлены корректные методы публикации доков, сменены параметры их генерации (julik)
87
+ * cp -r заменен на cp_r чтобы rutilize работал в Windows (anonymous)
88
+ * Имена месяцев со строчной буквы (sgt - http://rubyforge.org/users/sgt)
89
+ * Поддерживаем оба класса Locale (из ruby-locale и gettext - они немного отличаются по семантике) (julik)
90
+
91
+
92
+ === 0.1.4 - 02.12.2005
93
+
94
+ * Поправлен импорт Rails-плагина (julik)
95
+ * Поправлен паттерн сбора тестируемых файлов (julik)
96
+ * Gilenson - на Oniguruma сбоит skip_code, но это надо побарывать нормальным токенизатором, пока откладывается (julik)
97
+ * Gilenson - в тестах произведена замена <cOdE> на <code> и <TT> на <tt> (mash)
98
+ * Gilenson - в двух регулярных выражениях (в "def process_quotes") изменен #{@mark_tag} на
99
+ \#{@mark_tag} чтобы предотвратить segfault ruby 1.8.2 (2004-12-25) на [i386-mswin32] (mash)
100
+ * Gilenson - починен дикий баг с маркером в одинарных кавычках - теперь таки последовательность байтов вместо символов (julik)
101
+ * DateTime - RU_INFLECTED_MONTHNAMES => Авгуса --> Августа (mash)
102
+
103
+ === 0.1.3 - 14.11.2005
104
+
105
+ * Gilenson - замена троеточий на ellipsis (julik)
106
+ * Gilenson - теперь пробел, идущий перед одной или двумя буквами на конце слова
107
+ меняется на glyph[:nbsp]. (mash)
108
+ * Gilenson - починен баг из-за которого не типографилась закрывающая кавычка после вопросительного
109
+ и восклицательного знака (julik)
110
+ * По умолчанию используется новый Gilenson (Gilenson::Formatter). Старый доступен как Gilenson::Obsolete и через
111
+ String#o_gilensize и грузится только в случае необходимости. Если у вас были тесты провеяющие gilensize
112
+ скорее всего они "полетели" (julik)
113
+ * Gilenson - дополнительная фича, не связанная с типографикой: замена амперсанда в следующих атрибутах
114
+ тагов: href, src, data. Пример: <a href="?x=1&y=2&#38;z=3"> => <a href="?x=1&#38;y=2&#38;z=3"> (mash)
115
+ * Gilenson - изменён метод process_ampersands (стало process_escape_html), меняющий &,<,> на глифы :amp,:lt,:gt
116
+ при запрете HTML (@settings[:html]=>false). По-умолчанию Гиленсон разрешает использование HTML.
117
+ В иерархии метод выставлен первым для корректной обработки случаев вида
118
+ %{Используйте &#38; вместо &amp;}.gilensize(:html=>false) (mash)
119
+ * Gilenson - добавлены :skip_attr=>false и :skip_code=>true для управления обработкой типографики атрибутов тегов title, alt и содержимого <code/>, <tt/>, <![CDATA[...]]> (mash)
120
+ * Gilenson - добавлен :raw_output=>true для вывода обычных UTF-8 chars вместо entities (julik)
121
+ * Смена структуры модулей Gilenson (julik)
122
+ RuTils::Gilenson::Obsolete - старый класс форматтера
123
+ RuTils::Gilenson::Formatter - новый класс форматтера
124
+ При вызове RuTils::Gilenson.new возвращается новый Formatter
125
+ * Gilenson - документация (julik)
126
+ * Gilenson - основные группы настроек "по-умолчанию" выносятся в константы (julik)
127
+ * Gilenson - фильтры выносятся в методы типа process_фильтр и их можно применять по отдельности через Formatter#apply (julik)
128
+ * Gilenson - добавлены &para; и &numero; (последний - не стандарт, но нужен для преобразований символа "номер") (mash)
129
+ * Gilenson - добавлен хэш @glyph_copy_paste для подмены юникодных типографских символов на entities
130
+ (опционально, через @settings[:copypaste]=>true) (mash)
131
+ * Gilenson - добавлена "склейка" инициалов полукруглой шпацией (thin space)
132
+ * Gilenson - добавлен Formatter#process чтобы обрабатывать строки поточно, и сделан удобный доступ к настройкам
133
+ через "хвост" метода (julik)
134
+ * Во всех внутренних строковых подстановках Gilenson используются указатели на глифы с двоеточием в начале (julik)
135
+ * Gilenson - введен DOUBLE PRIME (&#8243;) для знаков дюйма (julik)
136
+ http://en.wikipedia.org/wiki/Prime_%28mark%29
137
+ Согласно изощренным правилам скошенный prime правильней чем "
138
+ * Новый Гиленсон lib/gilenson/gilenson.rb (mash)
139
+ RuTils::GilensonNew::Typografica.new('какой-то текст')
140
+ %q{"какой-то текст"}.n_gilensize
141
+ * Код приведён к "2 spaces - no tabs", частично полетели дифы (mash)
142
+ * Изменены константы дат, используемые в lib/integration/rails_date_helper_override.rb:
143
+ Было: RuTils::DateTime::ABBR_MONTHNAMES, RuTils::DateTime::INFLECTED_MONTHNAMES
144
+ Стало: Date::RU_ABBR_MONTHNAMES, Date::RU_INFLECTED_MONTHNAMES (mash)
145
+ * Добавлена функциия Numeric#rublej (julik)
146
+ * Добавлена русская версия Time#ru_strftime и Date#ru_strftime (mash)
147
+
148
+ === 0.1.2 - 01.11.2005
149
+
150
+ * Добавлен BiDi-транслит c тестами (mash)
151
+
152
+ === 0.04 - 20.10.2005
153
+
154
+ * Чистка документации
155
+
156
+ === 0.03 - 18.10.2005
157
+
158
+ * Легкий рефакторинг и чистка документации, добавлена реализация BiDi-транслита
159
+
160
+ === 0.02 - 12.07.2005
161
+
162
+ * Заменен маркер подстановки тегов в Gilenson. Ранее без oniguruma из-за его применения "проглатывалась" буква "р"
@@ -0,0 +1,42 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile.rb
5
+ TODO.txt
6
+ WHAT_HAS_CHANGED.txt
7
+ bin/gilensize
8
+ bin/rutilize
9
+ init.rb
10
+ lib/countries/countries.rb
11
+ lib/datetime/datetime.rb
12
+ lib/gilenson/bluecloth_extra.rb
13
+ lib/gilenson/gilenson.rb
14
+ lib/gilenson/helper.rb
15
+ lib/gilenson/maruku_extra.rb
16
+ lib/gilenson/rdiscount_extra.rb
17
+ lib/gilenson/redcloth_extra.rb
18
+ lib/integration/integration.rb
19
+ lib/integration/rails_date_helper_override.rb
20
+ lib/integration/rails_pre_filter.rb
21
+ lib/pluralizer/pluralizer.rb
22
+ lib/rutils.rb
23
+ lib/transliteration/bidi.rb
24
+ lib/transliteration/simple.rb
25
+ lib/transliteration/transliteration.rb
26
+ lib/version.rb
27
+ test/extras/integration_bluecloth.rb
28
+ test/extras/integration_maruku.rb
29
+ test/extras/integration_rails_filter.rb
30
+ test/extras/integration_rails_gilenson_helpers.rb
31
+ test/extras/integration_rails_helpers.rb
32
+ test/extras/integration_rdiscount.rb
33
+ test/extras/integration_redcloth3.rb
34
+ test/extras/integration_redcloth4.rb
35
+ test/run_tests.rb
36
+ test/test_datetime.rb
37
+ test/test_gilenson.rb
38
+ test/test_integration.rb
39
+ test/test_integration_flag.rb
40
+ test/test_pluralize.rb
41
+ test/test_rutils_base.rb
42
+ test/test_transliteration.rb
@@ -0,0 +1,234 @@
1
+ = RuTils
2
+
3
+ http://rutils.rubyforge.org
4
+
5
+ RuTils - простой обработчик русского текста на Ruby.
6
+ Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
7
+ и приятной (в идеале - столь же простой как и разработку оных на английском).
8
+
9
+ == Шеф! все пропало! я обновил RuTils и он работает совершенно по-другому!
10
+
11
+ Раздел также известен под именем "Что поменялось в RuTils 1.0.0". Вам {сюда.}[link:files/WHAT_HAS_CHANGED_txt.html]
12
+
13
+ == Чье это
14
+
15
+ Разработчики RuTils - {Julik}[http://julik.nl], {Mash}[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
16
+
17
+ Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за
18
+ реализацию большинства алгоритмов на PHP.
19
+
20
+ = Как воспользоваться
21
+
22
+ Просто включите rutils в свою программу как библиотеку
23
+
24
+ require 'rutils'
25
+
26
+ Для использования с Ruby on Rails установите RuTils как плагин
27
+ (скопируйте библиотеку в vendor/plugins приложения).
28
+
29
+ = Что оно делает
30
+
31
+ == Cумма прописью и выбор числительного
32
+
33
+ RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным
34
+ учетом рода. Например:
35
+
36
+ 4.propisju => "четыре"
37
+ 345.propisju => "триста сорок пять"
38
+ 231.propisju(2) => "двести тридцать одна"
39
+ 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
40
+ (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых
41
+ четыре десятых сволочи"
42
+
43
+ Также реализуется выбор варианта числительного в зависимости от числа
44
+
45
+ 15.items("кодер", "кодера", "кодеров") => "кодеров"
46
+
47
+ и вывод "суммы прописью" для денежных сумм в рублях
48
+
49
+ (413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
50
+ 1.rubl => "один рубль"
51
+ 22.rublja => "двадцать два рубля"
52
+
53
+ Если вы храните денежные единицы в целочисленных типах, пользуйтесь "копеечными" вариантами:
54
+
55
+ 300.kopeek => "три рубля"
56
+ 121.kopeika => "один рубль двадцать одна копейка"
57
+
58
+ == Транслит
59
+
60
+ RuTils на данный момент реализует простейший транслит "в одну сторону".
61
+ "Взаимно-однозначный транслит" (BiDi-транслит) больше не поддерживается.
62
+
63
+ "Вот такое вот дело".translify => "Vot takoye vot delo"
64
+ "Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
65
+
66
+ == Обработка русской типографики в HTML
67
+
68
+ Gilenson - порт Typografica[http://pixel-apes.com/typografica] от Pixel Apes.
69
+ Тыпографица - механизм автоматической расстановки подстановок в тексте перед его
70
+ выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки и тому
71
+ подобные "украшательства".
72
+
73
+ Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы,
74
+ английские - для латиницы), заменит "хитрые" пунктуационные символы на entities и
75
+ отформатирует знаки типа (c), (tm), телефоны и адреса.
76
+
77
+ %q{"И это называется языком?", -- таков был его вопрос}.gilensize => "&#171;И
78
+ это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос"
79
+
80
+ Более подробная документация по Gilenson доступна в документах к
81
+ RuTils::Gilenson::Formatter
82
+
83
+ В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать
84
+ Unicode-тексты в среде UNIX пользуясь стандартным выводом
85
+
86
+ $ cat myfile.txt | gilensize > myfile.html
87
+
88
+ == Даты
89
+
90
+ В класс Date введены следующие константы:
91
+
92
+ * RU_MONTHNAMES (Январь Февраль Март...)
93
+ * RU_DAYNAMES (Воскресенье Понедельник...)
94
+ * RU_ABBR_MONTHNAMES (Янв Фев Мар...)
95
+ * RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
96
+ * RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
97
+ * RU_DAYNAMES_E (первое второе третье...)
98
+
99
+ Пример использования:
100
+
101
+ require 'date' date = Date.new(2005, 11, 9)
102
+ puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
103
+ puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
104
+ puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
105
+ puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
106
+
107
+ При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется
108
+ "покрытие" стандартной функции Time#strftime ("родную" #strftime можно продолжать
109
+ использовать через alias-метод #strftime_norutils):
110
+
111
+ Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
112
+ Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
113
+
114
+ == Интеграция с RedCloth и BlueCloth
115
+
116
+ RuTils в первую очередь задумывался как максимально "прозрачный" механизм
117
+ обработки русского текста в контексте Rails-приложения.
118
+
119
+ Если вы используете RuTils в одном приложении со стандартными форматтерами (RedCloth, BlueCloth...) воспользуйтесь
120
+ дополнительными модулями которые выводят отформатированный Гиленсоном результат работы форматтеров
121
+
122
+ Gilenson определяет следующие дополнительные форматтеры (они работают так же как и их базовые классы)
123
+
124
+ * RuTils::Gilenson::RedClothExtra
125
+ * RuTils::Gilenson::BlueClothExtra
126
+ * RuTils::Gilenson::RDiscountExtra
127
+ * RuTils::Gilenson::MarukuExtra
128
+
129
+ В этих классах Gilenson будет обрабатывать типографику во всех текстах, пропускаемых через
130
+ них. Эти классы при включенном флаге RuTils.overrides автоматически подключаются в хелперы
131
+ +markdown+ и +textilize+.
132
+
133
+ == Интеграция с Rails версии 2.2.2 и выше
134
+
135
+ Используйте гем russian для дат и RuTils как дополнение (для транслита, функций kopeek и так далее)
136
+
137
+ == Интеграция с Rails версий 1.2 - 2.1.1
138
+
139
+ RuTils заставляет следующие функции старых (pre-i18n) версий Rails говорить по-русски:
140
+
141
+ * Меню выбора даты (+date_select+ и +datetime_select+) и связанные с этим хелперы
142
+ будут выводиться с русскими именами месяцев, и учитывая локализованный порядок дат
143
+ (сначала число, потом месяц, потом год)
144
+ * +distance_of_time_in_words+ будет выводить
145
+ русские описания длительности ("более 2 часов")
146
+
147
+ == Управление оверрайдами
148
+
149
+ Перегрузку всех функций других модулей можно включать и отключать в любое время с
150
+ помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние
151
+ хелперы будут работать в стандартном режиме (например, даты и время будут выводиться по-русски).
152
+ Это нужно когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
153
+
154
+ Рекомендуемый способ использования RuTils с Ruby on Rails приложением -- установка RuTils
155
+ плагином. Для этого скопируйте директорию rutils в папку vendor/plugins вашего
156
+ приложения или воспользуйтесь командой rutilize путь_к_rails_приложению чтобы сделать это
157
+ автоматически. После этого вы сможете использовать RuTils без необходимости
158
+ установки gem на вашем сервере (не забудьте перезапустить приложение чтобы
159
+ вгрузить в него RuTils).
160
+
161
+ $ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
162
+
163
+ == Распространения
164
+
165
+ Вы можете свободно распространять RuTils со своим приложением при условии
166
+ сохранения структуры и файла README.
167
+
168
+ == Совместимость
169
+
170
+ * Ruby 1.8.x
171
+ * Ruby 1.9.x (релизные версии начиная с 1.9.1)
172
+ * JRuby 1.1.6
173
+
174
+ == Требования
175
+
176
+ * Ruby 1.8.2 или выше, немного прямых рук
177
+ * Rake[http://rake.rubyforge.org],
178
+
179
+
180
+ Rails[http://rubyonrails.org],
181
+ RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и
182
+ BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов.
183
+
184
+ == Работает ли это с текстом в кодировке отличной от UTF-8 (Windows-1251, KOI-8)
185
+
186
+ Нет и никогда не будет.
187
+
188
+ == Как получить помощь
189
+
190
+ Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode
191
+ 'u'). Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
192
+
193
+ * Переменная $KCODE включена в режим 'u'
194
+ * Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
195
+
196
+ Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой
197
+ RubyKanjiCode в своем httpd.conf.
198
+
199
+ == Если вы все сделали правильно но что-то не работает
200
+
201
+ Сообщите об ошибке на странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
202
+ Не забудьте указать версию, ее всегда можно узнать в константе
203
+
204
+ RuTils::VERSION
205
+
206
+ == Как ускорить реализацию новых функций
207
+
208
+ Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите
209
+ тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы
210
+ можете скопировать из собственных тестов RuTils.
211
+
212
+ Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы,
213
+ пожалуйста следуйте следующим правилам оформления кода:
214
+
215
+ * Unix line breaks (LF)
216
+ * Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
217
+ * Все файлы должны содержать emacs-прагму
218
+ # -*- encoding: utf-8 -*-
219
+ в первой строке
220
+ * Отступы в 2 пробела, без табуляций
221
+ * Только однозначный код для 1.8 и 1.9
222
+ * Без функций которые отсутствуют в 1.8 (в первую очередь encodings)
223
+ * Без функций которые убраны из 1.9
224
+ * Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
225
+ * Все другие конвенции нормального написания
226
+ Ruby-кода (http://github.com/chneukirchen/styleguide/tree/master)
227
+
228
+ При сравнении текстовых сегментов, прошедших через хитрые форматтеры пользуйтесь assert_equal_cp
229
+ - он внятно покажет вам какой символ отличается в двух строках (иначе будете вслепую искать
230
+ разницу между двумя разными пробелами, например)
231
+
232
+ Если вы хотите участвовать в разработке RuTils - fork us on GitHub
233
+
234
+ git clone git://github.com/julik/rutils.git
@@ -0,0 +1,41 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $KCODE = 'u'
3
+ $:.reject! { |e| e.include? 'TextMate' }
4
+
5
+ require 'lib/version'
6
+
7
+ begin
8
+ require 'rubygems'
9
+ require 'hoe'
10
+
11
+ DOCOPTS = %w(--charset utf-8 --promiscuous)
12
+
13
+ # Disable spurious warnings when running tests, ActiveMagic cannot stand -w
14
+ Hoe::RUBY_FLAGS.replace ENV['RUBY_FLAGS'] || "-I#{%w(lib test).join(File::PATH_SEPARATOR)}" +
15
+ (Hoe::RUBY_DEBUG ? " #{RUBY_DEBUG}" : '')
16
+
17
+ rutils = Hoe.new('rutils', RuTils::VERSION) do |p|
18
+ p.name = "rutils"
19
+ p.author = ["Julian 'Julik' Tarkhanov", "Danil Ivanov", "Yaroslav Markin"]
20
+ p.email = ['me@julik.nl', 'yaroslav@markin.net']
21
+ p.description = 'Simple processing of russian strings'
22
+ p.summary = 'Simple processing of russian strings'
23
+ p.remote_rdoc_dir = ''
24
+ p.need_zip = true # ненвижу
25
+ end
26
+ rutils.spec.rdoc_options += DOCOPTS
27
+
28
+ require 'load_multi_rails_rake_tasks'
29
+
30
+ rescue LoadError
31
+ $stderr.puts "Meta-operations on this package require Hoe and multi_rails"
32
+ task :default => [ :test ]
33
+
34
+ require 'rake/testtask'
35
+ desc "Run all tests (requires BlueCloth, RedCloth and Rails for integration tests)"
36
+ Rake::TestTask.new("test") do |t|
37
+ t.libs << "test"
38
+ t.pattern = 'test/t_*.rb'
39
+ t.verbose = true
40
+ end
41
+ end