padrino-helpers-cj 0.12.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.gitignore +21 -0
- data/.yardopts +1 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +239 -0
- data/Rakefile +5 -0
- data/lib/padrino-helpers.rb +62 -0
- data/lib/padrino-helpers/asset_tag_helpers.rb +390 -0
- data/lib/padrino-helpers/form_builder/abstract_form_builder.rb +283 -0
- data/lib/padrino-helpers/form_builder/deprecated_builder_methods.rb +92 -0
- data/lib/padrino-helpers/form_builder/standard_form_builder.rb +40 -0
- data/lib/padrino-helpers/form_helpers.rb +633 -0
- data/lib/padrino-helpers/form_helpers/errors.rb +138 -0
- data/lib/padrino-helpers/form_helpers/options.rb +97 -0
- data/lib/padrino-helpers/form_helpers/security.rb +70 -0
- data/lib/padrino-helpers/format_helpers.rb +372 -0
- data/lib/padrino-helpers/locale/cs.yml +103 -0
- data/lib/padrino-helpers/locale/da.yml +91 -0
- data/lib/padrino-helpers/locale/de.yml +81 -0
- data/lib/padrino-helpers/locale/en.yml +103 -0
- data/lib/padrino-helpers/locale/es.yml +103 -0
- data/lib/padrino-helpers/locale/fr.yml +79 -0
- data/lib/padrino-helpers/locale/hu.yml +103 -0
- data/lib/padrino-helpers/locale/it.yml +89 -0
- data/lib/padrino-helpers/locale/ja.yml +103 -0
- data/lib/padrino-helpers/locale/lv.yml +103 -0
- data/lib/padrino-helpers/locale/nl.yml +82 -0
- data/lib/padrino-helpers/locale/no.yml +91 -0
- data/lib/padrino-helpers/locale/pl.yml +95 -0
- data/lib/padrino-helpers/locale/pt_br.yml +103 -0
- data/lib/padrino-helpers/locale/ro.yml +103 -0
- data/lib/padrino-helpers/locale/ru.yml +103 -0
- data/lib/padrino-helpers/locale/sv.yml +103 -0
- data/lib/padrino-helpers/locale/tr.yml +103 -0
- data/lib/padrino-helpers/locale/uk.yml +103 -0
- data/lib/padrino-helpers/locale/zh_cn.yml +103 -0
- data/lib/padrino-helpers/locale/zh_tw.yml +103 -0
- data/lib/padrino-helpers/number_helpers.rb +283 -0
- data/lib/padrino-helpers/output_helpers.rb +226 -0
- data/lib/padrino-helpers/output_helpers/abstract_handler.rb +61 -0
- data/lib/padrino-helpers/output_helpers/erb_handler.rb +27 -0
- data/lib/padrino-helpers/output_helpers/haml_handler.rb +25 -0
- data/lib/padrino-helpers/output_helpers/slim_handler.rb +18 -0
- data/lib/padrino-helpers/render_helpers.rb +63 -0
- data/lib/padrino-helpers/tag_helpers.rb +294 -0
- data/lib/padrino-helpers/translation_helpers.rb +36 -0
- data/lib/padrino/rendering.rb +397 -0
- data/lib/padrino/rendering/erubis_template.rb +66 -0
- data/lib/padrino/rendering/haml_template.rb +26 -0
- data/lib/padrino/rendering/slim_template.rb +20 -0
- data/padrino-helpers.gemspec +29 -0
- data/test/fixtures/apps/.components +6 -0
- data/test/fixtures/apps/.gitignore +7 -0
- data/test/fixtures/apps/render.rb +25 -0
- data/test/fixtures/apps/views/article/comment/show.slim +1 -0
- data/test/fixtures/apps/views/blog/post.erb +1 -0
- data/test/fixtures/apps/views/layouts/specific.erb +1 -0
- data/test/fixtures/apps/views/test/post.erb +1 -0
- data/test/fixtures/layouts/layout.erb +1 -0
- data/test/fixtures/markup_app/app.rb +87 -0
- data/test/fixtures/markup_app/views/button_to.erb +8 -0
- data/test/fixtures/markup_app/views/button_to.haml +5 -0
- data/test/fixtures/markup_app/views/button_to.slim +6 -0
- data/test/fixtures/markup_app/views/capture_concat.erb +14 -0
- data/test/fixtures/markup_app/views/capture_concat.haml +12 -0
- data/test/fixtures/markup_app/views/capture_concat.slim +12 -0
- data/test/fixtures/markup_app/views/content_for.erb +23 -0
- data/test/fixtures/markup_app/views/content_for.haml +19 -0
- data/test/fixtures/markup_app/views/content_for.slim +19 -0
- data/test/fixtures/markup_app/views/content_tag.erb +13 -0
- data/test/fixtures/markup_app/views/content_tag.haml +11 -0
- data/test/fixtures/markup_app/views/content_tag.slim +11 -0
- data/test/fixtures/markup_app/views/current_engine.erb +5 -0
- data/test/fixtures/markup_app/views/current_engine.haml +5 -0
- data/test/fixtures/markup_app/views/current_engine.slim +5 -0
- data/test/fixtures/markup_app/views/fields_for.erb +20 -0
- data/test/fixtures/markup_app/views/fields_for.haml +15 -0
- data/test/fixtures/markup_app/views/fields_for.slim +15 -0
- data/test/fixtures/markup_app/views/form_for.erb +72 -0
- data/test/fixtures/markup_app/views/form_for.haml +59 -0
- data/test/fixtures/markup_app/views/form_for.slim +59 -0
- data/test/fixtures/markup_app/views/form_tag.erb +95 -0
- data/test/fixtures/markup_app/views/form_tag.haml +78 -0
- data/test/fixtures/markup_app/views/form_tag.slim +79 -0
- data/test/fixtures/markup_app/views/link_to.erb +5 -0
- data/test/fixtures/markup_app/views/link_to.haml +4 -0
- data/test/fixtures/markup_app/views/link_to.slim +4 -0
- data/test/fixtures/markup_app/views/mail_to.erb +3 -0
- data/test/fixtures/markup_app/views/mail_to.haml +3 -0
- data/test/fixtures/markup_app/views/mail_to.slim +3 -0
- data/test/fixtures/markup_app/views/meta_tag.erb +3 -0
- data/test/fixtures/markup_app/views/meta_tag.haml +3 -0
- data/test/fixtures/markup_app/views/meta_tag.slim +3 -0
- data/test/fixtures/markup_app/views/partials/_erb.erb +1 -0
- data/test/fixtures/markup_app/views/partials/_haml.haml +1 -0
- data/test/fixtures/markup_app/views/partials/_slim.slim +1 -0
- data/test/fixtures/markup_app/views/simple_partial.erb +1 -0
- data/test/fixtures/markup_app/views/simple_partial.haml +1 -0
- data/test/fixtures/markup_app/views/simple_partial.slim +1 -0
- data/test/fixtures/render_app/app.rb +94 -0
- data/test/fixtures/render_app/views/_deep.erb +3 -0
- data/test/fixtures/render_app/views/_deep.haml +2 -0
- data/test/fixtures/render_app/views/_deep.slim +2 -0
- data/test/fixtures/render_app/views/_partial_block_erb.erb +10 -0
- data/test/fixtures/render_app/views/_partial_block_haml.haml +7 -0
- data/test/fixtures/render_app/views/_partial_block_slim.slim +7 -0
- data/test/fixtures/render_app/views/_unsafe.html.builder +2 -0
- data/test/fixtures/render_app/views/_unsafe_object.html.builder +2 -0
- data/test/fixtures/render_app/views/current_engine.haml +5 -0
- data/test/fixtures/render_app/views/current_engines/_erb.erb +1 -0
- data/test/fixtures/render_app/views/current_engines/_haml.haml +1 -0
- data/test/fixtures/render_app/views/current_engines/_slim.slim +1 -0
- data/test/fixtures/render_app/views/double_capture_erb.erb +3 -0
- data/test/fixtures/render_app/views/double_capture_haml.haml +2 -0
- data/test/fixtures/render_app/views/double_capture_slim.slim +2 -0
- data/test/fixtures/render_app/views/erb/test.erb +1 -0
- data/test/fixtures/render_app/views/explicit_engine.haml +5 -0
- data/test/fixtures/render_app/views/haml/test.haml +1 -0
- data/test/fixtures/render_app/views/render_block_erb.erb +5 -0
- data/test/fixtures/render_app/views/render_block_haml.haml +4 -0
- data/test/fixtures/render_app/views/render_block_slim.slim +4 -0
- data/test/fixtures/render_app/views/ruby_block_capture_erb.erb +1 -0
- data/test/fixtures/render_app/views/ruby_block_capture_haml.haml +1 -0
- data/test/fixtures/render_app/views/ruby_block_capture_slim.slim +1 -0
- data/test/fixtures/render_app/views/template/_user.haml +7 -0
- data/test/fixtures/render_app/views/template/haml_template.haml +1 -0
- data/test/fixtures/render_app/views/template/some_template.haml +2 -0
- data/test/fixtures/render_app/views/wrong_capture_erb.erb +3 -0
- data/test/fixtures/render_app/views/wrong_capture_haml.haml +2 -0
- data/test/fixtures/render_app/views/wrong_capture_slim.slim +2 -0
- data/test/helper.rb +131 -0
- data/test/test_asset_tag_helpers.rb +406 -0
- data/test/test_form_builder.rb +1216 -0
- data/test/test_form_helpers.rb +1056 -0
- data/test/test_format_helpers.rb +251 -0
- data/test/test_helpers.rb +10 -0
- data/test/test_locale.rb +20 -0
- data/test/test_number_helpers.rb +142 -0
- data/test/test_output_helpers.rb +157 -0
- data/test/test_render_helpers.rb +215 -0
- data/test/test_rendering.rb +694 -0
- data/test/test_rendering_extensions.rb +14 -0
- data/test/test_tag_helpers.rb +131 -0
- metadata +241 -0
@@ -0,0 +1,251 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/fixtures/markup_app/app')
|
3
|
+
|
4
|
+
describe "FormatHelpers" do
|
5
|
+
include Padrino::Helpers::FormatHelpers
|
6
|
+
|
7
|
+
def app
|
8
|
+
MarkupDemo
|
9
|
+
end
|
10
|
+
|
11
|
+
def setup
|
12
|
+
Time.stubs(:now).returns(Time.utc(1983, 11, 9, 5))
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'for #simple_format method' do
|
16
|
+
it 'should format simple text into html format' do
|
17
|
+
actual_text = simple_format("Here is some basic text...\n...with a line break.")
|
18
|
+
assert_equal true, actual_text.html_safe?
|
19
|
+
assert_equal "<p>Here is some basic text...\n<br />...with a line break.</p>", actual_text
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should format more text into html format' do
|
23
|
+
actual_text = simple_format("We want to put a paragraph...\n\n...right there.")
|
24
|
+
assert_equal "<p>We want to put a paragraph...</p>\n\n<p>...right there.</p>", actual_text
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'should support defining a class for the paragraphs' do
|
28
|
+
actual_text = simple_format("Look me! A class!", :class => 'description')
|
29
|
+
assert_equal "<p class=\"description\">Look me! A class!</p>", actual_text
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'should escape html tags' do
|
33
|
+
actual_text = simple_format("Will you escape <b>that</b>?")
|
34
|
+
assert_equal "<p>Will you escape <b>that</b>?</p>", actual_text
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should support already sanitized text' do
|
38
|
+
actual_text = simple_format("Don't try to escape <b>me</b>!".html_safe)
|
39
|
+
assert_equal "<p>Don't try to escape <b>me</b>!</p>", actual_text
|
40
|
+
end
|
41
|
+
|
42
|
+
describe 'wrapped in a custom tag' do
|
43
|
+
it 'should format simple text into html format' do
|
44
|
+
actual_text = simple_format("Here is some basic text...\n...with a line break.", :tag => :div)
|
45
|
+
assert_equal "<div>Here is some basic text...\n<br />...with a line break.</div>", actual_text
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should format more text into html format' do
|
49
|
+
actual_text = simple_format("We want to put a paragraph...\n\n...right there.", :tag => :div)
|
50
|
+
assert_equal "<div>We want to put a paragraph...</div>\n\n<div>...right there.</div>", actual_text
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should support defining a class for the paragraphs' do
|
54
|
+
actual_text = simple_format("Look me! A class!", :class => 'description', :tag => :div)
|
55
|
+
assert_equal "<div class=\"description\">Look me! A class!</div>", actual_text
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe 'for #pluralize method' do
|
61
|
+
it 'should return singular count for 1 item collections' do
|
62
|
+
actual_text = pluralize(1, 'person')
|
63
|
+
assert_equal '1 person', actual_text
|
64
|
+
end
|
65
|
+
it 'should return plural count for empty collections' do
|
66
|
+
actual_text = pluralize(0, 'person')
|
67
|
+
assert_equal '0 people', actual_text
|
68
|
+
end
|
69
|
+
it 'should return plural count for many collections' do
|
70
|
+
actual_text = pluralize(2, 'person')
|
71
|
+
assert_equal '2 people', actual_text
|
72
|
+
end
|
73
|
+
it 'should return pluralized word specified as argument' do
|
74
|
+
actual_text = pluralize(3, 'person', 'users')
|
75
|
+
assert_equal '3 users', actual_text
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
describe 'for #word_wrap method' do
|
80
|
+
it 'should return proper formatting for 8 max width' do
|
81
|
+
actual_text = word_wrap('Once upon a time', :line_width => 8)
|
82
|
+
assert_equal "Once\nupon a\ntime", actual_text
|
83
|
+
end
|
84
|
+
it 'should return proper formatting for 1 max width' do
|
85
|
+
actual_text = word_wrap('Once upon a time', :line_width => 1)
|
86
|
+
assert_equal "Once\nupon\na\ntime", actual_text
|
87
|
+
end
|
88
|
+
it 'should return proper formatting for default width' do
|
89
|
+
actual_text = word_wrap((1..50).to_a.join(" "))
|
90
|
+
assert_equal (1..30).to_a.join(" ") + "\n" + (31..50).to_a.join(" "), actual_text
|
91
|
+
actual_text = word_wrap((1..50).to_a.join(" "), 80)
|
92
|
+
assert_equal (1..30).to_a.join(" ") + "\n" + (31..50).to_a.join(" "), actual_text
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
describe 'for #highlight method' do
|
97
|
+
it 'should highligth with defaults' do
|
98
|
+
actual_text = highlight('Lorem ipsum dolor sit amet', 'dolor')
|
99
|
+
assert_equal 'Lorem ipsum <strong class="highlight">dolor</strong> sit amet', actual_text
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should highlight with highlighter' do
|
103
|
+
actual_text = highlight('Lorem ipsum dolor sit amet', 'dolor', :highlighter => '<span class="custom">\1</span>')
|
104
|
+
assert_equal 'Lorem ipsum <span class="custom">dolor</span> sit amet', actual_text
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
describe 'for #truncate method' do
|
109
|
+
it 'should support default truncation' do
|
110
|
+
actual_text = truncate("Once upon a time in a world far far away")
|
111
|
+
assert_equal "Once upon a time in a world...", actual_text
|
112
|
+
end
|
113
|
+
it 'should support specifying length' do
|
114
|
+
actual_text = truncate("Once upon a time in a world far far away", :length => 14)
|
115
|
+
assert_equal "Once upon a...", actual_text
|
116
|
+
end
|
117
|
+
it 'should support specifying omission text' do
|
118
|
+
actual_text = truncate("And they found that many people were sleeping better.", :length => 25, :omission => "(clipped)")
|
119
|
+
assert_equal "And they found t(clipped)", actual_text
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe 'for #truncate_words method' do
|
124
|
+
it 'should support default truncation' do
|
125
|
+
actual_text = truncate_words("Long before books were made, people told stories. They told them to one another and to the children as they sat before the fire. Many of these stories were about interesting people, but most of them were about the ways of fairies and giants.")
|
126
|
+
assert_equal "Long before books were made, people told stories. They told them to one another and to the children as they sat before the fire. Many of these stories were about...", actual_text
|
127
|
+
end
|
128
|
+
it 'should support specifying length' do
|
129
|
+
actual_text = truncate_words("Once upon a time in a world far far away", :length => 8)
|
130
|
+
assert_equal "Once upon a time in a world far...", actual_text
|
131
|
+
end
|
132
|
+
it 'should support specifying omission text' do
|
133
|
+
actual_text = truncate_words("And they found that many people were sleeping better.", :length => 4, :omission => "(clipped)")
|
134
|
+
assert_equal "And they found that(clipped)", actual_text
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
describe 'for #h and #h! method' do
|
139
|
+
it 'should escape the simple html' do
|
140
|
+
assert_equal '<h1>hello</h1>', h('<h1>hello</h1>')
|
141
|
+
assert_equal '<h1>hello</h1>', escape_html('<h1>hello</h1>')
|
142
|
+
end
|
143
|
+
it 'should escape all brackets, quotes and ampersands' do
|
144
|
+
assert_equal '<h1><>"&demo&"<></h1>', h('<h1><>"&demo&"<></h1>')
|
145
|
+
end
|
146
|
+
it 'should return default text if text is empty' do
|
147
|
+
assert_equal 'default', h!("", "default")
|
148
|
+
assert_equal ' ', h!("")
|
149
|
+
end
|
150
|
+
it 'should return text escaped if not empty' do
|
151
|
+
assert_equal '<h1>hello</h1>', h!('<h1>hello</h1>')
|
152
|
+
end
|
153
|
+
it 'should mark escaped text as safe' do
|
154
|
+
assert_equal false, '<h1>hello</h1>'.html_safe?
|
155
|
+
assert_equal true, h('<h1>hello</h1>').html_safe?
|
156
|
+
assert_equal true, h!("", "default").html_safe?
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe 'for #time_ago_in_words method' do
|
161
|
+
it 'should less than 5 seconds' do
|
162
|
+
assert_equal 'less than 5 seconds', time_ago_in_words(Time.now, true)
|
163
|
+
end
|
164
|
+
it 'should less than 10 seconds' do
|
165
|
+
assert_equal 'less than 10 seconds', time_ago_in_words(Time.now-5, true)
|
166
|
+
end
|
167
|
+
it 'should less than 20 seconds' do
|
168
|
+
assert_equal 'less than 20 seconds', time_ago_in_words(Time.now-10, true)
|
169
|
+
end
|
170
|
+
it 'should less than a minute' do
|
171
|
+
assert_equal 'less than a minute', time_ago_in_words(Time.now-40, true)
|
172
|
+
end
|
173
|
+
it 'should 2 minutes' do
|
174
|
+
assert_equal '2 minutes', time_ago_in_words(Time.now-120, true)
|
175
|
+
end
|
176
|
+
it 'should display today' do
|
177
|
+
assert_equal 'less than a minute', time_ago_in_words(Time.now)
|
178
|
+
end
|
179
|
+
it 'should display yesterday' do
|
180
|
+
assert_equal '1 day', time_ago_in_words(1.day.ago)
|
181
|
+
end
|
182
|
+
it 'should display tomorrow' do
|
183
|
+
assert_equal '1 day', time_ago_in_words(1.day.from_now)
|
184
|
+
end
|
185
|
+
it 'should return future number of days' do
|
186
|
+
assert_equal '4 days', time_ago_in_words(4.days.from_now)
|
187
|
+
end
|
188
|
+
it 'should return past days ago' do
|
189
|
+
assert_equal '4 days', time_ago_in_words(4.days.ago)
|
190
|
+
end
|
191
|
+
it 'should return formatted archived date' do
|
192
|
+
assert_equal '3 months', time_ago_in_words(100.days.ago)
|
193
|
+
end
|
194
|
+
it 'should return formatted archived year date' do
|
195
|
+
assert_equal 'over 1 year', time_ago_in_words(500.days.ago)
|
196
|
+
end
|
197
|
+
it 'should display now as a minute ago' do
|
198
|
+
assert_equal '1 minute', time_ago_in_words(1.minute.ago)
|
199
|
+
end
|
200
|
+
it 'should display a few minutes ago' do
|
201
|
+
assert_equal '4 minutes', time_ago_in_words(4.minute.ago)
|
202
|
+
end
|
203
|
+
it 'should display an hour ago' do
|
204
|
+
assert_equal 'about 1 hour', time_ago_in_words(1.hour.ago + 5.minutes.ago.sec)
|
205
|
+
end
|
206
|
+
it 'should display a few hours ago' do
|
207
|
+
assert_equal 'about 3 hours', time_ago_in_words(3.hour.ago + 5.minutes.ago.sec)
|
208
|
+
end
|
209
|
+
it 'should display a day ago' do
|
210
|
+
assert_equal '1 day', time_ago_in_words(1.day.ago)
|
211
|
+
end
|
212
|
+
it 'should display a few days ago' do
|
213
|
+
assert_equal '5 days', time_ago_in_words(5.days.ago - 5.minutes.ago.sec)
|
214
|
+
end
|
215
|
+
it 'should display a month ago' do
|
216
|
+
assert_equal 'about 1 month', time_ago_in_words(32.days.ago + 5.minutes.ago.sec)
|
217
|
+
end
|
218
|
+
it 'should display a few months ago' do
|
219
|
+
assert_equal '6 months', time_ago_in_words(180.days.ago - 5.minutes.ago.sec)
|
220
|
+
end
|
221
|
+
it 'should display a year ago' do
|
222
|
+
assert_equal 'about 1 year', time_ago_in_words(365.days.ago - 5.minutes.ago.sec)
|
223
|
+
end
|
224
|
+
it 'should display a few years ago' do
|
225
|
+
assert_equal 'over 7 years', time_ago_in_words(2800.days.ago - 5.minutes.ago.sec)
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe 'for #js_escape_html method' do
|
230
|
+
it 'should escape double quotes' do
|
231
|
+
assert_equal "\\\"hello\\\"", js_escape_html('"hello"')
|
232
|
+
assert_equal "\\\"hello\\\"", js_escape_html(ActiveSupport::SafeBuffer.new('"hello"'))
|
233
|
+
end
|
234
|
+
it 'should escape single quotes' do
|
235
|
+
assert_equal "\\'hello\\'", js_escape_html("'hello'")
|
236
|
+
assert_equal "\\'hello\\'", js_escape_html(ActiveSupport::SafeBuffer.new("'hello'"))
|
237
|
+
end
|
238
|
+
it 'should escape html tags and breaks' do
|
239
|
+
assert_equal "\\n\\n<p>hello<\\/p>\\n", js_escape_html("\n\r<p>hello</p>\r\n")
|
240
|
+
assert_equal "\\n\\n<p>hello<\\/p>\\n", js_escape_html(ActiveSupport::SafeBuffer.new("\n\r<p>hello</p>\r\n"))
|
241
|
+
end
|
242
|
+
it 'should escape data-confirm attribute' do
|
243
|
+
assert_equal "<data-confirm=\\\"are you sure\\\">", js_escape_html("<data-confirm=\"are you sure\">")
|
244
|
+
assert_equal "<data-confirm=\\\"are you sure\\\">", js_escape_html(ActiveSupport::SafeBuffer.new("<data-confirm=\"are you sure\">"))
|
245
|
+
end
|
246
|
+
it 'should keep html_safe content html_safe' do
|
247
|
+
assert_equal false, js_escape_html('"hello"').html_safe?
|
248
|
+
assert_equal true, js_escape_html(ActiveSupport::SafeBuffer.new('"hello"')).html_safe?
|
249
|
+
end
|
250
|
+
end
|
251
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
describe "Padrino::Helpers" do
|
4
|
+
it 'should allow including without registering' do
|
5
|
+
class Foo
|
6
|
+
include Padrino::Helpers
|
7
|
+
end
|
8
|
+
assert_equal '<div>bar</div>', Foo.new.content_tag(:div, 'bar')
|
9
|
+
end
|
10
|
+
end
|
data/test/test_locale.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
|
3
|
+
describe "Locale Helpers" do
|
4
|
+
Dir[File.expand_path("../../lib/padrino-helpers/locale/*.yml", __FILE__)].each do |file|
|
5
|
+
base_original = YAML.load_file(file)
|
6
|
+
name = File.basename(file, '.yml')
|
7
|
+
it "should should have correct locale for #{name}" do
|
8
|
+
base = base_original[name]['number']['format']
|
9
|
+
assert !base['separator'].nil?
|
10
|
+
assert !base['delimiter'].nil?
|
11
|
+
assert !base['precision'].nil?
|
12
|
+
base = base_original[name]['number']['currency']['format']
|
13
|
+
assert !base['format'].nil?
|
14
|
+
assert !base['unit'].nil?
|
15
|
+
assert !base['separator'].nil?
|
16
|
+
assert !base['delimiter'].nil?
|
17
|
+
assert !base['precision'].nil?
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/fixtures/markup_app/app')
|
3
|
+
|
4
|
+
describe "NumberHelpers" do
|
5
|
+
include Padrino::Helpers::NumberHelpers
|
6
|
+
|
7
|
+
def app
|
8
|
+
MarkupDemo
|
9
|
+
end
|
10
|
+
|
11
|
+
def kilobytes(number)
|
12
|
+
number * 1024
|
13
|
+
end
|
14
|
+
|
15
|
+
def megabytes(number)
|
16
|
+
kilobytes(number) * 1024
|
17
|
+
end
|
18
|
+
|
19
|
+
def gigabytes(number)
|
20
|
+
megabytes(number) * 1024
|
21
|
+
end
|
22
|
+
|
23
|
+
def terabytes(number)
|
24
|
+
gigabytes(number) * 1024
|
25
|
+
end
|
26
|
+
|
27
|
+
describe 'for number helpers functionality' do
|
28
|
+
it 'should display number_to_currency' do
|
29
|
+
assert_equal "$1,234,567,890.50", number_to_currency(1234567890.50)
|
30
|
+
assert_equal "$1,234,567,890.51", number_to_currency(1234567890.506)
|
31
|
+
assert_equal "$1,234,567,892", number_to_currency(1234567891.50, {:precision => 0})
|
32
|
+
assert_equal "$1,234,567,890.5", number_to_currency(1234567890.50, {:precision => 1})
|
33
|
+
assert_equal "£1234567890,50", number_to_currency(1234567890.50, {:unit => "£", :separator => ",", :delimiter => ""})
|
34
|
+
assert_equal "$1,234,567,890.50", number_to_currency("1234567890.50")
|
35
|
+
assert_equal "1,234,567,890.50 Kč", number_to_currency("1234567890.50", {:unit => "Kč", :format => "%n %u"})
|
36
|
+
assert_equal "$x", number_to_currency("x")
|
37
|
+
|
38
|
+
assert_nil number_to_currency(nil)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'should display number_to_percentage' do
|
42
|
+
assert_equal "100.000%", number_to_percentage(100)
|
43
|
+
assert_equal "100%", number_to_percentage(100, {:precision => 0})
|
44
|
+
assert_equal "302.06%", number_to_percentage(302.0574, {:precision => 2})
|
45
|
+
assert_equal "100.000%", number_to_percentage("100")
|
46
|
+
assert_equal "1000.000%", number_to_percentage("1000")
|
47
|
+
assert_equal "x%", number_to_percentage("x")
|
48
|
+
assert_equal "1.000,000%", number_to_percentage(1000, :delimiter => '.', :separator => ',')
|
49
|
+
|
50
|
+
assert_nil number_to_percentage(nil)
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should display number_with_delimiter' do
|
54
|
+
assert_equal "12,345,678", number_with_delimiter(12345678)
|
55
|
+
assert_equal "0", number_with_delimiter(0)
|
56
|
+
assert_equal "123", number_with_delimiter(123)
|
57
|
+
assert_equal "123,456", number_with_delimiter(123456)
|
58
|
+
assert_equal "123,456.78", number_with_delimiter(123456.78)
|
59
|
+
assert_equal "123,456.789", number_with_delimiter(123456.789)
|
60
|
+
assert_equal "123,456.78901", number_with_delimiter(123456.78901)
|
61
|
+
assert_equal "123,456,789.78901", number_with_delimiter(123456789.78901)
|
62
|
+
assert_equal "0.78901", number_with_delimiter(0.78901)
|
63
|
+
assert_equal "123,456.78", number_with_delimiter("123456.78")
|
64
|
+
assert_equal "x", number_with_delimiter("x")
|
65
|
+
|
66
|
+
assert_nil number_with_delimiter(nil)
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should display number_with_delimiter with options' do
|
70
|
+
assert_equal '12 345 678', number_with_delimiter(12345678, :delimiter => ' ')
|
71
|
+
assert_equal '12,345,678-05', number_with_delimiter(12345678.05, :separator => '-')
|
72
|
+
assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :separator => ',', :delimiter => '.')
|
73
|
+
assert_equal '12.345.678,05', number_with_delimiter(12345678.05, :delimiter => '.', :separator => ',')
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'should display number_with_precision' do
|
77
|
+
assert_equal "111.235", number_with_precision(111.2346)
|
78
|
+
assert_equal "31.83", number_with_precision(31.825, :precision => 2)
|
79
|
+
assert_equal "111.23", number_with_precision(111.2346, :precision => 2)
|
80
|
+
assert_equal "111.00", number_with_precision(111, :precision => 2)
|
81
|
+
assert_equal "111.235", number_with_precision("111.2346")
|
82
|
+
assert_equal "31.83", number_with_precision("31.825", :precision => 2)
|
83
|
+
assert_equal "3268", number_with_precision((32.6751 * 100.00), :precision => 0)
|
84
|
+
assert_equal "112", number_with_precision(111.50, :precision => 0)
|
85
|
+
assert_equal "1234567892", number_with_precision(1234567891.50, :precision => 0)
|
86
|
+
|
87
|
+
# Return non-numeric params unchanged.
|
88
|
+
assert_equal "x", number_with_precision("x")
|
89
|
+
assert_nil number_with_precision(nil)
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'should display number_with_precision with custom delimiter and separator' do
|
93
|
+
assert_equal '31,83', number_with_precision(31.825, :precision => 2, :separator => ',')
|
94
|
+
assert_equal '1.231,83', number_with_precision(1231.825, :precision => 2, :separator => ',', :delimiter => '.')
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'should display number_to_human_size' do
|
98
|
+
assert_equal '0 Bytes', number_to_human_size(0)
|
99
|
+
assert_equal '1 Byte', number_to_human_size(1)
|
100
|
+
assert_equal '3 Bytes', number_to_human_size(3.14159265)
|
101
|
+
assert_equal '123 Bytes', number_to_human_size(123.0)
|
102
|
+
assert_equal '123 Bytes', number_to_human_size(123)
|
103
|
+
assert_equal '1.2 KB', number_to_human_size(1234)
|
104
|
+
assert_equal '12.1 KB', number_to_human_size(12345)
|
105
|
+
assert_equal '1.2 MB', number_to_human_size(1234567)
|
106
|
+
assert_equal '1.1 GB', number_to_human_size(1234567890)
|
107
|
+
assert_equal '1.1 TB', number_to_human_size(1234567890123)
|
108
|
+
assert_equal '1025 TB', number_to_human_size(terabytes(1025))
|
109
|
+
assert_equal '444 KB', number_to_human_size(kilobytes(444))
|
110
|
+
assert_equal '1023 MB', number_to_human_size(megabytes(1023))
|
111
|
+
assert_equal '3 TB', number_to_human_size(terabytes(3))
|
112
|
+
assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2)
|
113
|
+
assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4)
|
114
|
+
assert_equal '123 Bytes', number_to_human_size("123")
|
115
|
+
assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0123), :precision => 2)
|
116
|
+
assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0100), :precision => 4)
|
117
|
+
assert_equal '10 KB', number_to_human_size(kilobytes(10.000), :precision => 4)
|
118
|
+
assert_equal '1 Byte', number_to_human_size(1.1)
|
119
|
+
assert_equal '10 Bytes', number_to_human_size(10)
|
120
|
+
|
121
|
+
assert_nil number_to_human_size(nil)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'should display number_to_human_size with options' do
|
125
|
+
assert_equal '1.18 MB', number_to_human_size(1234567, :precision => 2)
|
126
|
+
assert_equal '3 Bytes', number_to_human_size(3.14159265, :precision => 4)
|
127
|
+
assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0123), :precision => 2)
|
128
|
+
assert_equal '1.01 KB', number_to_human_size(kilobytes(1.0100), :precision => 4)
|
129
|
+
assert_equal '10 KB', number_to_human_size(kilobytes(10.000), :precision => 4)
|
130
|
+
assert_equal '1 TB', number_to_human_size(1234567890123, :precision => 0)
|
131
|
+
assert_equal '500 MB', number_to_human_size(524288000, :precision => 0)
|
132
|
+
assert_equal '40 KB', number_to_human_size(41010, :precision => 0)
|
133
|
+
assert_equal '40 KB', number_to_human_size(41100, :precision => 0)
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should display number_to_human_size with custom delimiter and separator' do
|
137
|
+
assert_equal '1,01 KB', number_to_human_size(kilobytes(1.0123), :precision => 2, :separator => ',')
|
138
|
+
assert_equal '1,01 KB', number_to_human_size(kilobytes(1.0100), :precision => 4, :separator => ',')
|
139
|
+
assert_equal '1.000,1 TB', number_to_human_size(terabytes(1000.1), :delimiter => '.', :separator => ',')
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,157 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/fixtures/markup_app/app')
|
3
|
+
|
4
|
+
describe "OutputHelpers" do
|
5
|
+
def app
|
6
|
+
MarkupDemo
|
7
|
+
end
|
8
|
+
|
9
|
+
describe 'for #content_for method' do
|
10
|
+
it 'should work for erb templates' do
|
11
|
+
visit '/erb/content_for'
|
12
|
+
assert_have_selector '.demo h1', :content => "This is content yielded from a content_for", :count => 1
|
13
|
+
assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
|
14
|
+
assert_have_no_selector '.demo3 p', :content => "One", :class => "duplication"
|
15
|
+
assert_have_selector '.demo3 p', :content => "Two", :class => "duplication"
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should work for haml templates' do
|
19
|
+
visit '/haml/content_for'
|
20
|
+
assert_have_selector '.demo h1', :content => "This is content yielded from a content_for", :count => 1
|
21
|
+
assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
|
22
|
+
assert_have_no_selector '.demo3 p', :content => "One", :class => "duplication"
|
23
|
+
assert_have_selector '.demo3 p', :content => "Two", :class => "duplication"
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'should work for slim templates' do
|
27
|
+
visit '/slim/content_for'
|
28
|
+
assert_have_selector '.demo h1', :content => "This is content yielded from a content_for", :count => 1
|
29
|
+
assert_have_selector '.demo2 h1', :content => "This is content yielded with name Johnny Smith", :count => 1
|
30
|
+
assert_have_no_selector '.demo3 p', :content => "One", :class => "duplication"
|
31
|
+
assert_have_selector '.demo3 p', :content => "Two", :class => "duplication"
|
32
|
+
end
|
33
|
+
end # content_for
|
34
|
+
|
35
|
+
describe "for #content_for? method" do
|
36
|
+
it 'should work for erb templates' do
|
37
|
+
visit '/erb/content_for'
|
38
|
+
assert_have_selector '.demo_has_content', :content => "true"
|
39
|
+
assert_have_selector '.fake_has_content', :content => "false"
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should work for haml templates' do
|
43
|
+
visit '/haml/content_for'
|
44
|
+
assert_have_selector '.demo_has_content', :content => "true"
|
45
|
+
assert_have_selector '.fake_has_content', :content => "false"
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should work for slim templates' do
|
49
|
+
visit '/slim/content_for'
|
50
|
+
assert_have_selector '.demo_has_content', :content => "true"
|
51
|
+
assert_have_selector '.fake_has_content', :content => "false"
|
52
|
+
end
|
53
|
+
end # content_for?
|
54
|
+
|
55
|
+
describe 'for #capture_html method' do
|
56
|
+
it 'should work for erb templates' do
|
57
|
+
visit '/erb/capture_concat'
|
58
|
+
assert_have_selector 'p span', :content => "Captured Line 1", :count => 1
|
59
|
+
assert_have_selector 'p span', :content => "Captured Line 2", :count => 1
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should work for haml templates' do
|
63
|
+
visit '/haml/capture_concat'
|
64
|
+
assert_have_selector 'p span', :content => "Captured Line 1", :count => 1
|
65
|
+
assert_have_selector 'p span', :content => "Captured Line 2", :count => 1
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'should work for slim templates' do
|
69
|
+
visit '/slim/capture_concat'
|
70
|
+
assert_have_selector 'p span', :content => "Captured Line 1", :count => 1
|
71
|
+
assert_have_selector 'p span', :content => "Captured Line 2", :count => 1
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe 'for #concat_content method' do
|
76
|
+
it 'should work for erb templates' do
|
77
|
+
visit '/erb/capture_concat'
|
78
|
+
assert_have_selector 'p', :content => "Concat Line 3", :count => 1
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should work for haml templates' do
|
82
|
+
visit '/haml/capture_concat'
|
83
|
+
assert_have_selector 'p', :content => "Concat Line 3", :count => 1
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should work for slim templates' do
|
87
|
+
visit '/slim/capture_concat'
|
88
|
+
assert_have_selector 'p', :content => "Concat Line 3", :count => 1
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
describe 'for #block_is_template?' do
|
93
|
+
it 'should work for erb templates' do
|
94
|
+
visit '/erb/capture_concat'
|
95
|
+
assert_have_selector 'p', :content => "The erb block passed in is a template", :class => 'is_template', :count => 1
|
96
|
+
assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should work for haml templates' do
|
100
|
+
visit '/haml/capture_concat'
|
101
|
+
assert_have_selector 'p', :content => "The haml block passed in is a template", :class => 'is_template', :count => 1
|
102
|
+
assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'should work for slim templates' do
|
106
|
+
visit '/slim/capture_concat'
|
107
|
+
assert_have_selector 'p', :content => "The slim block passed in is a template", :class => 'is_template', :count => 1
|
108
|
+
assert_have_no_selector 'p', :content => "The ruby block passed in is a template", :class => 'is_template', :count => 1
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
describe 'for #current_engine method' do
|
113
|
+
it 'should detect correctly current engine for erb' do
|
114
|
+
visit '/erb/current_engine'
|
115
|
+
assert_have_selector 'p.start', :content => "erb"
|
116
|
+
assert_have_selector 'p.haml', :content => "haml"
|
117
|
+
assert_have_selector 'p.erb', :content => "erb"
|
118
|
+
assert_have_selector 'p.slim', :content => "slim"
|
119
|
+
assert_have_selector 'p.end', :content => "erb"
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should detect correctly current engine for haml' do
|
123
|
+
visit '/haml/current_engine'
|
124
|
+
assert_have_selector 'p.start', :content => "haml"
|
125
|
+
assert_have_selector 'p.haml', :content => "haml"
|
126
|
+
assert_have_selector 'p.erb', :content => "erb"
|
127
|
+
assert_have_selector 'p.slim', :content => "slim"
|
128
|
+
assert_have_selector 'p.end', :content => "haml"
|
129
|
+
end
|
130
|
+
|
131
|
+
it 'should detect correctly current engine for slim' do
|
132
|
+
visit '/slim/current_engine'
|
133
|
+
assert_have_selector 'p.start', :content => "slim"
|
134
|
+
assert_have_selector 'p.haml', :content => "haml"
|
135
|
+
assert_have_selector 'p.erb', :content => "erb"
|
136
|
+
assert_have_selector 'p.slim', :content => "slim"
|
137
|
+
assert_have_selector 'p.end', :content => "slim"
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe 'for #partial method in simple sinatra application' do
|
142
|
+
it 'should properly output in erb' do
|
143
|
+
visit '/erb/simple_partial'
|
144
|
+
assert_have_selector 'p.erb', :content => "erb"
|
145
|
+
end
|
146
|
+
|
147
|
+
it 'should properly output in haml' do
|
148
|
+
visit '/haml/simple_partial'
|
149
|
+
assert_have_selector 'p.haml', :content => "haml"
|
150
|
+
end
|
151
|
+
|
152
|
+
it 'should properly output in slim' do
|
153
|
+
visit '/slim/simple_partial'
|
154
|
+
assert_have_selector 'p.slim', :content => "slim"
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|