rutils 1.0.3 → 1.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|