sinatra-support 1.0.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.md +53 -0
- data/Rakefile +7 -0
- data/lib/sinatra/support/compat-1.8.6.rb +30 -0
- data/lib/sinatra/support/country.rb +300 -0
- data/lib/sinatra/support/countryhelpers.rb +28 -0
- data/lib/sinatra/support/csssupport.rb +58 -0
- data/lib/sinatra/support/dateforms.rb +145 -0
- data/lib/sinatra/support/errorhelpers.rb +62 -0
- data/lib/sinatra/support/htmlhelpers.rb +78 -0
- data/lib/sinatra/support/i18nsupport.rb +118 -0
- data/lib/sinatra/support/ifhelpers.rb +63 -0
- data/lib/sinatra/support/jssupport.rb +50 -0
- data/lib/sinatra/support/numeric.rb +105 -0
- data/lib/sinatra/support/ohmerrorhelpers.rb +75 -0
- data/lib/sinatra/support/version.rb +9 -0
- data/lib/sinatra/support.rb +17 -0
- data/test/fixtures/i18n/en.yml +15 -0
- data/test/fixtures/i18n/tl.yml +15 -0
- data/test/helper.rb +29 -0
- data/test/test_country.rb +35 -0
- data/test/test_date.rb +102 -0
- data/test/test_date_app.rb +32 -0
- data/test/test_date_form.rb +102 -0
- data/test/test_html.rb +32 -0
- data/test/test_htmlhelpers.rb +33 -0
- data/test/test_i18n.rb +48 -0
- data/test/test_numeric.rb +62 -0
- data/test/test_ohmerror.rb +52 -0
- metadata +162 -0
data/test/test_date.rb
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class DateTest < Test::Unit::TestCase
|
|
4
|
+
include Sinatra::DateForms::Helpers
|
|
5
|
+
|
|
6
|
+
test "day_choices returns 1 to 31" do
|
|
7
|
+
assert_equal 31, day_choices.size
|
|
8
|
+
assert_equal [1, 1], day_choices.first
|
|
9
|
+
assert_equal [31, 31], day_choices.last
|
|
10
|
+
|
|
11
|
+
day_choices.each do |label, value|
|
|
12
|
+
assert_equal label, value
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "month choices" do
|
|
17
|
+
setup do
|
|
18
|
+
settings.stubs(:default_month_names).returns(Date::MONTHNAMES)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test "by default" do
|
|
22
|
+
assert_equal ["January", 1], month_choices[0]
|
|
23
|
+
assert_equal ["February", 2], month_choices[1]
|
|
24
|
+
assert_equal ["March", 3], month_choices[2]
|
|
25
|
+
assert_equal ["April", 4], month_choices[3]
|
|
26
|
+
assert_equal ["May", 5], month_choices[4]
|
|
27
|
+
assert_equal ["June", 6], month_choices[5]
|
|
28
|
+
assert_equal ["July", 7], month_choices[6]
|
|
29
|
+
assert_equal ["August", 8], month_choices[7]
|
|
30
|
+
assert_equal ["September", 9], month_choices[8]
|
|
31
|
+
assert_equal ["October", 10], month_choices[9]
|
|
32
|
+
assert_equal ["November", 11], month_choices[10]
|
|
33
|
+
assert_equal ["December", 12], month_choices[11]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test "given Date::ABBR_MONTHNAMES" do
|
|
37
|
+
month_choices = month_choices(Date::ABBR_MONTHNAMES)
|
|
38
|
+
|
|
39
|
+
assert_equal ["Jan", 1], month_choices[0]
|
|
40
|
+
assert_equal ["Feb", 2], month_choices[1]
|
|
41
|
+
assert_equal ["Mar", 3], month_choices[2]
|
|
42
|
+
assert_equal ["Apr", 4], month_choices[3]
|
|
43
|
+
assert_equal ["May", 5], month_choices[4]
|
|
44
|
+
assert_equal ["Jun", 6], month_choices[5]
|
|
45
|
+
assert_equal ["Jul", 7], month_choices[6]
|
|
46
|
+
assert_equal ["Aug", 8], month_choices[7]
|
|
47
|
+
assert_equal ["Sep", 9], month_choices[8]
|
|
48
|
+
assert_equal ["Oct", 10], month_choices[9]
|
|
49
|
+
assert_equal ["Nov", 11], month_choices[10]
|
|
50
|
+
assert_equal ["Dec", 12], month_choices[11]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
test "when changing settings.default_month_names" do
|
|
54
|
+
settings.stubs(:default_month_names).at_least_once.returns(Date::ABBR_MONTHNAMES)
|
|
55
|
+
|
|
56
|
+
assert_equal ["Jan", 1], month_choices[0]
|
|
57
|
+
assert_equal ["Feb", 2], month_choices[1]
|
|
58
|
+
assert_equal ["Nov", 11], month_choices[10]
|
|
59
|
+
assert_equal ["Dec", 12], month_choices[11]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe "year choices" do
|
|
64
|
+
setup do
|
|
65
|
+
settings.stubs(:default_year_loffset).returns(-60)
|
|
66
|
+
settings.stubs(:default_year_uoffset).returns(0)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
test "by default" do
|
|
70
|
+
assert_equal 61, year_choices.size
|
|
71
|
+
year_choices.each do |label, value|
|
|
72
|
+
assert_equal label, value
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "allows to pass in a lower upper offset" do
|
|
77
|
+
assert_equal 1, year_choices(0, 0).size
|
|
78
|
+
assert_equal [Date.today.year, Date.today.year], year_choices(0, 0).first
|
|
79
|
+
|
|
80
|
+
Date.expects(:today).at_least_once.returns(Date.new(2010, 5, 5))
|
|
81
|
+
assert_equal [2005, 2005], year_choices(-5).first
|
|
82
|
+
assert_equal [2015, 2015], year_choices(0, 5).last
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
test "allows to start with a higher lower upper offset" do
|
|
86
|
+
Date.expects(:today).at_least_once.returns(Date.new(2010, 5, 5))
|
|
87
|
+
assert_equal [2010, 2010], year_choices(0, -50).first
|
|
88
|
+
assert_equal [1960, 1960], year_choices(0, -50).last
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
test "allows to customize via global settings" do
|
|
92
|
+
settings.expects(:default_year_loffset).at_least_once.returns(0)
|
|
93
|
+
settings.expects(:default_year_uoffset).at_least_once.returns(6)
|
|
94
|
+
|
|
95
|
+
year = Time.now.year
|
|
96
|
+
expected = (year..(year+6)).to_a
|
|
97
|
+
expected = expected.zip(expected)
|
|
98
|
+
|
|
99
|
+
assert_equal expected, year_choices
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class DateAppTest < Test::Unit::TestCase
|
|
4
|
+
include Sinatra::DateForms::Helpers
|
|
5
|
+
include Rack::Test::Methods
|
|
6
|
+
|
|
7
|
+
class App < Sinatra::Base
|
|
8
|
+
register Sinatra::DateForms
|
|
9
|
+
get('/years') { year_choices.to_s }
|
|
10
|
+
get('/months') { month_choices.to_s }
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def app
|
|
14
|
+
App.new
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "returns the expected years" do
|
|
18
|
+
get '/years'
|
|
19
|
+
|
|
20
|
+
settings.stubs(:default_year_loffset).returns(-60)
|
|
21
|
+
settings.stubs(:default_year_uoffset).returns(0)
|
|
22
|
+
|
|
23
|
+
assert_equal year_choices.to_s, last_response.body
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "returns the expected months" do
|
|
27
|
+
get '/months'
|
|
28
|
+
|
|
29
|
+
settings.stubs(:default_month_names).returns(Date::MONTHNAMES)
|
|
30
|
+
assert_equal month_choices.to_s, last_response.body
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class DateFormTest < Test::Unit::TestCase
|
|
4
|
+
include Sinatra::DateForms::Helpers
|
|
5
|
+
|
|
6
|
+
test "day_choices returns 1 to 31" do
|
|
7
|
+
assert_equal 31, day_choices.size
|
|
8
|
+
assert_equal [1, 1], day_choices.first
|
|
9
|
+
assert_equal [31, 31], day_choices.last
|
|
10
|
+
|
|
11
|
+
day_choices.each do |label, value|
|
|
12
|
+
assert_equal label, value
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "month choices" do
|
|
17
|
+
setup do
|
|
18
|
+
settings.stubs(:default_month_names).returns(Date::MONTHNAMES)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test "by default" do
|
|
22
|
+
assert_equal ["January", 1], month_choices[0]
|
|
23
|
+
assert_equal ["February", 2], month_choices[1]
|
|
24
|
+
assert_equal ["March", 3], month_choices[2]
|
|
25
|
+
assert_equal ["April", 4], month_choices[3]
|
|
26
|
+
assert_equal ["May", 5], month_choices[4]
|
|
27
|
+
assert_equal ["June", 6], month_choices[5]
|
|
28
|
+
assert_equal ["July", 7], month_choices[6]
|
|
29
|
+
assert_equal ["August", 8], month_choices[7]
|
|
30
|
+
assert_equal ["September", 9], month_choices[8]
|
|
31
|
+
assert_equal ["October", 10], month_choices[9]
|
|
32
|
+
assert_equal ["November", 11], month_choices[10]
|
|
33
|
+
assert_equal ["December", 12], month_choices[11]
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
test "given Date::ABBR_MONTHNAMES" do
|
|
37
|
+
month_choices = month_choices(Date::ABBR_MONTHNAMES)
|
|
38
|
+
|
|
39
|
+
assert_equal ["Jan", 1], month_choices[0]
|
|
40
|
+
assert_equal ["Feb", 2], month_choices[1]
|
|
41
|
+
assert_equal ["Mar", 3], month_choices[2]
|
|
42
|
+
assert_equal ["Apr", 4], month_choices[3]
|
|
43
|
+
assert_equal ["May", 5], month_choices[4]
|
|
44
|
+
assert_equal ["Jun", 6], month_choices[5]
|
|
45
|
+
assert_equal ["Jul", 7], month_choices[6]
|
|
46
|
+
assert_equal ["Aug", 8], month_choices[7]
|
|
47
|
+
assert_equal ["Sep", 9], month_choices[8]
|
|
48
|
+
assert_equal ["Oct", 10], month_choices[9]
|
|
49
|
+
assert_equal ["Nov", 11], month_choices[10]
|
|
50
|
+
assert_equal ["Dec", 12], month_choices[11]
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
test "when changing settings.default_month_names" do
|
|
54
|
+
settings.stubs(:default_month_names).at_least_once.returns(Date::ABBR_MONTHNAMES)
|
|
55
|
+
|
|
56
|
+
assert_equal ["Jan", 1], month_choices[0]
|
|
57
|
+
assert_equal ["Feb", 2], month_choices[1]
|
|
58
|
+
assert_equal ["Nov", 11], month_choices[10]
|
|
59
|
+
assert_equal ["Dec", 12], month_choices[11]
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
describe "year choices" do
|
|
64
|
+
setup do
|
|
65
|
+
settings.stubs(:default_year_loffset).returns(-60)
|
|
66
|
+
settings.stubs(:default_year_uoffset).returns(0)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
test "by default" do
|
|
70
|
+
assert_equal 61, year_choices.size
|
|
71
|
+
year_choices.each do |label, value|
|
|
72
|
+
assert_equal label, value
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
test "allows to pass in a lower upper offset" do
|
|
77
|
+
assert_equal 1, year_choices(0, 0).size
|
|
78
|
+
assert_equal [Date.today.year, Date.today.year], year_choices(0, 0).first
|
|
79
|
+
|
|
80
|
+
Date.expects(:today).at_least_once.returns(Date.new(2010, 5, 5))
|
|
81
|
+
assert_equal [2005, 2005], year_choices(-5).first
|
|
82
|
+
assert_equal [2015, 2015], year_choices(0, 5).last
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
test "allows to start with a higher lower upper offset" do
|
|
86
|
+
Date.expects(:today).at_least_once.returns(Date.new(2010, 5, 5))
|
|
87
|
+
assert_equal [2010, 2010], year_choices(0, -50).first
|
|
88
|
+
assert_equal [1960, 1960], year_choices(0, -50).last
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
test "allows to customize via global settings" do
|
|
92
|
+
settings.expects(:default_year_loffset).at_least_once.returns(0)
|
|
93
|
+
settings.expects(:default_year_uoffset).at_least_once.returns(6)
|
|
94
|
+
|
|
95
|
+
year = Time.now.year
|
|
96
|
+
expected = (year..(year+6)).to_a
|
|
97
|
+
expected = expected.zip(expected)
|
|
98
|
+
|
|
99
|
+
assert_equal expected, year_choices
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
data/test/test_html.rb
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class HtmlTest < Test::Unit::TestCase
|
|
4
|
+
include Sinatra::HtmlHelpers
|
|
5
|
+
|
|
6
|
+
describe "select_options" do
|
|
7
|
+
test "displays the pairs" do
|
|
8
|
+
html = select_options([['One', 1], ['Two', 2]])
|
|
9
|
+
doc = Nokogiri(%(<body>#{html}</body>))
|
|
10
|
+
|
|
11
|
+
assert_equal 'One', doc.search('option[value="1"]').text
|
|
12
|
+
assert_equal 'Two', doc.search('option[value="2"]').text
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
test "marks option as selected" do
|
|
16
|
+
html = select_options([['One', 1], ['Two', 2]], 1)
|
|
17
|
+
doc = Nokogiri(%(<body>#{html}</body>))
|
|
18
|
+
|
|
19
|
+
assert_equal 'One', doc.search('option[value="1"][selected]').text
|
|
20
|
+
assert_equal 'Two', doc.search('option[value="2"]').text
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
test "produces a prompt properly" do
|
|
24
|
+
html = select_options([['One', 1], ['Two', 2]], 1, "- Choose -")
|
|
25
|
+
doc = Nokogiri(%(<body>#{html}</body>))
|
|
26
|
+
|
|
27
|
+
assert_equal '- Choose -', doc.search('option[value=""]').text
|
|
28
|
+
assert_equal 'One', doc.search('option[value="1"][selected]').text
|
|
29
|
+
assert_equal 'Two', doc.search('option[value="2"]').text
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class HtmlHelpersTest < Test::Unit::TestCase
|
|
4
|
+
include Sinatra::HtmlHelpers
|
|
5
|
+
|
|
6
|
+
describe "tag" do
|
|
7
|
+
test "the basic no attr case" do
|
|
8
|
+
assert_equal '<div>Foobar</div>', tag('div', 'Foobar')
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
test "one attr case" do
|
|
12
|
+
assert_equal '<div class="baz">Foobar</div>',
|
|
13
|
+
tag('div', 'Foobar', :class => 'baz')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
test "many attrs case" do
|
|
17
|
+
assert_equal '<div class="baz bar" style="display:none">Foobar</div>',
|
|
18
|
+
tag('div', 'Foobar', :class => 'baz bar', :style => 'display:none')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test "funky attrs case" do
|
|
22
|
+
assert_equal '<div class="baz 'bar'" ' +
|
|
23
|
+
'style="display:"none"">Foobar</div>',
|
|
24
|
+
tag('div', 'Foobar', :class => "baz 'bar'", :style => 'display:"none"')
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
test "h" do
|
|
29
|
+
assert_equal "<Foo>", h("<Foo>")
|
|
30
|
+
assert_equal "<Foo bar='baz'>", h("<Foo bar='baz'>")
|
|
31
|
+
assert_equal "<Foo bar="baz">", h("<Foo bar=\"baz\">")
|
|
32
|
+
end
|
|
33
|
+
end
|
data/test/test_i18n.rb
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class I18nTest < Test::Unit::TestCase
|
|
4
|
+
include Rack::Test::Methods
|
|
5
|
+
|
|
6
|
+
class App < Sinatra::Base
|
|
7
|
+
use Rack::Session::Cookie
|
|
8
|
+
register Sinatra::I18nSupport
|
|
9
|
+
load_locales I18nTest::fixture_path('i18n')
|
|
10
|
+
|
|
11
|
+
get('/get') { t('article.new') }
|
|
12
|
+
get('/use/:locale') { |locale| session[:locale] = locale }
|
|
13
|
+
get('/time') { l(Time.at(141415926)) }
|
|
14
|
+
get('/short') { l(Time.at(141415926), format: :short) }
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def app
|
|
18
|
+
App.new
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test "#t" do
|
|
22
|
+
get '/get'
|
|
23
|
+
assert last_response.body == 'New Article'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
test "session[:locale]" do
|
|
27
|
+
get '/use/tl'
|
|
28
|
+
get '/get'
|
|
29
|
+
assert last_response.body == 'Bagong Artikulo'
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
test "#l" do
|
|
33
|
+
get '/time'
|
|
34
|
+
assert_equal 'Wed, 26. Jun 1974 02:12:06 +0800', last_response.body
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
test "#l in an alternate locale" do
|
|
38
|
+
get '/use/tl'
|
|
39
|
+
get '/time'
|
|
40
|
+
assert_equal 'Wed, 26. Hun 1974 02:12:06 +0800', last_response.body
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
test "#l short" do
|
|
45
|
+
get '/short'
|
|
46
|
+
assert_equal '26. Jun 02:12', last_response.body
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class NumericTest < Test::Unit::TestCase
|
|
4
|
+
include Sinatra::Numeric::Helpers
|
|
5
|
+
|
|
6
|
+
describe "currency" do
|
|
7
|
+
setup do
|
|
8
|
+
settings.stubs(:default_currency_unit).returns('$')
|
|
9
|
+
settings.stubs(:default_currency_precision).returns(2)
|
|
10
|
+
settings.stubs(:default_currency_separator).returns(',')
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
test "nil" do
|
|
14
|
+
assert_nil currency(nil)
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
test "defaults" do
|
|
18
|
+
assert_equal "$ 10.00", currency(10)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
test "with custom unit, precision" do
|
|
22
|
+
assert_equal "£ 10.0", currency(10, :unit => "£", :precision => 1)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
test "with 0 precision" do
|
|
26
|
+
assert_equal "$ 10", currency(10, :precision => 0)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
test "separators" do
|
|
30
|
+
assert_equal "$ 100.00", currency(100)
|
|
31
|
+
assert_equal "$ 1,000.00", currency(1_000)
|
|
32
|
+
assert_equal "$ 10,000.00", currency(10_000)
|
|
33
|
+
assert_equal "$ 100,000.00", currency(100_000)
|
|
34
|
+
assert_equal "$ 1,000,000.00", currency(1_000_000)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
test "specified defaults" do
|
|
38
|
+
settings.stubs(:default_currency_unit).returns('P')
|
|
39
|
+
settings.stubs(:default_currency_precision).returns(3)
|
|
40
|
+
settings.stubs(:default_currency_separator).returns(' ')
|
|
41
|
+
|
|
42
|
+
assert_equal "P 100.000", currency(100)
|
|
43
|
+
assert_equal "P 1 000.000", currency(1_000)
|
|
44
|
+
assert_equal "P 10 000.000", currency(10_000)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
describe "percentage" do
|
|
49
|
+
test "nil" do
|
|
50
|
+
assert_nil percentage(nil)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
test "various percentages" do
|
|
54
|
+
assert_equal '0.01%', percentage(0.01)
|
|
55
|
+
assert_equal '0.10%', percentage(0.10)
|
|
56
|
+
assert_equal '1%', percentage(1.00)
|
|
57
|
+
assert_equal '10.01%', percentage(10.01)
|
|
58
|
+
assert_equal '99.99%', percentage(99.99)
|
|
59
|
+
assert_equal '100%', percentage(100)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
class OhmErrorTest < Test::Unit::TestCase
|
|
4
|
+
describe "errors_on" do
|
|
5
|
+
include Rack::Test::Methods
|
|
6
|
+
|
|
7
|
+
class App < Sinatra::Base
|
|
8
|
+
FORM = (<<-FORM).gsub(/^ {6}/, '')
|
|
9
|
+
- errors_on @post do |e|
|
|
10
|
+
- e.on [:email, :not_present], "Email is required."
|
|
11
|
+
- e.on [:name, :not_present], "Name is required."
|
|
12
|
+
FORM
|
|
13
|
+
|
|
14
|
+
helpers Sinatra::OhmErrorHelpers
|
|
15
|
+
|
|
16
|
+
class Post < Ohm::Model
|
|
17
|
+
attribute :email
|
|
18
|
+
attribute :name
|
|
19
|
+
|
|
20
|
+
def validate
|
|
21
|
+
assert_present :email
|
|
22
|
+
assert_present :name
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
get '/form' do
|
|
27
|
+
@post = Post.new
|
|
28
|
+
@post.valid?
|
|
29
|
+
|
|
30
|
+
haml FORM
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def app
|
|
35
|
+
App.new
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
test "produces proper errors" do
|
|
39
|
+
get '/form'
|
|
40
|
+
|
|
41
|
+
doc = Nokogiri(last_response.body)
|
|
42
|
+
|
|
43
|
+
assert_equal 1, doc.search('div.errors').length
|
|
44
|
+
|
|
45
|
+
assert_equal 'Email is required.',
|
|
46
|
+
doc.search('div.errors > ul > li:first-child').text
|
|
47
|
+
|
|
48
|
+
assert_equal 'Name is required.',
|
|
49
|
+
doc.search('div.errors > ul > li:last-child').text
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: sinatra-support
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
prerelease:
|
|
5
|
+
version: 1.0.1
|
|
6
|
+
platform: ruby
|
|
7
|
+
authors:
|
|
8
|
+
- Cyril David
|
|
9
|
+
- Rico Sta. Cruz
|
|
10
|
+
autorequire:
|
|
11
|
+
bindir: bin
|
|
12
|
+
cert_chain: []
|
|
13
|
+
|
|
14
|
+
date: 2011-03-27 00:00:00 +08:00
|
|
15
|
+
default_executable:
|
|
16
|
+
dependencies:
|
|
17
|
+
- !ruby/object:Gem::Dependency
|
|
18
|
+
name: sinatra
|
|
19
|
+
prerelease: false
|
|
20
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
21
|
+
none: false
|
|
22
|
+
requirements:
|
|
23
|
+
- - ">="
|
|
24
|
+
- !ruby/object:Gem::Version
|
|
25
|
+
version: "1.0"
|
|
26
|
+
type: :runtime
|
|
27
|
+
version_requirements: *id001
|
|
28
|
+
- !ruby/object:Gem::Dependency
|
|
29
|
+
name: rack-test
|
|
30
|
+
prerelease: false
|
|
31
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
32
|
+
none: false
|
|
33
|
+
requirements:
|
|
34
|
+
- - ">="
|
|
35
|
+
- !ruby/object:Gem::Version
|
|
36
|
+
version: "0"
|
|
37
|
+
type: :development
|
|
38
|
+
version_requirements: *id002
|
|
39
|
+
- !ruby/object:Gem::Dependency
|
|
40
|
+
name: ohm
|
|
41
|
+
prerelease: false
|
|
42
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
|
43
|
+
none: false
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: "0"
|
|
48
|
+
type: :development
|
|
49
|
+
version_requirements: *id003
|
|
50
|
+
- !ruby/object:Gem::Dependency
|
|
51
|
+
name: haml
|
|
52
|
+
prerelease: false
|
|
53
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
|
54
|
+
none: false
|
|
55
|
+
requirements:
|
|
56
|
+
- - ">="
|
|
57
|
+
- !ruby/object:Gem::Version
|
|
58
|
+
version: "0"
|
|
59
|
+
type: :development
|
|
60
|
+
version_requirements: *id004
|
|
61
|
+
- !ruby/object:Gem::Dependency
|
|
62
|
+
name: mocha
|
|
63
|
+
prerelease: false
|
|
64
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
|
65
|
+
none: false
|
|
66
|
+
requirements:
|
|
67
|
+
- - ">="
|
|
68
|
+
- !ruby/object:Gem::Version
|
|
69
|
+
version: "0"
|
|
70
|
+
type: :development
|
|
71
|
+
version_requirements: *id005
|
|
72
|
+
- !ruby/object:Gem::Dependency
|
|
73
|
+
name: nokogiri
|
|
74
|
+
prerelease: false
|
|
75
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
|
76
|
+
none: false
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: "0"
|
|
81
|
+
type: :development
|
|
82
|
+
version_requirements: *id006
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: contest
|
|
85
|
+
prerelease: false
|
|
86
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
|
87
|
+
none: false
|
|
88
|
+
requirements:
|
|
89
|
+
- - ">="
|
|
90
|
+
- !ruby/object:Gem::Version
|
|
91
|
+
version: "0"
|
|
92
|
+
type: :development
|
|
93
|
+
version_requirements: *id007
|
|
94
|
+
description: Sinatra-support includes many helpers for forms, errors and many amazing things.
|
|
95
|
+
email:
|
|
96
|
+
- cyx.ucron@gmail.com
|
|
97
|
+
- rico@sinefunc.com
|
|
98
|
+
executables: []
|
|
99
|
+
|
|
100
|
+
extensions: []
|
|
101
|
+
|
|
102
|
+
extra_rdoc_files: []
|
|
103
|
+
|
|
104
|
+
files:
|
|
105
|
+
- lib/sinatra/support/compat-1.8.6.rb
|
|
106
|
+
- lib/sinatra/support/country.rb
|
|
107
|
+
- lib/sinatra/support/countryhelpers.rb
|
|
108
|
+
- lib/sinatra/support/csssupport.rb
|
|
109
|
+
- lib/sinatra/support/dateforms.rb
|
|
110
|
+
- lib/sinatra/support/errorhelpers.rb
|
|
111
|
+
- lib/sinatra/support/htmlhelpers.rb
|
|
112
|
+
- lib/sinatra/support/i18nsupport.rb
|
|
113
|
+
- lib/sinatra/support/ifhelpers.rb
|
|
114
|
+
- lib/sinatra/support/jssupport.rb
|
|
115
|
+
- lib/sinatra/support/numeric.rb
|
|
116
|
+
- lib/sinatra/support/ohmerrorhelpers.rb
|
|
117
|
+
- lib/sinatra/support/version.rb
|
|
118
|
+
- lib/sinatra/support.rb
|
|
119
|
+
- test/fixtures/i18n/en.yml
|
|
120
|
+
- test/fixtures/i18n/tl.yml
|
|
121
|
+
- test/helper.rb
|
|
122
|
+
- test/test_country.rb
|
|
123
|
+
- test/test_date.rb
|
|
124
|
+
- test/test_date_app.rb
|
|
125
|
+
- test/test_date_form.rb
|
|
126
|
+
- test/test_html.rb
|
|
127
|
+
- test/test_htmlhelpers.rb
|
|
128
|
+
- test/test_i18n.rb
|
|
129
|
+
- test/test_numeric.rb
|
|
130
|
+
- test/test_ohmerror.rb
|
|
131
|
+
- HISTORY.md
|
|
132
|
+
- Rakefile
|
|
133
|
+
has_rdoc: true
|
|
134
|
+
homepage: http://github.com/sinefunc/sinatra-support
|
|
135
|
+
licenses: []
|
|
136
|
+
|
|
137
|
+
post_install_message:
|
|
138
|
+
rdoc_options: []
|
|
139
|
+
|
|
140
|
+
require_paths:
|
|
141
|
+
- lib
|
|
142
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
143
|
+
none: false
|
|
144
|
+
requirements:
|
|
145
|
+
- - ">="
|
|
146
|
+
- !ruby/object:Gem::Version
|
|
147
|
+
version: "0"
|
|
148
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
149
|
+
none: false
|
|
150
|
+
requirements:
|
|
151
|
+
- - ">="
|
|
152
|
+
- !ruby/object:Gem::Version
|
|
153
|
+
version: "0"
|
|
154
|
+
requirements: []
|
|
155
|
+
|
|
156
|
+
rubyforge_project:
|
|
157
|
+
rubygems_version: 1.5.0
|
|
158
|
+
signing_key:
|
|
159
|
+
specification_version: 3
|
|
160
|
+
summary: A gem with many essential helpers for creating web apps with Sinatra.
|
|
161
|
+
test_files: []
|
|
162
|
+
|