rutils 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/test/t_gilenson.rb CHANGED
@@ -27,11 +27,11 @@ class GilensonOwnTest < Test::Unit::TestCase
27
27
  end
28
28
 
29
29
  def test_phones
30
- assert_equal '<nobr>3&#8211;12&#8211;30</nobr>', '3-12-30'.gilensize
31
- assert_equal '<nobr>12&#8211;34&#8211;56</nobr>', '12-34-56'.gilensize
32
- assert_equal '<nobr>88&#8211;25&#8211;04</nobr>', '88-25-04'.gilensize
33
- assert_equal '+7 <nobr>(99284)&#160;65&#8211;818</nobr>', '+7 (99284) 65-818'.gilensize
34
- assert_equal '<nobr>725&#8211;01&#8211;10</nobr>', '725-01-10'.gilensize
30
+ assert_equal '<span class="nobr">3&#8211;12&#8211;30</span>', '3-12-30'.gilensize
31
+ assert_equal '<span class="nobr">12&#8211;34&#8211;56</span>', '12-34-56'.gilensize
32
+ assert_equal '<span class="nobr">88&#8211;25&#8211;04</span>', '88-25-04'.gilensize
33
+ assert_equal '+7 <span class="nobr">(99284)&#160;65&#8211;818</span>', '+7 (99284) 65-818'.gilensize
34
+ assert_equal '<span class="nobr">725&#8211;01&#8211;10</span>', '725-01-10'.gilensize
35
35
  end
36
36
 
37
37
  def test_acronyms_with_html_output
@@ -78,10 +78,23 @@ class GilensonOwnTest < Test::Unit::TestCase
78
78
  def test_breaking
79
79
  assert_equal 'скажи, мне, ведь не&#160;даром! Москва, клеймённая пожаром. Французу отдана', 'скажи ,мне, ведь не даром !Москва, клеймённая пожаром .Французу отдана'.gilensize
80
80
  assert_equal 'so&#160;be it, my&#160;liege. Tiny dwellers roam thru midnight! Hell raised, the&#160;Balrog is&#160;hiding in&#160;your backyard!', 'so be it ,my liege .Tiny dwellers roam thru midnight !Hell raised, the Balrog is hiding in your backyard!'.gilensize
81
- assert_equal 'при&#160;установке командой строки в&#160;?page=help <nobr>бла-бла-бла-бла</nobr>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
82
- assert_equal 'как&#160;интересно будет переноситься со&#160;строки на&#160;строку <nobr>что-то</nobr> разделённое дефисом, ведь дефис тот&#160;тоже ведь из&#160;наших. <nobr>Какие-то</nobr> браузеры думают, что&#160;следует переносить и&#160;его&#8230;', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
81
+ assert_equal 'при&#160;установке командой строки в&#160;?page=help <span class="nobr">бла-бла-бла-бла</span>', 'при установке командой строки в ?page=help бла-бла-бла-бла'.gilensize
82
+ assert_equal 'как&#160;интересно будет переноситься со&#160;строки на&#160;строку <span class="nobr">что-то</span> разделённое дефисом, ведь дефис тот&#160;тоже ведь из&#160;наших. <span class="nobr">Какие-то</span> браузеры думают, что&#160;следует переносить и&#160;его&#8230;', 'как интересно будет переноситься со строки на строку что-то разделённое дефисом, ведь дефис тот тоже ведь из наших. Какие-то браузеры думают, что следует переносить и его...'.gilensize
83
83
  end
84
84
 
85
+ def test_forced_quotes
86
+ assert_equal 'кавычки &#171;расставлены&#187; &#8220;in a&#160;chaotic order&#8221;',
87
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize
88
+ assert_equal 'кавычки &#8220;расставлены&#8221; &#8220;in a&#160;chaotic order&#8221;',
89
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_en_quotes => true)
90
+ assert_equal 'кавычки &#171;расставлены&#187; &#171;in a&#160;chaotic order&#187;',
91
+ 'кавычки "расставлены" "in a chaotic order"'.gilensize(:enforce_ru_quotes => true)
92
+ end
93
+
94
+ #def test_quotes_and_inch
95
+ # assert_equal "&#171;This one&#160;is&#160;12&#8342;&#187;", '"This one is 12""'.gilensize
96
+ #end
97
+
85
98
  def test_quotes
86
99
  assert_equal 'english &#8220;quotes&#8221; should be&#160;quite like this', 'english "quotes" should be quite like this'.gilensize
87
100
  assert_equal 'русские же&#160;&#171;оформляются&#187; подобным образом', 'русские же "оформляются" подобным образом'.gilensize
@@ -146,10 +159,15 @@ class GilensonOwnTest < Test::Unit::TestCase
146
159
  assert_equal "сказали мы?!!!", "сказали мы?!!!".gilensize
147
160
  assert_equal "сказали нам", "сказали нам".gilensize
148
161
  assert_equal "(сказали&#160;им)", "(сказали им)".gilensize
162
+ assert_equal "Справка&#160;09", 'Справка 09'.gilensize
163
+ end
164
+
165
+ def test_wordglue_combined_with_glyphs # http://pixel-apes.com/typografica/trako/12
166
+ assert_equal "&#171;Справка&#160;09&#187;", '"Справка 09"'.gilensize(:wordglue => true)
149
167
  end
150
168
 
151
169
  def test_marker_bypass
152
- assert_equal "<p><nobr>МИЭЛЬ-Недвижимость</nobr></p>", "<p>МИЭЛЬ-Недвижимость</p>".gilensize
170
+ assert_equal "<p><span class=\"nobr\">МИЭЛЬ-Недвижимость</span></p>", "<p>МИЭЛЬ-Недвижимость</p>".gilensize
153
171
  end
154
172
 
155
173
  def test_skip_code
@@ -338,6 +356,18 @@ class GilensonConfigurationTest < Test::Unit::TestCase
338
356
  assert_raise(RuTils::Gilenson::UnknownSetting) { @gilenson.configure!(:bararara => true) }
339
357
  end
340
358
 
359
+ def test_raise_on_unknown_setting_via_gilensize
360
+ assert_raise(RuTils::Gilenson::UnknownSetting) { "s".gilensize(:bararara => true) }
361
+ end
362
+
363
+ def test_backslash_does_not_suppress_quote # http://pixel-apes.com/typografica/trako/13, но с латинскими кавычками
364
+ assert_equal "&#8220;c:\\www\\sites\\&#8221;", '"c:\www\sites\"'.gilensize
365
+ end
366
+
367
+ def test_cpp
368
+ assert_equal "C++-API", "C++-API".gilensize
369
+ end
370
+
341
371
  def test_raw_utf8_output
342
372
  @gilenson.configure!(:raw_output=>true)
343
373
  assert_equal '&#38442; Это просто «кавычки»',
@@ -348,18 +378,10 @@ class GilensonConfigurationTest < Test::Unit::TestCase
348
378
  assert @gilenson.configure(:raw_output=>true)
349
379
  assert @gilenson.configure!(:raw_output=>true)
350
380
  end
351
- end
352
-
353
- # class TypograficaTrakoEntries < Test::Unit::TestCase
354
- # def test_cpp
355
- # assert_equal "C++-API", "C++-API".gilensize
356
- # end
357
- #
358
- # def test_symmetricity # http://pixel-apes.com/typografica/trako/12
359
- # assert_equal "&#171;Справка&#160;09&#187;", '"Справка 09"'.gilensize
360
- # end
361
- #
362
- # def test_paths # http://pixel-apes.com/typografica/trako/13
363
- # assert_equal '&#171;c:\www\sites\&#187;', '"c:\www\sites\"'.gilensize
364
- # end
365
- # end
381
+
382
+ def test_explicit_nobr
383
+ @gilenson.glyph[:nob_open] = '[NOB]'
384
+ @gilenson.glyph[:nob_close] = '[NOBC]'
385
+ assert_equal '[NOB]3&#8211;12&#8211;30[NOBC]', @gilenson.process('3-12-30')
386
+ end
387
+ end
@@ -1,6 +1,12 @@
1
1
  $KCODE = 'u'
2
- require 'test/unit'
3
2
  require 'rubygems'
3
+ require 'test/unit'
4
+
5
+ begin
6
+ require 'multi_rails_init'
7
+ rescue LoadError
8
+ $stderr.puts "Please install multi_rails for regression testing!"
9
+ end
4
10
 
5
11
  begin
6
12
  require 'action_controller' unless defined?(ActionController)
@@ -85,41 +91,79 @@ class MarkdownIntegrationTest < Test::Unit::TestCase
85
91
  end
86
92
  end
87
93
 
88
- TEST_DATE = Date.parse("1983-10-15") # coincidentially...
94
+ TEST_DATE = Date.parse("1983-10-15") # coincidentially...
89
95
  TEST_TIME = Time.local(1983, 10, 15, 12, 15) # also coincidentially...
96
+
90
97
  # Перегрузка helper'ов Rails
91
98
  class RailsHelpersOverrideTest < Test::Unit::TestCase
92
- def test_distance_of_time_in_words
99
+ # Вспомогательный класс для тестирования перегруженного DateHelper
100
+ class HelperStub
101
+ # для тестирования to_datetime_select_tag
102
+ def date_field; TEST_TIME; end
103
+ end
104
+
105
+ def setup
93
106
  raise "You must have Rails to test ActionView integration" and return if $skip_rails
94
107
 
95
- eval 'class HelperTester
96
- include ActionView::Helpers::DateHelper
97
- def get_distance
98
- distance_of_time_in_words(Time.now - 20.minutes, Time.now)
99
- end
100
-
101
- def get_select_month
102
- select_month(TEST_DATE)
103
- end
104
-
105
- def get_date_select
106
- select_date(TEST_DATE)
107
- end
108
-
109
- def get_date_select_without_day
110
- select_date(TEST_DATE, :order => [:month, :year])
111
- end
112
-
113
- end'
114
-
115
108
  RuTils::overrides = true
116
- stub = HelperTester.new
117
- assert_equal "20 минут", stub.get_distance
118
- assert_match /июль/, stub.get_select_month, "Месяц в выборе месяца должен быть указан в именительном падеже"
119
- assert_match /декабря/, stub.get_date_select, "Имя месяца должно быть указано в родительном падеже"
120
- assert_match /декабря/, stub.get_date_select_without_day,
109
+ # А никто и не говорил что класс должен быть один :-)
110
+ k = Class.new(HelperStub)
111
+ [ActionView::Helpers::TagHelper, ActionView::Helpers::DateHelper].each{|m| k.send(:include, m)}
112
+ @stub = k.new
113
+ end
114
+
115
+ def test_distance_of_time_in_words
116
+ assert_equal "20 минут", @stub.distance_of_time_in_words(Time.now - 20.minutes, Time.now)
117
+ end
118
+
119
+ # TODO - TextMate это не хайлайтит, и это _крайне_ достает
120
+ def test_select_month
121
+ assert_match /июль/, @stub.select_month(TEST_DATE),
122
+ "Месяц в выборе месяца должен быть указан в именительном падеже"
123
+ assert_match />7\<\/option\>/, @stub.select_month(TEST_DATE, :use_month_numbers => true),
124
+ "Хелпер select_month с номером месяца вместо названия месяца"
125
+ assert_match /10\ \-\ октябрь/, @stub.select_month(TEST_DATE, :add_month_numbers => true),
126
+ "Хелпер select_month с номером и названием месяца"
127
+ assert_match /\>июн\<\/option\>/, @stub.select_month(TEST_DATE, :use_short_month => true),
128
+ "Короткое имя месяца при использовании опции :use_short_month"
129
+ assert_match /name\=\"date\[foobar\]\"/, @stub.select_month(TEST_DATE, :field_name => "foobar"),
130
+ "Хелпер select_month должен принимать опцию :field_name"
131
+ assert_match /type\=\"hidden\".+value\=\"10\"/m, @stub.select_month(TEST_DATE, :use_hidden => true),
132
+ "Хелпер select_month должен принимать опцию :use_hidden"
133
+ end
134
+
135
+ def test_select_date
136
+ assert_match /date\_day.+date\_month.+date\_year/m, @stub.select_date(TEST_DATE),
137
+ "Хелпер select_date должен выводить поля в следующем порядке: день, месяц, год"
138
+ assert_match /декабря/, @stub.select_date(TEST_DATE),
139
+ "Имя месяца должно быть указано в родительном падеже"
140
+ assert_match /декабря/, @stub.select_date(TEST_DATE, :order => [:month, :year]),
121
141
  "Хелпер select_date не позволяет опускать фрагменты, имя месяца должно быть указано в родительном падеже"
122
-
142
+ assert_match @stub.select_date, @stub.select_date(Time.now),
143
+ "Хелпер select_date без параметров работает с текущей датой"
144
+ end
145
+
146
+ def test_select_datetime
147
+ assert_match /date\_day.+date\_month.+date\_year/m, @stub.select_datetime(TEST_TIME),
148
+ "Хелпер select_datetime должен выводить поля в следующем порядке: день, месяц, год"
149
+ end
150
+
151
+ def test_html_options
152
+ if ActionView::Helpers::DateHelper::DATE_HELPERS_RECEIVE_HTML_OPTIONS
153
+ assert_match /id\=\"foobar\"/m, @stub.select_month(TEST_DATE, {}, :id => "foobar"),
154
+ "Хелпер select_month принимает html_options"
155
+
156
+ assert_match /id\=\"foobar\"/m, @stub.select_date(TEST_DATE, {}, :id => "foobar"),
157
+ "Хелпер select_date принимает html_options"
158
+ end
159
+ end
160
+
161
+ def test_instance_tag
162
+ @it = ActionView::Helpers::InstanceTag.new(:stub, :date_field, self).to_datetime_select_tag
163
+ assert_match /\>10\<.+\>октября\<.+\>1983\</m, @it,
164
+ "to_datetime_select_rag должен выводить поля в следующем порядке: день, месяц, год"
165
+ assert_match /июля/m, @it,
166
+ "to_datetime_select_tag выводит месяц в родительном падеже"
123
167
  end
124
168
  end
125
169
 
data/test/t_pluralize.rb CHANGED
@@ -39,6 +39,8 @@ class PropisjuTestCase < Test::Unit::TestCase
39
39
  assert_equal "триста сорок три рубля двадцать копеек", (343.20).rublej
40
40
  assert_equal "сорок две копейки", (0.4187).rublej
41
41
  assert_equal "триста тридцать два рубля", (331.995).rublej
42
+ assert_equal "один рубль", 1.rubl
43
+ assert_equal "три рубля четырнадцать копеек", (3.14).rublja
42
44
  end
43
45
  end
44
46
 
metadata CHANGED
@@ -1,86 +1,102 @@
1
1
  --- !ruby/object:Gem::Specification
2
- rubygems_version: 0.9.2
3
- specification_version: 1
4
2
  name: rutils
5
3
  version: !ruby/object:Gem::Version
6
- version: 0.2.3
7
- date: 2007-09-27 00:00:00 +02:00
8
- summary: Simple processing of russian strings
9
- require_paths:
10
- - lib
11
- email: me@julik.nl
12
- homepage: http://rubyforge.org/projects/rutils
13
- rubyforge_project: rutils
14
- description: Allows simple processing of russian strings - transliteration, numerals as text and HTML beautification
15
- autorequire: rutils
16
- default_executable:
17
- bindir: bin
18
- has_rdoc: true
19
- required_ruby_version: !ruby/object:Gem::Version::Requirement
20
- requirements:
21
- - - ">"
22
- - !ruby/object:Gem::Version
23
- version: 0.0.0
24
- version:
4
+ version: 0.2.4
25
5
  platform: ruby
26
- signing_key:
27
- cert_chain:
28
- post_install_message:
29
6
  authors:
30
- - Julian "Julik" Tarkhanov
7
+ - Julian 'Julik' Tarkhanov
8
+ - Danil Ivanov
9
+ - Yaroslav Markin
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2008-07-10 00:00:00 +04:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: hoe
19
+ type: :development
20
+ version_requirement:
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 1.7.0
26
+ version:
27
+ description: Simple processing of russian strings
28
+ email:
29
+ - me@julik.nl
30
+ - yaroslav@markin.net
31
+ executables:
32
+ - gilensize
33
+ - rutilize
34
+ extensions: []
35
+
36
+ extra_rdoc_files:
37
+ - History.txt
38
+ - Manifest.txt
39
+ - README.txt
40
+ - TODO.txt
31
41
  files:
42
+ - History.txt
43
+ - Manifest.txt
44
+ - README.txt
45
+ - Rakefile.rb
46
+ - TODO.txt
32
47
  - bin/gilensize
33
48
  - bin/rutilize
34
- - test/run_tests.rb
35
- - test/t_datetime.rb
36
- - test/t_gilenson.rb
37
- - test/t_integration.rb
38
- - test/t_pluralize.rb
39
- - test/t_rutils_base.rb
40
- - test/t_transliteration.rb
41
- - test/t_typografica.rb
42
- - lib/countries
49
+ - init.rb
43
50
  - lib/countries/countries.rb
44
- - lib/datetime
45
51
  - lib/datetime/datetime.rb
46
- - lib/gilenson
47
52
  - lib/gilenson/gilenson.rb
48
- - lib/gilenson/gilenson_port.rb
49
- - lib/integration
50
53
  - lib/integration/blue_cloth_override.rb
51
54
  - lib/integration/integration.rb
52
55
  - lib/integration/rails_date_helper_override.rb
53
56
  - lib/integration/red_cloth_override.rb
54
- - lib/pluralizer
55
57
  - lib/pluralizer/pluralizer.rb
56
58
  - lib/rutils.rb
57
- - lib/transliteration
58
59
  - lib/transliteration/bidi.rb
59
60
  - lib/transliteration/simple.rb
60
61
  - lib/transliteration/transliteration.rb
61
- - CHANGELOG
62
- - init.rb
63
- - Rakefile.rb
64
- - README
65
- - TODO
66
- test_files:
67
62
  - test/run_tests.rb
63
+ - test/t_datetime.rb
64
+ - test/t_gilenson.rb
65
+ - test/t_integration.rb
66
+ - test/t_pluralize.rb
67
+ - test/t_rutils_base.rb
68
+ - test/t_transliteration.rb
69
+ has_rdoc: true
70
+ homepage: http://rutils.rubyforge.org
71
+ post_install_message:
68
72
  rdoc_options:
69
- - --main=README
70
- - --line-numbers
71
- - --webcvs=http://rubyforge.org/cgi-bin/viewcvs.cgi/rutils/%s?cvsroot=rutils
72
- - --charset=utf-8
73
- - --promiscuous
74
- extra_rdoc_files:
75
- - README
76
- - TODO
77
- - CHANGELOG
78
- executables:
79
- - gilensize
80
- - rutilize
81
- extensions: []
82
-
73
+ - --main
74
+ - README.txt
75
+ require_paths:
76
+ - lib
77
+ required_ruby_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ version:
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
88
+ version:
83
89
  requirements: []
84
90
 
85
- dependencies: []
86
-
91
+ rubyforge_project: rutils
92
+ rubygems_version: 1.2.0
93
+ signing_key:
94
+ specification_version: 2
95
+ summary: Simple processing of russian strings
96
+ test_files:
97
+ - test/t_datetime.rb
98
+ - test/t_gilenson.rb
99
+ - test/t_integration.rb
100
+ - test/t_pluralize.rb
101
+ - test/t_rutils_base.rb
102
+ - test/t_transliteration.rb
data/README DELETED
@@ -1,192 +0,0 @@
1
- == Добро пожаловать в RuTils
2
-
3
- RuTils - простой обработчик русского текста на Ruby. Основная цель RuTils - сделать
4
- разработку русскоязычных приложений на Ruby (и Rails) максимально простой и приятной (в идеале - столь же
5
- простой как и разработку оных на английском)
6
-
7
- Весь функционал RuTils поддерживает только UTF-8 (настройка $KCODE / KanjiCode 'u'). Стандартно работа RuTils проверяется
8
- как на стандартной версии Ruby, так и на парсере регулярных выражений Oniguruma (правда имейте в виду, что с ним
9
- Gilenson работает медленнее).
10
-
11
- Пожалуйста упоминайте версию при сообщении ошибок. Версию RUTILS всегда можно узнать в константе
12
-
13
- RuTils::VERSION
14
-
15
- Удостоверьтесь, что ваш скрипт правильно обрабатывает Unicode - то есть:
16
-
17
- * Переменная $KCODE включена в режим 'u'
18
- * Все строки которые вы собираетесь обрабатывать уже в кодировке UTF-8
19
-
20
- Если вы используете RuTils для сайта под mod_ruby воспользуйтесь директивой RubyKanjiCode в своем httpd.conf.
21
-
22
- Большое спасибо Роману Иванову aka Kukutz и Николаю Яремко aka Kuso Mendokuzee за реализацию большинства алгоритмов
23
- на PHP.
24
-
25
- Разработку RuTils ведут Julik[http://live.julik.nl] и Mash[http://imfo.ru]
26
-
27
- == Cумма прописью и выбор числительного
28
-
29
- RuTils реализует сумму прописью для целых и дробных чисел, с дополнительным учетом рода. Например:
30
-
31
- 4.propisju => "четыре"
32
- 345.propisju => "триста сорок пять"
33
- 231.propisju(2) => "двести тридцать одна"
34
- 341.propisju_items(1, "чемодан", "чемодана", "чемоданов") => "триста сорок один чемодан"
35
- (212.40).propisju_items(2, "сволочь", "сволочи", "сволочей") => "двести двенадцать целых четыре десятых сволочи"
36
-
37
- Также реализуется выбор варианта числительного в зависимости от числа
38
-
39
- 15.items("кодер", "кодера", "кодеров") => "кодеров"
40
-
41
- и вывод "суммы прописью" для денежных сумм
42
-
43
- (413.2).rublej => "четыреста тринадцать рублей двадцать копеек"
44
-
45
- == Транслит
46
-
47
- RuTils на данный момент реализует простейший транслит "в одну сторону" и "взаимно-однозначный транслит" (BiDi-транслит).
48
-
49
- Простейший транслит "в одну сторону".
50
-
51
- "Вот такое вот дело".translify => "Vot takoye vot delo"
52
- "Несомненный прогресс по сравнению с PHP".dirify => "nesomnennyi-progress-po-sravneniu-s-php"
53
-
54
- == BiDi-транслит
55
-
56
- Порт BiDiTranslit[http://pixel-apes.com/translit/article#h256-10] от Pixel Apes.
57
- Реализует транслитерацию "в обе стороны", предоставляя возможность получить валидный URL
58
- из строки, содержащей русские и английские буквы. С некоторыми потерями (запятых и прочих
59
- "слабозначащих" символов) возможно восстановление исходной строки.
60
-
61
- Два режима работы:
62
-
63
- * Уничтожение всех слешей, которые встретятся во входной строке. В этом случае методы вызываются с передачей в них false. Например, "Web/Скрипты".bidi_translify(false)
64
- * Пропуск слэшей (используется по умолчанию). Например, "Web/+Skripty".bidi_detranslify
65
-
66
- "WebРазработка/Скрипты".bidi_translify => "Web+Razrabotka+/+Skripty"
67
- "+Ustanovka__+mod_perl".bidi_detranslify => "Установка mod_perl"
68
- "WebРазработка/Мимо".bidi_translify(false) => "Web+RazrabotkaMimo"
69
- "+PKHP+/Scripts".bidi_detranslify(false) => "ПХПScripts"
70
-
71
- == Обработка русской типографики в HTML
72
-
73
- Gilenson - порт Typografica[http://pixel-apes.com/typografica] от
74
- Pixel Apes. Тыпографица - механизм автоматической расстановки подстановок в тексте
75
- перед его выводом в HTML, оформляющий неразрывные пробелы, типографские кавычки
76
- и тому подобные "украшательства".
77
-
78
- Gilenson расставит в тексте "умные" правильные кавычки (русские - для кириллицы, английские - для латиницы),
79
- заменит "хитрые" пунктуационные символы на entities и отформатирует знаки типа (c), (tm), телефоны и адреса.
80
-
81
- %q{"И это называется языком?", -- таков был его вопрос}.gilensize =>
82
- "&#171;И это&#160;называется языком?&#187;, &#8212; таков был&#160;его вопрос"
83
-
84
- Более подробная документация по Gilenson доступна в документах к RuTils::Gilenson::Formatter
85
-
86
- В комплекте также есть скрипт gilensize, которым можно поточно обрабатывать Unicode-тексты в среде UNIX
87
- пользуясь стандартным выводом
88
-
89
- $ cat myfile.txt | gilensize > myfile.html
90
-
91
- == Даты
92
-
93
- В класс Date введены следующие константы:
94
- * RU_MONTHNAMES (Январь Февраль Март...)
95
- * RU_DAYNAMES (Воскресенье Понедельник...)
96
- * RU_ABBR_MONTHNAMES (Янв Фев Мар...)
97
- * RU_ABBR_DAYNAMES (Вск Пн Вт Ср...)
98
- * RU_INFLECTED_MONTHNAMES (Января Февраля Марта...)
99
- * RU_DAYNAMES_E (первое второе третье...)
100
-
101
- Пример использования:
102
-
103
- require 'date'
104
- date = Date.new(2005, 11, 9)
105
- puts "#{Date::RU_ABBR_MONTHNAMES[date.mon]}" => Ноя
106
- puts "#{Date::RU_MONTHNAMES[date.mon]}" => Ноябрь
107
- puts "#{Date::RU_ABBR_DAYNAMES[date.wday]}" => Ср
108
- puts "#{Date::RU_DAYNAMES[date.wday]}" => Среда
109
-
110
- При включенной перезагрузке функций (RuTils::overrides_enabled) осуществляется "покрытие" стандартной
111
- функции Time#strftime ("родную" #strftime можно продолжать использовать через alias-метод #strftime_norutils):
112
-
113
- Time.local(2005,"dec",31).strftime("%a, %A, %b, %B") => "Сб, Суббота, Дек, Декабрь"
114
- Time.local(2005,"dec",31).strftime_norutils("%a, %A, %b, %B") => "Sat, Saturday, Dec, December"
115
-
116
- == Интеграция с Rails, RedCloth и BlueCloth
117
-
118
- RuTils в первую очередь задумывался как максимально "прозрачный" механизм обработки русского текста
119
- в контексте Rails-приложения. В связи с этим RuTils "вторгается" в работу других Ruby-модулей
120
- и изменяет механизм их работы.
121
-
122
- Если вы используете RuTils в одном приложении с RedCloth или BlueCloth,
123
- RuTils автоматически будет обрабатывать типографику во всех текстах, пропускаемых через них. Имейте в виду, что для
124
- корректной работы этой функции RuTils надо загружать *после* модулей RedCloth и BlueCloth.
125
-
126
- Помимо этого RuTils заставляет следующие функции Rails говорить по-русски:
127
-
128
- * Меню выбора даты (+date_select+ и +datetime_select+) будут выводиться с русскими именами месяцев
129
- * +distance_of_time_in_words+ будет выводить русские описания длительности ("более 2 часов")
130
-
131
- Перегрузку всех функций других модулей можно включать и отключать в любое время
132
- с помощью метода RuTils::overrides=. Когда перегрузка выключена, все сторонние библиотеки будут работать
133
- в стандартном режиме (например, RedCloth будет расставлять английские типографские кавычки). Это нужно
134
- когда вам нужно переключиться на английский (или любой другой язык) без перезапуска приложения.
135
-
136
- Если вы хотите использовать rutils как дополнение к Rails в одном конкретном приложении, скопируйте
137
- директорию rutils в папку vendor/plugins вашего приложения. Вы можете воспользоваться командой
138
- rutilize чтобы сделать это автоматически. После этого вы сможете использовать RuTils без
139
- необходимости установки gem'а на вашем сервере (не забудьте перезапустить приложение чтобы вгрузить в него RuTils).
140
-
141
- $ rutilize /Sites/my_app1 /Sites/my_app2 /Sites/my_another_app
142
-
143
- Вы можете свободно распространять RuTils со своим Rails-приложением при условии сохранения структуры
144
- и файла README.
145
-
146
- == Требования
147
-
148
- * Ruby 1.8.2, немного прямых рук.
149
- * Rake[http://rake.rubyforge.org], Rails[http://rubyonrails.org], RedCloth[http://www.whytheluckystiff.net/ruby/redcloth/] и BlueCloth[http://www.deveiate.org/projects/BlueCloth] для выполнения тестов
150
-
151
- == Как использовать
152
-
153
- Просто включите rutils в свою программу как gem
154
-
155
- require_gem 'rutils'
156
-
157
- или как библиотеку
158
-
159
- require 'rutils'
160
-
161
- == Где получить помощь
162
-
163
- На странице проекта на RubyForge[http://rubyforge.org/projects/rutils]
164
-
165
- == Работает ли это с текстом в кодировке Windows-1251
166
-
167
- Нет и никогда не будет.
168
-
169
- == Реальные проекты
170
-
171
- В настоящее время RuTils используется на следующих сайтах:
172
-
173
- * http://artonica.ru
174
- * http://radar.cinemac.ru
175
-
176
- Если вы используете RuTils в своей работе пожалуйста сообщайте нам об этом чтобы мы могли включить ваши приложения и сайты в список.
177
-
178
- == Как ускорить реализацию новых функций
179
-
180
- Воспользуйтесь трекером на RubyForge. Опишите нужный вам функционал и приложите (по возможности) тесты, которым этот функционал должен удовлетворять. Схему организации тестов вы можете скопировать из собственных тестов RuTils.
181
-
182
- Если вы пишете исходный код, который войдет в RuTils или в тестовые наборы, пожалуйста следуйте следующим правилам оформления кода:
183
-
184
- * Unix line breaks (LF)
185
- * Кодировка файлов - строго UTF-8 без BOM (Byte Order Mark)
186
- * Отступы в 2 пробела, без табуляций.
187
- * Однострочные блоки с фигурными скобками, многострочные - с +do ... end+
188
- * Все другие конвенции нормального написания Ruby-кода (http://www.rubygarden.org/ruby/ruby?RubyStyleGuide)
189
-
190
- Мы используем пробелы поскольку табулятор означает автозаполнение в IRB (Interactive Ruby Shell)
191
-
192
- Если вы хотите участвовать в разработке RuTils пользуйтесь CVS проекта.