rutils 1.0.3 → 1.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/History.txt +8 -0
- data/Manifest.txt +1 -4
- data/README.txt +0 -4
- data/Rakefile.rb +1 -0
- data/TODO.txt +1 -4
- data/init.rb +4 -4
- data/lib/gilenson/gilenson_stub.rb +21 -0
- data/lib/integration/rails_date_helper_override.rb +15 -26
- data/lib/pluralizer/pluralizer.rb +27 -0
- data/lib/rutils.rb +6 -2
- data/lib/transliteration/bidi.rb +1 -1
- data/lib/transliteration/transliteration.rb +28 -2
- data/lib/version.rb +1 -1
- data/test/extras/integration_rails_filter.rb +8 -1
- data/test/extras/integration_rails_gilenson_helpers.rb +13 -7
- data/test/extras/integration_rails_helpers.rb +37 -9
- data/test/extras/integration_rdiscount.rb +0 -1
- data/test/test_pluralize.rb +9 -0
- metadata +59 -17
- data/WHAT_HAS_CHANGED.txt +0 -44
- data/bin/gilensize +0 -22
- data/lib/gilenson/gilenson.rb +0 -665
- data/test/test_gilenson.rb +0 -396
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 1.1.1 - 15.10.2010
|
2
|
+
|
3
|
+
* rutils довольно-таки старая штука. Для тех кто пользуется Gilenson мы теперь сервируем его отдельно и используем его из rutils. В связи с этим
|
4
|
+
gilensize удален а все детали rutils использующие форматирование теперь автоматом будут использовать новый гем. Если вы правильно ставите
|
5
|
+
приложение то при выкатке недостающий гем поставится автоматом поскольку gilenson теперь зависимость для rutils.
|
6
|
+
* включены патчи от многочисленных доброжелателей и злопыхателей
|
7
|
+
* гем по-прежнему совместим со старыми рельсами
|
8
|
+
|
1
9
|
=== 1.0.3 - 09.02.2009
|
2
10
|
|
3
11
|
* Предотвращена загрузка date helper overridesв при установленном russian gem
|
data/Manifest.txt
CHANGED
@@ -3,14 +3,12 @@ Manifest.txt
|
|
3
3
|
README.txt
|
4
4
|
Rakefile.rb
|
5
5
|
TODO.txt
|
6
|
-
WHAT_HAS_CHANGED.txt
|
7
|
-
bin/gilensize
|
8
6
|
bin/rutilize
|
9
7
|
init.rb
|
10
8
|
lib/countries/countries.rb
|
11
9
|
lib/datetime/datetime.rb
|
12
10
|
lib/gilenson/bluecloth_extra.rb
|
13
|
-
lib/gilenson/
|
11
|
+
lib/gilenson/gilenson_stub.rb
|
14
12
|
lib/gilenson/helper.rb
|
15
13
|
lib/gilenson/maruku_extra.rb
|
16
14
|
lib/gilenson/rdiscount_extra.rb
|
@@ -34,7 +32,6 @@ test/extras/integration_redcloth3.rb
|
|
34
32
|
test/extras/integration_redcloth4.rb
|
35
33
|
test/run_tests.rb
|
36
34
|
test/test_datetime.rb
|
37
|
-
test/test_gilenson.rb
|
38
35
|
test/test_integration.rb
|
39
36
|
test/test_integration_flag.rb
|
40
37
|
test/test_pluralize.rb
|
data/README.txt
CHANGED
@@ -6,10 +6,6 @@ RuTils - простой обработчик русского текста на
|
|
6
6
|
Основная цель RuTils - сделать разработку русскоязычных приложений на Ruby (и Rails) максимально простой
|
7
7
|
и приятной (в идеале - столь же простой как и разработку оных на английском).
|
8
8
|
|
9
|
-
== Шеф! все пропало! я обновил RuTils и он работает совершенно по-другому!
|
10
|
-
|
11
|
-
Раздел также известен под именем "Что поменялось в RuTils 1.0.0". Вам {сюда.}[link:files/WHAT_HAS_CHANGED_txt.html]
|
12
|
-
|
13
9
|
== Чье это
|
14
10
|
|
15
11
|
Разработчики RuTils - {Julik}[http://julik.nl], {Mash}[http://imfo.ru], {Yaroslav Markin}[http://markin.net/]
|
data/Rakefile.rb
CHANGED
@@ -26,6 +26,7 @@ begin
|
|
26
26
|
p.email = ['me@julik.nl', 'yaroslav@markin.net']
|
27
27
|
p.description = 'Simple processing of russian strings'
|
28
28
|
p.summary = 'Simple processing of russian strings'
|
29
|
+
p.extra_deps = {"gilenson" => ">=0"}
|
29
30
|
p.remote_rdoc_dir = ''
|
30
31
|
p.need_zip = true # ненвижу
|
31
32
|
end
|
data/TODO.txt
CHANGED
data/init.rb
CHANGED
@@ -17,11 +17,11 @@ def russan_gem_required?
|
|
17
17
|
false
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
STDERR.puts "RuTils: On this version of Rails use the `russian` gem for date helper overrides instead"
|
22
|
-
false
|
20
|
+
if russan_gem_required?
|
21
|
+
STDERR.puts "RuTils WARNING: On this version of Rails use the `russian` gem for date helper overrides instead"
|
23
22
|
else
|
24
|
-
|
23
|
+
require File.dirname(__FILE__) + '/lib/integration/rails_date_helper_override'
|
24
|
+
::ActionController::Base.send(:helper, RuTils::DateHelper)
|
25
25
|
end
|
26
26
|
|
27
27
|
# textilize и markdown
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "gilenson"
|
2
|
+
|
3
|
+
# -*- encoding: utf-8 -*-
|
4
|
+
module RuTils
|
5
|
+
module Gilenson
|
6
|
+
# Позволяет возвращать класс форматтера при вызове
|
7
|
+
# RuTils::Gilenson.new
|
8
|
+
def self.new(*args) #:nodoc:
|
9
|
+
::Gilenson.new(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
autoload :BlueClothExtra, File.dirname(__FILE__) + '/bluecloth_extra'
|
13
|
+
autoload :RedClothExtra, File.dirname(__FILE__) + '/redcloth_extra'
|
14
|
+
autoload :RDiscountExtra, File.dirname(__FILE__) + '/rdiscount_extra'
|
15
|
+
autoload :MarukuExtra, File.dirname(__FILE__) + '/maruku_extra'
|
16
|
+
autoload :Helper, File.dirname(__FILE__) + '/helper'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# Этот класс теперь живет в геме gilenson.
|
21
|
+
RuTils::Gilenson::Formatter = ::Gilenson
|
@@ -1,12 +1,11 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
module
|
3
|
-
# Несколько
|
4
|
-
|
2
|
+
module RuTils::DateHelper
|
3
|
+
# Несколько вторжений :-) для корректной работы модуля с Rails 1.2--2.0 одновременно с Rails 2.1 и выше.
|
5
4
|
# Хелперы DateHelper принимают параметр <tt>html_options</tt> (идет последним) начиная с Rails 2.1.
|
6
5
|
# Нужно понять, имеем ли мы дело с Rails 2.1+, для этого проверяем наличие классметода helper_modules у
|
7
6
|
# ActionView::Base, который появился как раз в версии 2.1.
|
8
7
|
DATE_HELPERS_RECEIVE_HTML_OPTIONS = ActionView::Base.respond_to?(:helper_modules) #:nodoc:
|
9
|
-
|
8
|
+
|
10
9
|
# В Rails Edge (2.1+) определяется <tt>Time.current</tt> для работы с временными зонами.
|
11
10
|
unless Time.respond_to? :current
|
12
11
|
class << ::Time # :nodoc:
|
@@ -25,17 +24,20 @@ module Object::ActionView::Helpers::DateHelper
|
|
25
24
|
#
|
26
25
|
# Целые числа интерпретируются как секунды.
|
27
26
|
# <tt>distance_of_time_in_words(50)</tt> возвращает "меньше минуты".
|
28
|
-
alias :stock_distance_of_time_in_words :distance_of_time_in_words
|
29
27
|
def distance_of_time_in_words(*args)
|
30
|
-
RuTils::overrides_enabled? ? RuTils::DateTime::distance_of_time_in_words(*args) :
|
28
|
+
RuTils::overrides_enabled? ? RuTils::DateTime::distance_of_time_in_words(*args) : super
|
31
29
|
end
|
32
|
-
|
30
|
+
|
33
31
|
# Заменяет ActionView::Helpers::DateHelper::select_month меню выбора русских месяцев.
|
34
32
|
#
|
35
33
|
# select_month(Date.today) # Использует ключи "Январь", "Март"
|
36
34
|
# select_month(Date.today, :use_month_numbers => true) # Использует ключи "1", "3"
|
37
35
|
# select_month(Date.today, :add_month_numbers => true) # Использует ключи "1 - Январь", "3 - Март"
|
38
36
|
def select_month(date, options = {}, html_options = {})
|
37
|
+
|
38
|
+
# Выпрыгиваем пораньше на всякий случай
|
39
|
+
return super unless RuTils::overrides_enabled?
|
40
|
+
|
39
41
|
locale = options[:locale] unless RuTils::overrides_enabled?
|
40
42
|
|
41
43
|
val = date ? (date.kind_of?(Fixnum) ? date : date.month) : ''
|
@@ -97,31 +99,18 @@ module Object::ActionView::Helpers::DateHelper
|
|
97
99
|
end
|
98
100
|
end
|
99
101
|
|
100
|
-
alias :stock_select_date :select_date
|
101
102
|
# Заменяет ActionView::Helpers::DateHelper::select_date меню выбора русской даты.
|
102
103
|
def select_date(date = Date.current, options = {}, html_options = {})
|
103
104
|
options[:order] ||= [:day, :month, :year]
|
104
105
|
if DATE_HELPERS_RECEIVE_HTML_OPTIONS
|
105
|
-
|
106
|
+
super(date, options, html_options)
|
106
107
|
else
|
107
|
-
|
108
|
+
super(date, options)
|
108
109
|
end
|
109
110
|
end
|
111
|
+
|
110
112
|
end
|
111
113
|
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
private
|
116
|
-
alias :stock_date_or_time_select :date_or_time_select
|
117
|
-
def date_or_time_select(options, html_options = {})
|
118
|
-
options[:order] ||= [:day, :month, :year]
|
119
|
-
if DATE_HELPERS_RECEIVE_HTML_OPTIONS
|
120
|
-
stock_date_or_time_select(options, html_options)
|
121
|
-
else
|
122
|
-
stock_date_or_time_select(options)
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
114
|
+
if defined?(Object::ActionView::Helpers::InstanceTag)
|
115
|
+
Object::ActionView::Helpers::InstanceTag.send(:include, RuTils::DateHelper) # kaboom! наш хелпер загружен ПОСЛЕ стандартного а следовательно имеет приоритет
|
116
|
+
end
|
@@ -24,6 +24,23 @@ module RuTils
|
|
24
24
|
pts.join(' ')
|
25
25
|
end
|
26
26
|
|
27
|
+
# Выводит целое или дробное число как сумму в гривнах прописью
|
28
|
+
def self.griven(amount)
|
29
|
+
pts = []
|
30
|
+
|
31
|
+
pts << RuTils::Pluralization::sum_string(amount.to_i, 2, "гривна", "гривны", "гривен") unless amount.to_i == 0
|
32
|
+
if amount.kind_of?(Float)
|
33
|
+
remainder = (amount.divmod(1)[1]*100).round
|
34
|
+
if (remainder == 100)
|
35
|
+
pts = [RuTils::Pluralization::sum_string(amount.to_i+1, 2, 'гривна', 'гривны', 'гривен')]
|
36
|
+
else
|
37
|
+
pts << RuTils::Pluralization::sum_string(remainder.to_i, 2, 'копейка', 'копейки', 'копеек')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
pts.join(' ')
|
42
|
+
end
|
43
|
+
|
27
44
|
def self.kopeek(amount)
|
28
45
|
pts = []
|
29
46
|
r, k = (amount/100.0).floor, (amount - ((amount/100.0).floor * 100)).to_i
|
@@ -236,6 +253,16 @@ module RuTils
|
|
236
253
|
end
|
237
254
|
alias :rubl :rublej
|
238
255
|
alias :rublja :rublej
|
256
|
+
|
257
|
+
# Выводит сумму в гривнах прописью. Например:
|
258
|
+
# * (15.4).griven => "пятнадцать гривен сорок копеек"
|
259
|
+
# * 1.grivna => "одна гривна"
|
260
|
+
# * (3.14).grivny => "три гривны четырнадцать копеек"
|
261
|
+
def griven
|
262
|
+
RuTils::Pluralization::griven(self)
|
263
|
+
end
|
264
|
+
alias :grivna :griven
|
265
|
+
alias :grivny :griven
|
239
266
|
end
|
240
267
|
|
241
268
|
module FixnumFormatting
|
data/lib/rutils.rb
CHANGED
@@ -49,10 +49,14 @@ module RuTils
|
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
|
-
[:pluralizer, :
|
52
|
+
[:pluralizer, :datetime, :transliteration, :countries].each do | submodule |
|
53
53
|
require File.join(RuTils::INSTALLATION_DIRECTORY, "lib", submodule.to_s, submodule.to_s)
|
54
54
|
end
|
55
55
|
|
56
|
-
|
56
|
+
# Заглушка для подключения типографа (он теперь в отдельном геме)
|
57
|
+
require File.join(RuTils::INSTALLATION_DIRECTORY, "lib/gilenson/gilenson_stub")
|
58
|
+
|
59
|
+
# Оверлоады грузим только если константа не установлена в false
|
60
|
+
unless defined?(::RuTils::RUTILS_USE_DATE_HELPERS) && !::RuTils::RUTILS_USE_DATE_HELPERS
|
57
61
|
require File.join(RuTils::INSTALLATION_DIRECTORY, "lib", "integration", "integration")
|
58
62
|
end
|
data/lib/transliteration/bidi.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
# ++DEPRECATED++ Этот модуль удален и присутствует только для выдачи сообщения об ошибке.
|
3
3
|
module RuTils::Transliteration::BiDi
|
4
|
-
ERR = "Equivalent bidirectional transliteration for URLs is
|
4
|
+
ERR = "Equivalent bidirectional transliteration for URLs is malpractice. BiDi translit has been removed from RuTils"
|
5
5
|
|
6
6
|
extend self
|
7
7
|
|
@@ -8,8 +8,34 @@ require File.join(File.dirname(__FILE__), 'simple')
|
|
8
8
|
|
9
9
|
# Заглушка
|
10
10
|
require File.join(File.dirname(__FILE__), 'bidi')
|
11
|
-
|
12
|
-
|
11
|
+
|
12
|
+
=begin
|
13
|
+
Реализует транслитерацию любого объекта, реализующего String или to_s.
|
14
|
+
=== Почему удален BiDi-транслит?
|
15
|
+
|
16
|
+
В отличие от DHH авторы RuTils придерживаются стратегии синтактической серной кислоты вместо синтактического уксуса. Основная область
|
17
|
+
применения bidi-транслитераций - генерация "как-бы" более удобочитаемых URL. К сожалению, у нее есть ряд свойств которые делают ее
|
18
|
+
бессмысленной (кроме как в качестве упражнения по строковым итераторам Ruby). Приводим список аргументов почему вам не нужны
|
19
|
+
автоматические транслитерированные URL:
|
20
|
+
|
21
|
+
* Они будут работать только для набора символов "ASCII + русский". Любая попытка засунуть в ваш URL слово stød закончится печально.
|
22
|
+
* Они будут работать только для русского языка, кириллиц много. Транслитерация по определению языкозависима.
|
23
|
+
* Вашим пользователям придется непрерывно угадывать, пишется буква "я". "Ja"? "Ya"? "J"? Если вы хоть раз наблюдали иностранца, пытающегося
|
24
|
+
выговорить "ОВИРскую" транслитерацию вашей фамилии из загранпаспорта, вы знаете о чем мы говорим.
|
25
|
+
* Приличные браузеры не кодируют русский текст в адресной строке если Ваш вебсервер его принял. Если браузер неприличный то он позволяет этот текст ввести.
|
26
|
+
Если браузер совсем неприличный, то средство ввода у него - стилус размером с зубочистку, а пользуются им в трамвае. Вводить ваш транслит
|
27
|
+
в таких условиях все равно никто не будет, успокойтесь.
|
28
|
+
|
29
|
+
Приводить список аргументов "почему такой транслит вам нужен" мы не будем дабы никого не травмировать.
|
30
|
+
|
31
|
+
Если вам таки страшно неймется реализовать транслит в URL, рекомендуем следующий подход:
|
32
|
+
|
33
|
+
* Для адресуемого обьекта сохраняется поле ++slug++
|
34
|
+
* При сохранении в это поле автоматически пишется "дирифицированное" название, но пользователь может его вручную отредактировать
|
35
|
+
* Дальнейшая адресация производится без "транслитерации обратно", по полю slug напрямую
|
36
|
+
|
37
|
+
Дополнительно рекомендуется запретить загрузку файлов с русскими именами (с помощью Javascript и свойства value элемента input).
|
38
|
+
=end
|
13
39
|
module RuTils::Transliteration::StringFormatting
|
14
40
|
|
15
41
|
# Транслитерирует строку в латиницу, и возвращает измененную строку
|
data/lib/version.rb
CHANGED
@@ -13,7 +13,14 @@ class RutiledController < ActionController::Base #:nodoc:
|
|
13
13
|
def rescue_action(e); raise e; end
|
14
14
|
end
|
15
15
|
|
16
|
-
|
16
|
+
# Перегрузка helper'ов Rails
|
17
|
+
rails_test_class = defined?(ActionController::TestCase) ? ActionController::TestCase : Test::Unit::TestCase
|
18
|
+
|
19
|
+
class RailsFilterTest < rails_test_class
|
20
|
+
|
21
|
+
if respond_to?(:tests) # Еще одно изобретение чтобы как можно больше вещей были несовместимы от рельсов к рельсам
|
22
|
+
tests RutiledController
|
23
|
+
end
|
17
24
|
|
18
25
|
def setup
|
19
26
|
@controller = RutiledController.new
|
@@ -7,7 +7,9 @@ require 'action_controller/test_process'
|
|
7
7
|
require File.dirname(__FILE__) + '/../../init.rb'
|
8
8
|
|
9
9
|
# Перегрузка helper'ов Rails
|
10
|
-
|
10
|
+
rails_test_class = defined?(ActionController::TestCase) ? ActionController::TestCase : Test::Unit::TestCase
|
11
|
+
|
12
|
+
class RailsGilensonHelpersTest < rails_test_class
|
11
13
|
|
12
14
|
class Kontroller < ActionController::Base
|
13
15
|
def action_with_gilensize
|
@@ -41,6 +43,10 @@ class RailsGilensonHelpersTest < Test::Unit::TestCase
|
|
41
43
|
end
|
42
44
|
end
|
43
45
|
|
46
|
+
if respond_to?(:tests) # Еще одно изобретение чтобы как можно больше вещей были несовместимы от рельсов к рельсам
|
47
|
+
tests Kontroller
|
48
|
+
end
|
49
|
+
|
44
50
|
def setup
|
45
51
|
@request = ActionController::TestRequest.new
|
46
52
|
@response = ActionController::TestResponse.new
|
@@ -49,32 +55,32 @@ class RailsGilensonHelpersTest < Test::Unit::TestCase
|
|
49
55
|
|
50
56
|
def test_action_with_gilensize
|
51
57
|
get :action_with_gilensize
|
52
|
-
assert_equal 'Они пришли — туда — к А.П. Чехову', @response.body
|
58
|
+
assert_equal 'Они пришли — туда — к А.П. Чехову', @response.body.strip
|
53
59
|
end
|
54
60
|
|
55
61
|
def test_action_with_gilensize_and_options
|
56
62
|
get :action_with_gilensize_and_options
|
57
|
-
assert_equal "Они пришли — туда — к А.П. Чехову", @response.body
|
63
|
+
assert_equal "Они пришли — туда — к А.П. Чехову", @response.body.strip
|
58
64
|
end
|
59
65
|
|
60
66
|
def test_action_with_textilize
|
61
67
|
get :action_with_textilize
|
62
|
-
assert_equal "<p>Они пришли — туда — к А.П. Чехову</p>", @response.body
|
68
|
+
assert_equal "<p>Они пришли — туда — к А.П. Чехову</p>", @response.body.strip
|
63
69
|
end
|
64
70
|
|
65
71
|
def test_action_with_textilize_without_overrides
|
66
72
|
get :action_with_textilize_without_overrides
|
67
|
-
assert_equal "<p>Они пришли — туда — к А. П. Чехову</p>", @response.body, "Initials should not be formatted"
|
73
|
+
assert_equal "<p>Они пришли — туда — к А. П. Чехову</p>", @response.body.strip, "Initials should not be formatted"
|
68
74
|
end
|
69
75
|
|
70
76
|
def test_action_with_markdown
|
71
77
|
get :action_with_markdown
|
72
|
-
assert_equal "<p>Они пришли — туда — к А.П. Чехову</p>", @response.body
|
78
|
+
assert_equal "<p>Они пришли — туда — к А.П. Чехову</p>", @response.body.strip
|
73
79
|
end
|
74
80
|
|
75
81
|
def test_action_with_markdown_without_overrides
|
76
82
|
get :action_with_markdown_without_overrides
|
77
|
-
assert_equal "<p>Они пришли -- туда -- к А. П. Чехову</p>", @response.body
|
83
|
+
assert_equal "<p>Они пришли -- туда -- к А. П. Чехову</p>", @response.body.strip
|
78
84
|
end
|
79
85
|
|
80
86
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
|
3
|
+
require "ostruct"
|
3
4
|
require 'action_controller'
|
4
5
|
require 'action_view'
|
5
|
-
|
6
6
|
require 'action_controller/test_process'
|
7
7
|
require File.dirname(__FILE__) + '/../../init.rb'
|
8
8
|
require 'action_pack/version'
|
@@ -11,8 +11,12 @@ ma, mi, ti = ActionPack::VERSION::MAJOR, ActionPack::VERSION::MINOR, ActionPack:
|
|
11
11
|
|
12
12
|
raise LoadError, "RuTils is not 2.2.2 compat" if (ma >= 2 && mi >= 2 && ti >= 1)
|
13
13
|
|
14
|
+
|
15
|
+
ActionController::Routing::Routes.draw { |map| map.connect ':controller/:action/:id' }
|
16
|
+
rails_test_class = defined?(ActionController::TestCase) ? ActionController::TestCase : Test::Unit::TestCase
|
17
|
+
|
14
18
|
# Перегрузка helper'ов Rails
|
15
|
-
class
|
19
|
+
class RailsDateHelperTest < Test::Unit::TestCase
|
16
20
|
TEST_DATE = Date.parse("1983-10-15") # coincidentially...
|
17
21
|
TEST_TIME = Time.local(1983, 10, 15, 12, 15) # also coincidentially...
|
18
22
|
|
@@ -26,15 +30,18 @@ class RailsHelpersOverrideTest < Test::Unit::TestCase
|
|
26
30
|
RuTils::overrides = true
|
27
31
|
# А никто и не говорил что класс должен быть один :-)
|
28
32
|
k = Class.new(HelperStub)
|
29
|
-
[ActionView::Helpers::TagHelper, ActionView::Helpers::DateHelper].each{|m| k.send(:include, m)}
|
33
|
+
[ActionView::Helpers::TagHelper, ActionView::Helpers::DateHelper, RuTils::DateHelper].each{|m| k.send(:include, m)}
|
30
34
|
@stub = k.new
|
31
35
|
end
|
32
36
|
|
33
37
|
def test_distance_of_time_in_words
|
38
|
+
RuTils::overrides = true
|
34
39
|
assert_equal "20 минут", @stub.distance_of_time_in_words(Time.now - 20.minutes, Time.now)
|
35
40
|
end
|
36
41
|
|
37
42
|
def test_select_month
|
43
|
+
RuTils::overrides = true
|
44
|
+
|
38
45
|
assert_match /июль/, @stub.select_month(TEST_DATE),
|
39
46
|
"Месяц в выборе месяца должен быть указан в именительном падеже"
|
40
47
|
assert_match />7\<\/option\>/, @stub.select_month(TEST_DATE, :use_month_numbers => true),
|
@@ -74,12 +81,33 @@ class RailsHelpersOverrideTest < Test::Unit::TestCase
|
|
74
81
|
"Хелпер select_date принимает html_options"
|
75
82
|
end
|
76
83
|
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class DateHelperWithControllerTest < rails_test_class
|
87
|
+
TEST_DATE = Date.parse("1983-10-15") # coincidentially...
|
88
|
+
|
89
|
+
class DatifiedController < ActionController::Base #:nodoc:
|
90
|
+
def schmoo
|
91
|
+
@widget = OpenStruct.new(:birthday => TEST_DATE)
|
92
|
+
render :inline => '<%= date_select(:widget, :birthday) %>'
|
93
|
+
end
|
94
|
+
def rescue_action(e); raise e; end
|
95
|
+
end
|
96
|
+
|
97
|
+
if respond_to?(:tests) # Еще одно изобретение чтобы как можно больше вещей были несовместимы от рельсов к рельсам
|
98
|
+
tests DatifiedController
|
99
|
+
end
|
77
100
|
|
78
|
-
def
|
79
|
-
@
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
101
|
+
def setup
|
102
|
+
@controller = DatifiedController.new
|
103
|
+
@request = ActionController::TestRequest.new
|
104
|
+
@response = ActionController::TestResponse.new
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_select_month
|
108
|
+
RuTils::overrides = true
|
109
|
+
|
110
|
+
get :schmoo
|
111
|
+
assert_match /июля/, @response.body
|
84
112
|
end
|
85
113
|
end
|