rutils 0.1.0 → 0.1.1
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.
- data/README +13 -9
- data/bin/gilensize +11 -0
- data/bin/rutilize +37 -0
- data/lib/datetime/datetime.rb +1 -1
- data/lib/gilenson/gilenson_port.rb +2 -1
- data/lib/integration/blue_cloth_override.rb +1 -1
- data/lib/integration/integration.rb +10 -4
- data/lib/integration/rails_date_helper_override.rb +2 -2
- data/lib/integration/red_cloth_override.rb +2 -2
- data/lib/pluralizer/pluralizer.rb +37 -39
- data/lib/rutils.rb +4 -2
- data/lib/transliteration/transliteration.rb +8 -8
- data/test/t_binaries.rb +26 -0
- data/test/t_datetime.rb +1 -0
- data/test/t_integration.rb +39 -10
- data/test/t_rutils_base.rb +10 -0
- metadata +7 -2
data/README
CHANGED
@@ -1,20 +1,16 @@
|
|
1
1
|
== Добро пожаловать в RuTils
|
2
2
|
|
3
|
-
RuTils - простой обработчик русского
|
4
|
-
русский текст несколькими несложными способами. Основная цель RuTils - сделать
|
3
|
+
RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать
|
5
4
|
разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же
|
6
5
|
простой как и разработку оных на английском)
|
7
6
|
|
8
7
|
Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode 'u'). Стандартно работа RuTils проверяется
|
9
8
|
как на стандартной версии Ruby, так и на парсере регулярных выражений Oniguruma (правда имейте в виду, что с ним
|
10
9
|
Gilenson работает медленнее).
|
11
|
-
|
12
|
-
|
13
|
-
Это версия RuTils
|
14
|
-
|
15
|
-
$Revision: 1.7 $
|
16
10
|
|
17
|
-
Пожалуйста упоминайте версию при сообщении ошибок.
|
11
|
+
Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно узнать в константе
|
12
|
+
|
13
|
+
RuTils::VERSION
|
18
14
|
|
19
15
|
Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
|
20
16
|
|
@@ -79,7 +75,15 @@ Textile английские кавычки и типографские знак
|
|
79
75
|
|
80
76
|
Перегрузку всех функций (RedCloth, BlueCloth и компоненты Rails) можно включать и отключать в любое время
|
81
77
|
с помощью метода overrides= модуля RuTils. Когда перегрузка выключена, все сторонние библиотеки будут работать
|
82
|
-
в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки).
|
78
|
+
в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно
|
79
|
+
когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
|
80
|
+
|
81
|
+
Если вы хотите использовать rutils как дополенние к Rails в одном конкретном приложении, скопируйте
|
82
|
+
директорию rutils в папку vendor/plugins вашего приложения. Вы можете воспользоваться командой
|
83
|
+
rutilize чтобы сделать это автоматически. После этого вы сможете использовать RuTils без
|
84
|
+
необходимости установки gem'а.
|
85
|
+
|
86
|
+
$ rutilize /Sites/my_app
|
83
87
|
|
84
88
|
== Требования
|
85
89
|
|
data/bin/gilensize
CHANGED
@@ -2,6 +2,17 @@
|
|
2
2
|
$KCODE = 'u'
|
3
3
|
require File.dirname(__FILE__) + '/../lib/rutils'
|
4
4
|
|
5
|
+
# == Synopsis
|
6
|
+
#
|
7
|
+
# Processes text on standard input with Typografica
|
8
|
+
#
|
9
|
+
# == Usage
|
10
|
+
#
|
11
|
+
# cat myfile.txt | gilensize > output.txt
|
12
|
+
#
|
13
|
+
# == Author
|
14
|
+
# Julik <me@julik.nl>
|
15
|
+
|
5
16
|
while st = gets do
|
6
17
|
puts RuTils::Gilenson::Formatter.new(st).to_html
|
7
18
|
end
|
data/bin/rutilize
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# == Synopsis
|
3
|
+
#
|
4
|
+
# Copy RuTils to your Rails application, automatically making it speak Russian.
|
5
|
+
# The application will need to be restarted for changes to take effect.
|
6
|
+
# After that your app contains RuTils and is not dependent on RuTils gem
|
7
|
+
#
|
8
|
+
# == Usage
|
9
|
+
#
|
10
|
+
# rutilize /Sites/my_app /Sites/my_other_app
|
11
|
+
#
|
12
|
+
# == Author
|
13
|
+
# Julik <me@julik.nl>
|
14
|
+
|
15
|
+
|
16
|
+
$KCODE = 'u'
|
17
|
+
require File.dirname(__FILE__) + '/../lib/rutils'
|
18
|
+
require 'optparse'
|
19
|
+
require 'rdoc/usage'
|
20
|
+
|
21
|
+
opts = OptionParser.new
|
22
|
+
opts.on(" -h", "--help") { RDoc::usage }
|
23
|
+
opts.parse(ARGV) rescue RDoc::usage('usage')
|
24
|
+
|
25
|
+
if ARGV.empty?
|
26
|
+
RDoc::usage_no_exit('usage')
|
27
|
+
exit(-1)
|
28
|
+
end
|
29
|
+
|
30
|
+
for item in ARGV
|
31
|
+
puts "Teaching #{item} to speak Russian"
|
32
|
+
raise "The directory #{item} does not exist" unless File.exist?(item)
|
33
|
+
raise "#{item} - not a directory" unless File.directory?(item)
|
34
|
+
raise "This directory doesn't seem to be a Rails application" unless File.exist?(item + '/vendor')
|
35
|
+
Dir::mkdir(item+'/vendor/plugins') unless File.exist?(item + '/vendor/plugins')
|
36
|
+
`cp -r #{RuTils::INSTALLATION_DIRECTORY} #{item}/vendor/plugins`
|
37
|
+
end
|
data/lib/datetime/datetime.rb
CHANGED
@@ -31,7 +31,7 @@ module RuTils
|
|
31
31
|
when 46..90 then 'около часа'
|
32
32
|
# исключение, сдвигаем на один влево чтобы соответствовать падежу
|
33
33
|
when 90..1440 then "около " + (distance_in_minutes.to_f / 60.0).round.to_s +
|
34
|
-
" " + (distance_in_minutes.to_f / 60.0).round.items("часа", "часов",
|
34
|
+
" " + (distance_in_minutes.to_f / 60.0).round.items("часа", "часов", '')
|
35
35
|
when 1441..2880 then '1 день'
|
36
36
|
else (distance_in_minutes / 1440).round.to_s +
|
37
37
|
" " + (distance_in_minutes / 1440).round.items("день", "дня", "дней")
|
@@ -330,11 +330,12 @@ module RuTils
|
|
330
330
|
|
331
331
|
end #end RuTils
|
332
332
|
|
333
|
+
# Вгружаем этот форматтер если уже не загружен наш новый
|
333
334
|
unless defined?(RuTils::Gilenson::Formatter)
|
334
335
|
class RuTils::Gilenson::Formatter < RuTils::Gilenson::Typografica
|
335
336
|
end
|
336
337
|
end
|
337
338
|
|
338
|
-
class String
|
339
|
+
class Object::String
|
339
340
|
include RuTils::Gilenson::StringFormatting
|
340
341
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
if defined?(BlueCloth)
|
2
|
-
class BlueCloth < String #:nodoc:
|
2
|
+
class Object::BlueCloth < String #:nodoc:
|
3
3
|
alias_method :old_to_html, :to_html
|
4
4
|
def to_html(*opts)
|
5
5
|
RuTils::overrides_enabled? ? RuTils::Gilenson::Formatter.new(old_to_html(*opts)).to_html : old_to_html(*opts)
|
@@ -4,7 +4,7 @@ module RuTils
|
|
4
4
|
# Метод позволяет проверить, включена ли перегрузка функций других модулей.
|
5
5
|
# Попутно он спрашивает модуль Locale (если таковой имеется) является ли русский
|
6
6
|
# текущим языком, и если является, включает перегрузку функций имплицитно.
|
7
|
-
# Модуль Locale можно
|
7
|
+
# Модуль Locale можно получить как часть Multilingual Rails.
|
8
8
|
def self.overrides_enabled?
|
9
9
|
if defined?(Locale) and Locale.respond_to?(:current)
|
10
10
|
return true if Locale.current.split('_').first == 'ru'
|
@@ -17,8 +17,14 @@ module RuTils
|
|
17
17
|
def self.overrides= (new_override_flag)
|
18
18
|
@@overrides = (new_override_flag ? true : false)
|
19
19
|
end
|
20
|
+
|
21
|
+
# Вновь выполняет перегрузку. Делать это надо после того, как в программу импортированы
|
22
|
+
# другие модули.
|
23
|
+
def self.reload_integrations!
|
24
|
+
load File.dirname(__FILE__) + '/blue_cloth_override.rb'
|
25
|
+
load File.dirname(__FILE__) + '/red_cloth_override.rb'
|
26
|
+
load File.dirname(__FILE__) + '/rails_date_helper_override.rb'
|
27
|
+
end
|
20
28
|
end
|
21
29
|
|
22
|
-
|
23
|
-
load File.dirname(__FILE__) + '/red_cloth_override.rb'
|
24
|
-
load File.dirname(__FILE__) + '/rails_date_helper_override.rb'
|
30
|
+
RuTils::reload_integrations!
|
@@ -1,6 +1,6 @@
|
|
1
|
-
if defined?(RedCloth)
|
1
|
+
if defined?(Object::RedCloth)
|
2
2
|
# RuTils выполняет перегрузку Textile Glyphs в RedCloth, перенося форматирование спецсимволов на Gilenson.
|
3
|
-
class RedCloth < String #:nodoc:
|
3
|
+
class Object::RedCloth < String #:nodoc:
|
4
4
|
# Этот метод в RedCloth эскейпит слишком много HTML, нам ничего не оставляет :-)
|
5
5
|
alias_method :stock_htmlesc, :htmlesc
|
6
6
|
def htmlesc(text, mode=0) #:nodoc:
|
@@ -55,17 +55,17 @@ module RuTils
|
|
55
55
|
# начинаем подсчет с Rest
|
56
56
|
end_word = five_items
|
57
57
|
# сотни
|
58
|
-
case rest / 100
|
59
|
-
when 0 then
|
60
|
-
when 1 then
|
61
|
-
when 2 then
|
62
|
-
when 3 then
|
63
|
-
when 4 then
|
64
|
-
when 5 then
|
65
|
-
when 6 then
|
66
|
-
when 7 then
|
67
|
-
when 8 then
|
68
|
-
when 9 then
|
58
|
+
hundreds = case rest / 100
|
59
|
+
when 0 then ""
|
60
|
+
when 1 then "сто "
|
61
|
+
when 2 then "двести "
|
62
|
+
when 3 then "триста "
|
63
|
+
when 4 then "четыреста "
|
64
|
+
when 5 then "пятьсот "
|
65
|
+
when 6 then "шестьсот "
|
66
|
+
when 7 then "семьсот "
|
67
|
+
when 8 then "восемьсот "
|
68
|
+
when 9 then "девятьсот "
|
69
69
|
end
|
70
70
|
|
71
71
|
# десятки
|
@@ -75,17 +75,17 @@ module RuTils
|
|
75
75
|
case rest1
|
76
76
|
when 0 then tens = ""
|
77
77
|
when 1 # особый случай
|
78
|
-
case rest
|
79
|
-
when 10 then
|
80
|
-
when 11 then
|
81
|
-
when 12 then
|
82
|
-
when 13 then
|
83
|
-
when 14 then
|
84
|
-
when 15 then
|
85
|
-
when 16 then
|
86
|
-
when 17 then
|
87
|
-
when 18 then
|
88
|
-
when 19 then
|
78
|
+
tens = case rest
|
79
|
+
when 10 then "десять "
|
80
|
+
when 11 then "одиннадцать "
|
81
|
+
when 12 then "двенадцать "
|
82
|
+
when 13 then "тринадцать "
|
83
|
+
when 14 then "четырнадцать "
|
84
|
+
when 15 then "пятнадцать "
|
85
|
+
when 16 then "шестнадцать "
|
86
|
+
when 17 then "семнадцать "
|
87
|
+
when 18 then "восемнадцать "
|
88
|
+
when 19 then "девятнадцать "
|
89
89
|
end
|
90
90
|
when 2: tens = "двадцать "
|
91
91
|
when 3: tens = "тридцать "
|
@@ -100,13 +100,10 @@ module RuTils
|
|
100
100
|
if rest1 < 1 or rest1 > 1 # единицы
|
101
101
|
case rest % 10
|
102
102
|
when 1
|
103
|
-
case gender
|
104
|
-
when 1
|
105
|
-
|
106
|
-
when
|
107
|
-
ones = "одна "
|
108
|
-
when 3
|
109
|
-
ones = "одно "
|
103
|
+
ones = case gender
|
104
|
+
when 1 then "один "
|
105
|
+
when 2 then "одна "
|
106
|
+
when 3 then "одно "
|
110
107
|
end
|
111
108
|
end_word = one_item
|
112
109
|
when 2
|
@@ -134,7 +131,8 @@ module RuTils
|
|
134
131
|
end
|
135
132
|
|
136
133
|
# сборка строки
|
137
|
-
|
134
|
+
st = ''
|
135
|
+
return [(st << hundreds.to_s << tens.to_s << ones.to_s << end_word.to_s << " " << into.to_s).strip, tmp_val]
|
138
136
|
end
|
139
137
|
|
140
138
|
# Реализует вывод прописью любого объекта, реализующего Float
|
@@ -144,14 +142,14 @@ module RuTils
|
|
144
142
|
# дробная доля оканчивается на нули) до ближайшей доли ( 500 тысячных округляется до 5 десятых).
|
145
143
|
# Дополнительный аргумент - род существительного (1 - мужской, 2- женский, 3-средний)
|
146
144
|
def propisju(gender = 2)
|
147
|
-
raise "
|
145
|
+
raise "Это не число!" if self.nan?
|
148
146
|
|
149
147
|
st = RuTils::Pluralization::sum_string(self.to_i, gender, "целая", "целых", "целых")
|
150
148
|
it = []
|
151
149
|
|
152
|
-
|
150
|
+
remainder = self.to_s.match(/\.(\d+)/)[1]
|
153
151
|
|
154
|
-
signs =
|
152
|
+
signs = remainder.to_s.size- 1
|
155
153
|
|
156
154
|
it << ["десятая", "десятых"]
|
157
155
|
it << ["сотая", "сотых"]
|
@@ -167,12 +165,12 @@ module RuTils
|
|
167
165
|
# it << ["триллионная", "триллионных", "триллионных"]
|
168
166
|
|
169
167
|
while it[signs].nil?
|
170
|
-
|
171
|
-
signs =
|
168
|
+
remainder = (remainder/10).round
|
169
|
+
signs = remainder.to_s.size- 1
|
172
170
|
end
|
173
|
-
|
171
|
+
|
174
172
|
suf1, suf2, suf3 = it[signs][0], it[signs][1], it[signs][2]
|
175
|
-
st + " " + RuTils::Pluralization::sum_string(
|
173
|
+
st + " " + RuTils::Pluralization::sum_string(remainder.to_i, 2, suf1, suf2, suf2)
|
176
174
|
end
|
177
175
|
|
178
176
|
def propisju_items(gender=1, *forms)
|
@@ -207,11 +205,11 @@ module RuTils
|
|
207
205
|
end
|
208
206
|
end
|
209
207
|
|
210
|
-
class Numeric
|
208
|
+
class Object::Numeric
|
211
209
|
include RuTils::Pluralization::NumericFormatting
|
212
210
|
end
|
213
211
|
|
214
212
|
|
215
|
-
class Float
|
213
|
+
class Object::Float
|
216
214
|
include RuTils::Pluralization::FloatFormatting
|
217
215
|
end
|
data/lib/rutils.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
$KCODE = 'u'
|
2
|
-
require 'jcode'
|
2
|
+
require 'jcode' # вот от этого надо бы избавиться - скопировать jsize из jcode и поместить его в свой namespace
|
3
|
+
|
3
4
|
|
4
5
|
# Главный контейнер модуля
|
5
6
|
module RuTils
|
7
|
+
INSTALLATION_DIRECTORY = File.expand_path(File.dirname(__FILE__) + '/../')
|
6
8
|
MAJOR = 0
|
7
9
|
MINOR = 1
|
8
|
-
TINY =
|
10
|
+
TINY = 1
|
9
11
|
VERSION = "#{MAJOR}.#{MINOR}.#{TINY}"
|
10
12
|
end
|
11
13
|
|
@@ -3,7 +3,7 @@ module RuTils
|
|
3
3
|
end
|
4
4
|
end
|
5
5
|
|
6
|
-
#
|
6
|
+
# Реализует простейшую транслитерацию
|
7
7
|
# "вот мы и здесь".translify => "vot my i zdes"
|
8
8
|
# "vot my i zdes".detranslify => "вот мы и здесь"
|
9
9
|
module RuTils::Transliteration::Simple
|
@@ -56,8 +56,8 @@ module RuTils::Transliteration::Simple
|
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
|
-
#
|
60
|
-
module RuTils::Transliteration::BiDi
|
59
|
+
# Реализует транслитерацию "в обе стороны", дающую возможность автоматически использовать URL как ключ записи
|
60
|
+
module RuTils::Transliteration::BiDi #:nodoc:
|
61
61
|
TABLE_TO = {
|
62
62
|
"А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
|
63
63
|
"Е"=>"E","Ё"=>"JO","Ж"=>"ZH","З"=>"Z","И"=>"I",
|
@@ -148,26 +148,26 @@ module RuTils::Transliteration::StringFormatting
|
|
148
148
|
end
|
149
149
|
|
150
150
|
# Транслитерирует строку (взаимно-однозначный транслит), и возвращает измененную строку
|
151
|
-
def bidi_translify(allow_slashes = true)
|
151
|
+
def bidi_translify(allow_slashes = true) #:nodoc:
|
152
152
|
RuTils::Transliteration::BiDi::translify(self.to_s, allow_slashes)
|
153
153
|
end
|
154
154
|
|
155
155
|
# Транслитерирует строку (взаимно-однозначный транслит), меняя объект
|
156
|
-
def bidi_translify!(allow_slashes = true)
|
156
|
+
def bidi_translify!(allow_slashes = true) #:nodoc:
|
157
157
|
self.replace(RuTils::Transliteration::BiDi::translify(self.to_s, allow_slashes))
|
158
158
|
end
|
159
159
|
|
160
160
|
# Заменяет латиницу на кириллицу (взаимно-однозначный транслит), меняя объект
|
161
|
-
def bidi_detranslify!(allow_slashes = true)
|
161
|
+
def bidi_detranslify!(allow_slashes = true) #:nodoc:
|
162
162
|
self.replace(RuTils::Transliteration::BiDi::detranslify(self.to_s, allow_slashes))
|
163
163
|
end
|
164
164
|
|
165
165
|
# Заменяет латиницу на кириллицу (взаимно-однозначный транслит), и возвращает измененную строку
|
166
|
-
def bidi_detranslify(allow_slashes = true)
|
166
|
+
def bidi_detranslify(allow_slashes = true) #:nodoc:
|
167
167
|
RuTils::Transliteration::BiDi::detranslify(self.to_s, allow_slashes = true)
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
|
-
class String
|
171
|
+
class Object::String
|
172
172
|
include RuTils::Transliteration::StringFormatting
|
173
173
|
end
|
data/test/t_binaries.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
$KCODE = 'u'
|
2
|
+
require 'test/unit'
|
3
|
+
require File.dirname(__FILE__) + '/../lib/rutils'
|
4
|
+
|
5
|
+
|
6
|
+
class RutilizeTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@dirs = [
|
9
|
+
'/tmp/app',
|
10
|
+
'/tmp/notapp',
|
11
|
+
'/tmp/app/vendor',
|
12
|
+
]
|
13
|
+
@dirs.each{|dir| Dir::mkdir(dir) }
|
14
|
+
@rutilize = File.dirname(__FILE__) + '/../bin/rutilize'
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_rutilize_app
|
18
|
+
`#{@rutilize} #{@dirs[0]}`
|
19
|
+
assert File.exist?(@dirs[0] + '/vendor/plugins/rutils')
|
20
|
+
assert File.exist?(@dirs[0] + '/vendor/plugins/rutils/lib/rutils.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
@dirs.each {|dir| `rm -rf #{dir}` }
|
25
|
+
end
|
26
|
+
end
|
data/test/t_datetime.rb
CHANGED
@@ -7,5 +7,6 @@ class DistanceOfTimeTest < Test::Unit::TestCase
|
|
7
7
|
assert_equal "меньше минуты", RuTils::DateTime::distance_of_time_in_words(0, 50)
|
8
8
|
assert_equal "2 минуты", RuTils::DateTime::distance_of_time_in_words(0, 140)
|
9
9
|
assert_equal "около 2 часов", RuTils::DateTime::distance_of_time_in_words(0, 60*114)
|
10
|
+
assert_equal "около 3 часов", RuTils::DateTime::distance_of_time_in_words(0, 60*120+60*60)
|
10
11
|
end
|
11
12
|
end
|
data/test/t_integration.rb
CHANGED
@@ -2,16 +2,14 @@ $KCODE = 'u'
|
|
2
2
|
require 'test/unit'
|
3
3
|
require 'rubygems'
|
4
4
|
|
5
|
+
require 'action_view'
|
5
6
|
require_gem 'RedCloth'
|
6
7
|
require_gem 'BlueCloth'
|
7
8
|
|
8
|
-
|
9
9
|
require File.dirname(__FILE__) + '/../lib/rutils'
|
10
|
+
load File.dirname(__FILE__) + '/../lib/integration/integration.rb'
|
10
11
|
|
11
|
-
|
12
|
-
load File.dirname(__FILE__) + '/../lib/integration/integration.rb'
|
13
|
-
|
14
|
-
class IntegrationTest < Test::Unit::TestCase
|
12
|
+
class IntegrationFlagTest < Test::Unit::TestCase
|
15
13
|
def setup
|
16
14
|
RuTils::overrides = true
|
17
15
|
end
|
@@ -21,23 +19,54 @@ class IntegrationTest < Test::Unit::TestCase
|
|
21
19
|
assert !RuTils::overrides_enabled?
|
22
20
|
RuTils::overrides = true
|
23
21
|
assert RuTils::overrides_enabled?
|
24
|
-
end
|
22
|
+
end
|
25
23
|
end
|
26
24
|
|
27
25
|
# Интеграция с RedCloth - Textile.
|
28
26
|
# Нужно иметь в виду что Textile осуществляет свою обработку типографики, которую мы подменяем!
|
29
|
-
class TextileIntegrationTest <
|
30
|
-
def test_integration_textile
|
27
|
+
class TextileIntegrationTest < Test::Unit::TestCase
|
28
|
+
def test_integration_textile
|
29
|
+
RuTils::overrides = true
|
30
|
+
assert RuTils.overrides_enabled?
|
31
31
|
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
32
32
|
RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
33
|
+
|
34
|
+
RuTils::overrides = false
|
35
|
+
assert !RuTils.overrides_enabled?
|
36
|
+
assert_equal "<p>И вот “они пошли туда”, и шли шли шли</p>",
|
37
|
+
RedCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
33
38
|
end
|
34
39
|
end
|
35
40
|
|
36
41
|
# Интеграция с BlueCloth - Markdown
|
37
42
|
# Сам Markdown никакой обработки типографики не производит (это делает RubyPants, но вряд ли его кто-то юзает на практике)
|
38
|
-
class MarkdownIntegrationTest <
|
43
|
+
class MarkdownIntegrationTest < Test::Unit::TestCase
|
39
44
|
def test_integration_markdown
|
45
|
+
RuTils::overrides = true
|
46
|
+
assert RuTils.overrides_enabled?
|
40
47
|
assert_equal "<p>И вот «они пошли туда», и шли шли шли</p>",
|
41
48
|
BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
49
|
+
|
50
|
+
RuTils::overrides = false
|
51
|
+
assert !RuTils.overrides_enabled?
|
52
|
+
assert_equal "<p>И вот \"они пошли туда\", и шли шли шли</p>",
|
53
|
+
BlueCloth.new('И вот "они пошли туда", и шли шли шли').to_html
|
42
54
|
end
|
43
|
-
end
|
55
|
+
end
|
56
|
+
|
57
|
+
# Перегрузка helper'ов Rails
|
58
|
+
class RailsHelpersOverrideTest < Test::Unit::TestCase
|
59
|
+
def test_distance_of_time_in_words
|
60
|
+
eval 'class Foo
|
61
|
+
include ActionView::Helpers::DateHelper
|
62
|
+
def get_dst
|
63
|
+
distance_of_time_in_words(Time.now - 20.minutes, Time.now)
|
64
|
+
end
|
65
|
+
end'
|
66
|
+
|
67
|
+
RuTils::overrides = true
|
68
|
+
foo = Foo.new
|
69
|
+
assert_equal "20 минут", foo.get_dst
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
$KCODE = 'u'
|
2
|
+
require 'test/unit'
|
3
|
+
require File.dirname(__FILE__) + '/../lib/rutils'
|
4
|
+
|
5
|
+
class RutilsBaseTest < Test::Unit::TestCase
|
6
|
+
def test_rutils_location
|
7
|
+
libdir = File.expand_path(File.dirname(__FILE__) + '/../')
|
8
|
+
assert_equal libdir, RuTils::INSTALLATION_DIRECTORY
|
9
|
+
end
|
10
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: rutils
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2005-10-
|
6
|
+
version: 0.1.1
|
7
|
+
date: 2005-10-29 00:00:00 +02:00
|
8
8
|
summary: Simple processing of russian strings
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -31,11 +31,14 @@ authors:
|
|
31
31
|
- Julian "Julik" Tarkhanov
|
32
32
|
files:
|
33
33
|
- bin/gilensize
|
34
|
+
- bin/rutilize
|
34
35
|
- test/run_tests.rb
|
36
|
+
- test/t_binaries.rb
|
35
37
|
- test/t_datetime.rb
|
36
38
|
- test/t_gilenson.rb
|
37
39
|
- test/t_integration.rb
|
38
40
|
- test/t_pluralize.rb
|
41
|
+
- test/t_rutils_base.rb
|
39
42
|
- test/t_transliteration.rb
|
40
43
|
- test/t_typografica.rb
|
41
44
|
- lib/datetime
|
@@ -61,6 +64,7 @@ test_files:
|
|
61
64
|
rdoc_options:
|
62
65
|
- "--main=README"
|
63
66
|
- "--line-numbers"
|
67
|
+
- "--webcvs http://rubyforge.org/cgi-bin/viewcvs.cgi/rutils/%s?cvsroot=rutils"
|
64
68
|
- "--charset=utf-8"
|
65
69
|
- "--promiscuous"
|
66
70
|
extra_rdoc_files:
|
@@ -69,6 +73,7 @@ extra_rdoc_files:
|
|
69
73
|
- CHANGELOG
|
70
74
|
executables:
|
71
75
|
- gilensize
|
76
|
+
- rutilize
|
72
77
|
extensions: []
|
73
78
|
requirements: []
|
74
79
|
dependencies: []
|