rutils 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|