merb-helpers 0.9.8
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/LICENSE +20 -0
- data/README +180 -0
- data/Rakefile +77 -0
- data/TODO +5 -0
- data/lib/merb-helpers.rb +38 -0
- data/lib/merb-helpers/core_ext.rb +57 -0
- data/lib/merb-helpers/core_ext/numeric.rb +388 -0
- data/lib/merb-helpers/date_time_formatting.rb +127 -0
- data/lib/merb-helpers/date_time_helpers.rb +190 -0
- data/lib/merb-helpers/form/builder.rb +410 -0
- data/lib/merb-helpers/form/helpers.rb +448 -0
- data/lib/merb-helpers/form_helpers.rb +24 -0
- data/lib/merb-helpers/tag_helpers.rb +61 -0
- data/lib/merb-helpers/text_helpers.rb +61 -0
- data/lib/merb-helpers/time_dsl.rb +59 -0
- data/spec/core_ext_spec.rb +19 -0
- data/spec/fixture/app/controllers/application.rb +4 -0
- data/spec/fixture/app/controllers/bound_check_box.rb +2 -0
- data/spec/fixture/app/controllers/bound_file_field.rb +2 -0
- data/spec/fixture/app/controllers/bound_hidden_field.rb +2 -0
- data/spec/fixture/app/controllers/bound_option_tag.rb +2 -0
- data/spec/fixture/app/controllers/bound_password_field.rb +2 -0
- data/spec/fixture/app/controllers/bound_radio_button.rb +2 -0
- data/spec/fixture/app/controllers/bound_radio_group.rb +2 -0
- data/spec/fixture/app/controllers/bound_select.rb +2 -0
- data/spec/fixture/app/controllers/bound_text_area.rb +2 -0
- data/spec/fixture/app/controllers/bound_text_field.rb +2 -0
- data/spec/fixture/app/controllers/button.rb +2 -0
- data/spec/fixture/app/controllers/check_box.rb +2 -0
- data/spec/fixture/app/controllers/custom_builder.rb +2 -0
- data/spec/fixture/app/controllers/delete_button.rb +2 -0
- data/spec/fixture/app/controllers/exceptions.rb +25 -0
- data/spec/fixture/app/controllers/field_set.rb +2 -0
- data/spec/fixture/app/controllers/fields_for.rb +3 -0
- data/spec/fixture/app/controllers/file_field.rb +2 -0
- data/spec/fixture/app/controllers/foo.rb +23 -0
- data/spec/fixture/app/controllers/form.rb +2 -0
- data/spec/fixture/app/controllers/form_for.rb +2 -0
- data/spec/fixture/app/controllers/hidden_field.rb +2 -0
- data/spec/fixture/app/controllers/label.rb +3 -0
- data/spec/fixture/app/controllers/numeric_ext.rb +3 -0
- data/spec/fixture/app/controllers/option_tag.rb +2 -0
- data/spec/fixture/app/controllers/password_field.rb +2 -0
- data/spec/fixture/app/controllers/radio_button.rb +2 -0
- data/spec/fixture/app/controllers/radio_group.rb +2 -0
- data/spec/fixture/app/controllers/select.rb +2 -0
- data/spec/fixture/app/controllers/specs_controller.rb +11 -0
- data/spec/fixture/app/controllers/submit.rb +2 -0
- data/spec/fixture/app/controllers/tag_helper.rb +21 -0
- data/spec/fixture/app/controllers/text_area.rb +2 -0
- data/spec/fixture/app/controllers/text_field.rb +3 -0
- data/spec/fixture/app/helpers/global_helpers.rb +8 -0
- data/spec/fixture/app/models/fake_dm_model.rb +25 -0
- data/spec/fixture/app/models/first_generic_fake_model.rb +57 -0
- data/spec/fixture/app/models/second_generic_fake_model.rb +18 -0
- data/spec/fixture/app/models/third_generic_fake_model.rb +3 -0
- data/spec/fixture/app/views/bound_check_box_specs/basic.html.erb +4 -0
- data/spec/fixture/app/views/bound_check_box_specs/checked.html.erb +4 -0
- data/spec/fixture/app/views/bound_check_box_specs/errors.html.erb +4 -0
- data/spec/fixture/app/views/bound_check_box_specs/label.html.erb +3 -0
- data/spec/fixture/app/views/bound_check_box_specs/on_and_off.html.erb +3 -0
- data/spec/fixture/app/views/bound_check_box_specs/raise_value_error.html.erb +3 -0
- data/spec/fixture/app/views/bound_file_field_specs/additional_attributes.html.erb +3 -0
- data/spec/fixture/app/views/bound_file_field_specs/takes_string.html.erb +3 -0
- data/spec/fixture/app/views/bound_file_field_specs/with_label.html.erb +3 -0
- data/spec/fixture/app/views/bound_hidden_field_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/bound_hidden_field_specs/errors.html.erb +3 -0
- data/spec/fixture/app/views/bound_hidden_field_specs/hidden_error.html.erb +3 -0
- data/spec/fixture/app/views/bound_hidden_field_specs/label.html.erb +3 -0
- data/spec/fixture/app/views/bound_option_tag_specs/grouped.html.erb +3 -0
- data/spec/fixture/app/views/bound_option_tag_specs/nested.html.erb +3 -0
- data/spec/fixture/app/views/bound_option_tag_specs/text_and_value.html.erb +4 -0
- data/spec/fixture/app/views/bound_password_field_specs/attributes.html.erb +3 -0
- data/spec/fixture/app/views/bound_password_field_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/bound_password_field_specs/label.html.erb +3 -0
- data/spec/fixture/app/views/bound_radio_button_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/bound_radio_group_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/bound_radio_group_specs/hashes.html.erb +3 -0
- data/spec/fixture/app/views/bound_radio_group_specs/mixed.html.erb +4 -0
- data/spec/fixture/app/views/bound_radio_group_specs/override_id.html.erb +3 -0
- data/spec/fixture/app/views/bound_select_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/bound_select_specs/blank.html.erb +3 -0
- data/spec/fixture/app/views/bound_select_specs/multiple.html.erb +3 -0
- data/spec/fixture/app/views/bound_select_specs/prompt.html.erb +3 -0
- data/spec/fixture/app/views/bound_select_specs/with_options.html.erb +3 -0
- data/spec/fixture/app/views/bound_select_specs/with_options_with_blank.html.erb +3 -0
- data/spec/fixture/app/views/bound_text_area_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/bound_text_field_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/button_specs/button_with_label.html.erb +1 -0
- data/spec/fixture/app/views/button_specs/button_with_values.html.erb +1 -0
- data/spec/fixture/app/views/button_specs/disabled_button.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/boolean.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/label.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/on_off_is_boolean.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/raise_unless_both_on_and_off.html.erb +2 -0
- data/spec/fixture/app/views/check_box_specs/raises_error_if_not_boolean.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/raises_error_if_on_off_and_boolean_false.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/simple.html.erb +1 -0
- data/spec/fixture/app/views/check_box_specs/to_string.html.erb +8 -0
- data/spec/fixture/app/views/check_box_specs/unchecked.html.erb +2 -0
- data/spec/fixture/app/views/custom_builder_specs/everything.html.erb +10 -0
- data/spec/fixture/app/views/delete_button_specs/delete_with_explicit_url.html.erb +1 -0
- data/spec/fixture/app/views/delete_button_specs/delete_with_extra_params.html.erb +1 -0
- data/spec/fixture/app/views/delete_button_specs/delete_with_label.html.erb +1 -0
- data/spec/fixture/app/views/delete_button_specs/simple_delete.html.erb +1 -0
- data/spec/fixture/app/views/exeptions/client_error.html.erb +37 -0
- data/spec/fixture/app/views/exeptions/internal_server_error.html.erb +216 -0
- data/spec/fixture/app/views/exeptions/not_acceptable.html.erb +38 -0
- data/spec/fixture/app/views/exeptions/not_found.html.erb +40 -0
- data/spec/fixture/app/views/fields_for_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/fields_for_specs/midstream.html.erb +7 -0
- data/spec/fixture/app/views/fields_for_specs/nil.html.erb +3 -0
- data/spec/fixture/app/views/fieldset_specs/legend.html.erb +3 -0
- data/spec/fixture/app/views/file_field_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/file_field_specs/makes_multipart.html.erb +3 -0
- data/spec/fixture/app/views/file_field_specs/with_label.html.erb +1 -0
- data/spec/fixture/app/views/file_field_specs/with_values.html.erb +1 -0
- data/spec/fixture/app/views/foo/bar.html.erb +0 -0
- data/spec/fixture/app/views/form_for_specs/basic.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/create_a_form.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/create_a_multipart_form.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/fake_delete_if_set.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/fake_put_if_set.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/get_if_set.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/post_by_default.html.erb +3 -0
- data/spec/fixture/app/views/form_specs/resourceful_form.html.erb +3 -0
- data/spec/fixture/app/views/hidden_field_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/hidden_field_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/hidden_field_specs/label.html.erb +1 -0
- data/spec/fixture/app/views/label_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/layout/application.html.erb +11 -0
- data/spec/fixture/app/views/numeric_ext_specs/minutes_to_hours.html.erb +1 -0
- data/spec/fixture/app/views/numeric_ext_specs/to_concurrency_default.html.erb +1 -0
- data/spec/fixture/app/views/numeric_ext_specs/two_digits.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/array.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/clean.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/collection.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/multiple_selects.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/no_extra_attributes.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/optgroups.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/selected.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/with_blank.html.erb +1 -0
- data/spec/fixture/app/views/option_tag_specs/with_prompt.html.erb +1 -0
- data/spec/fixture/app/views/password_field_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/password_field_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/radio_button_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/radio_button_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/radio_button_specs/label.html.erb +1 -0
- data/spec/fixture/app/views/radio_group_specs/attributes.html.erb +1 -0
- data/spec/fixture/app/views/radio_group_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/radio_group_specs/hash.html.erb +1 -0
- data/spec/fixture/app/views/radio_group_specs/specific_attributes.html.erb +1 -0
- data/spec/fixture/app/views/select_specs/blank.html.erb +1 -0
- data/spec/fixture/app/views/select_specs/multiple.html.erb +1 -0
- data/spec/fixture/app/views/submit_specs/disabled_submit.html.erb +1 -0
- data/spec/fixture/app/views/submit_specs/submit_with_label.html.erb +1 -0
- data/spec/fixture/app/views/submit_specs/submit_with_values.html.erb +1 -0
- data/spec/fixture/app/views/tag_helper/nested_tags.html.erb +5 -0
- data/spec/fixture/app/views/tag_helper/tag_with_attributes.html.erb +1 -0
- data/spec/fixture/app/views/tag_helper/tag_with_content.html.erb +1 -0
- data/spec/fixture/app/views/tag_helper/tag_with_content_in_the_block.html.erb +3 -0
- data/spec/fixture/app/views/text_area_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/text_area_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/text_area_specs/label.html.erb +1 -0
- data/spec/fixture/app/views/text_area_specs/nil.html.erb +1 -0
- data/spec/fixture/app/views/text_field_specs/basic.html.erb +1 -0
- data/spec/fixture/app/views/text_field_specs/class.html.erb +1 -0
- data/spec/fixture/app/views/text_field_specs/disabled.html.erb +1 -0
- data/spec/fixture/app/views/text_field_specs/label.html.erb +1 -0
- data/spec/fixture/config/environments/development.rb +6 -0
- data/spec/fixture/config/environments/production.rb +5 -0
- data/spec/fixture/config/environments/test.rb +6 -0
- data/spec/fixture/config/init.rb +46 -0
- data/spec/fixture/config/rack.rb +11 -0
- data/spec/fixture/config/router.rb +36 -0
- data/spec/fixture/log/merb.main.pid +1 -0
- data/spec/fixture/log/merb_test.log +624 -0
- data/spec/fixture/public/images/merb.jpg +0 -0
- data/spec/fixture/public/merb.fcgi +4 -0
- data/spec/fixture/public/stylesheets/master.css +119 -0
- data/spec/merb_helpers_config_spec.rb +82 -0
- data/spec/merb_helpers_date_time_spec.rb +257 -0
- data/spec/merb_helpers_form_spec.rb +1266 -0
- data/spec/merb_helpers_tag_helper_spec.rb +46 -0
- data/spec/merb_helpers_text_spec.rb +67 -0
- data/spec/numeric_extlib_spec.rb +135 -0
- data/spec/ordinalize_spec.rb +51 -0
- data/spec/spec_helper.rb +149 -0
- data/spec/time_dsl_spec.rb +43 -0
- metadata +303 -0
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
|
|
3
|
+
Merb::Router.prepare do
|
|
4
|
+
default_routes
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
describe Merb::Helpers::Tag do
|
|
8
|
+
include Merb::Helpers::Tag
|
|
9
|
+
|
|
10
|
+
describe "#tag" do
|
|
11
|
+
it 'generates <div>content</div> from tag :div, "content"' do
|
|
12
|
+
response = get "/tag_helper/tag_with_content"
|
|
13
|
+
|
|
14
|
+
response.body.should match_tag(:div)
|
|
15
|
+
response.body.should include("Astral Projection ~ Dancing Galaxy")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it 'outputs content returned by the block when block is given' do
|
|
19
|
+
response = get "/tag_helper/tag_with_content_in_the_block"
|
|
20
|
+
|
|
21
|
+
response.body.should match_tag(:div)
|
|
22
|
+
response.body.should include("Astral Projection ~ Trust in Trance 1")
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'generates tag attributes for all of keys of last Hash' do
|
|
26
|
+
response = get "/tag_helper/tag_with_attributes"
|
|
27
|
+
|
|
28
|
+
doc = Hpricot(response.body)
|
|
29
|
+
(doc/"div.psy").size.should == 1
|
|
30
|
+
(doc/"div#bands").size.should == 1
|
|
31
|
+
(doc/"div[@invalid_attr='at least in html']").size.should == 1
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it 'handles nesting of tags/blocks' do
|
|
35
|
+
response = get "/tag_helper/nested_tags"
|
|
36
|
+
|
|
37
|
+
doc = Hpricot(response.body)
|
|
38
|
+
(doc/"div.discography").size.should == 1
|
|
39
|
+
(doc/"div.discography"/"ul.albums").size.should == 1
|
|
40
|
+
(doc/"div.discography"/"ul.albums"/"li.first").size.should == 1
|
|
41
|
+
|
|
42
|
+
(doc/"#tit").size.should == 1
|
|
43
|
+
(doc/"#tit").first.inner_html.should == "Trust in Trance 2"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "cycle" do
|
|
4
|
+
include Merb::Helpers::Text
|
|
5
|
+
|
|
6
|
+
it "do basic cycling" do
|
|
7
|
+
cycle("one", 2, "3").should == 'one'
|
|
8
|
+
cycle("one", 2, "3").should == '2'
|
|
9
|
+
cycle("one", 2, "3").should == '3'
|
|
10
|
+
cycle("one", 2, "3").should == 'one'
|
|
11
|
+
cycle("one", 2, "3").should == '2'
|
|
12
|
+
cycle("one", 2, "3").should == '3'
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should reset with new values" do
|
|
16
|
+
cycle("even", "odd").should == 'even'
|
|
17
|
+
cycle("even", "odd").should == 'odd'
|
|
18
|
+
cycle("even", "odd").should == 'even'
|
|
19
|
+
cycle("even", "odd").should == 'odd'
|
|
20
|
+
cycle(1, 2, 3).should == '1'
|
|
21
|
+
cycle(1, 2, 3).should == '2'
|
|
22
|
+
cycle(1, 2, 3).should == '3'
|
|
23
|
+
cycle(1, 2, 3).should == '1'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "should support named cycles" do
|
|
27
|
+
cycle(1, 2, 3, :name => "numbers").should == "1"
|
|
28
|
+
cycle("red", "blue", :name => "colors").should == "red"
|
|
29
|
+
cycle(1, 2, 3, :name => "numbers").should == "2"
|
|
30
|
+
cycle("red", "blue", :name => "colors").should == "blue"
|
|
31
|
+
cycle(1, 2, 3, :name => "numbers").should == "3"
|
|
32
|
+
cycle("red", "blue", :name => "colors").should == "red"
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "should use a named cycle called 'default' by default" do
|
|
36
|
+
cycle(1, 2, 3).should == "1"
|
|
37
|
+
cycle(1, 2, 3, :name => "default").should == "2"
|
|
38
|
+
cycle(1, 2, 3).should == "3"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should be able to be reset" do
|
|
42
|
+
cycle(1, 2, 3).should == "1"
|
|
43
|
+
cycle(1, 2, 3).should == "2"
|
|
44
|
+
reset_cycle
|
|
45
|
+
cycle(1, 2, 3).should == "1"
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
it "should be able to reset a named cycle" do
|
|
49
|
+
cycle(1, 2, 3, :name => "numbers").should == "1"
|
|
50
|
+
cycle("red", "blue", :name => "colors").should == "red"
|
|
51
|
+
reset_cycle("numbers")
|
|
52
|
+
cycle(1, 2, 3, :name => "numbers").should == "1"
|
|
53
|
+
cycle("red", "blue", :name => "colors").should == "blue"
|
|
54
|
+
cycle(1, 2, 3, :name => "numbers").should == "2"
|
|
55
|
+
cycle("red", "blue", :name => "colors").should == "red"
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
it "should work with things other than strings" do
|
|
59
|
+
class Red; def to_s; 'red'; end; end;
|
|
60
|
+
class Blue; def to_s; 'blue'; end; end;
|
|
61
|
+
red = Red.new
|
|
62
|
+
blue = Blue.new
|
|
63
|
+
cycle(red, blue).should == "red"
|
|
64
|
+
cycle(red, blue).should == "blue"
|
|
65
|
+
cycle(red, blue).should == "red"
|
|
66
|
+
end
|
|
67
|
+
end
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "Numeric helpers" do
|
|
4
|
+
|
|
5
|
+
before :each do
|
|
6
|
+
@controller = NumericExtSpecs.new(Merb::Request.new({}))
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "with_delimiter" do
|
|
10
|
+
|
|
11
|
+
before(:each) do
|
|
12
|
+
@number = 12345678
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "should use the default formatting for numbers" do
|
|
16
|
+
@number.with_delimiter.should == "12,345,678"
|
|
17
|
+
@number.with_delimiter.should == @number.with_delimiter(:us)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
it "should support passing another format" do
|
|
21
|
+
@number.with_delimiter(:fr).should == "12 345 678"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "should support passing overwriting options" do
|
|
25
|
+
@number.with_delimiter(:fr, :delimiter => ',').should == "12,345,678"
|
|
26
|
+
12345678.9.with_delimiter(:fr, :separator => ' et ').should == "12 345 678 et 9"
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
describe "with_precision" do
|
|
32
|
+
it "should use a default precision" do
|
|
33
|
+
111.2345.with_precision.should == "111.235"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should support other precision formats" do
|
|
37
|
+
111.2345.with_precision(:uk).should == "111.235"
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "should support overwriting precision options" do
|
|
41
|
+
111.2345.with_precision(:uk, :precision => 1).should == "111.2"
|
|
42
|
+
1234.567.with_precision(:us, :precision => 1, :separator => ',', :delimiter => '-').should == "1-234,6"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
describe "to_concurrency" do
|
|
48
|
+
|
|
49
|
+
before(:each) do
|
|
50
|
+
@number = 1234567890.50
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it "should use the US$ by default" do
|
|
54
|
+
@number.to_currency.should == "$1,234,567,890.50"
|
|
55
|
+
@number.to_currency.should == @number.to_currency(:us)
|
|
56
|
+
@number.to_currency.should == @number.to_currency(:default)
|
|
57
|
+
result = @controller.render :to_concurrency_default
|
|
58
|
+
result.should == "$1,234,567,890.50"
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
it "should use the precision settings of the format" do
|
|
62
|
+
1234567890.506.to_currency(:us).should == "$1,234,567,890.51"
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
it "should support other formats" do
|
|
66
|
+
@number.to_currency(:uk).should == "£1,234,567,890.50"
|
|
67
|
+
@number.to_currency(:fr).should == "1 234 567 890,50€"
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
it "should support overwriting options" do
|
|
71
|
+
1234567890.506.to_currency(:us, :precision => 1).should == "$1,234,567,890.5"
|
|
72
|
+
1234567890.516.to_currency(:us, :unit => "€").should == "€1,234,567,890.52"
|
|
73
|
+
1234567890.506.to_currency(:us, :precision => 3, :unit => "€").should == "€1,234,567,890.506"
|
|
74
|
+
1234567890.506.to_currency(:aus, :unit => "$AUD", :format => '%n %u').should == "1,234,567,890.51 $AUD"
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe "Numeric::Transformer formats" do
|
|
80
|
+
|
|
81
|
+
it "should be able to add a new format" do
|
|
82
|
+
Numeric::Transformer.default_format.should be_instance_of(Hash)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
it "should be able to change the default format" do
|
|
86
|
+
original_default_format = Numeric::Transformer.default_format
|
|
87
|
+
original_default_format[:currency][:unit].should == "$"
|
|
88
|
+
Numeric::Transformer.change_default_format(:fr)
|
|
89
|
+
Numeric::Transformer.default_format.should_not == original_default_format
|
|
90
|
+
Numeric::Transformer.default_format[:currency][:unit].should == "€"
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
it "should be able to add a format" do
|
|
94
|
+
merb_format = {:merb =>
|
|
95
|
+
{ :number => {
|
|
96
|
+
:precision => 3,
|
|
97
|
+
:delimiter => ' ',
|
|
98
|
+
:separator => ','
|
|
99
|
+
},
|
|
100
|
+
:currency => {
|
|
101
|
+
:unit => 'Merbollars',
|
|
102
|
+
:format => '%n %u',
|
|
103
|
+
:precision => 2
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
Numeric::Transformer.add_format(merb_format)
|
|
108
|
+
Numeric::Transformer.change_default_format(:merb)
|
|
109
|
+
12345.to_currency.should == "12 345,00 Merbollars"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
describe "other misc numeric helpers" do
|
|
115
|
+
|
|
116
|
+
describe "two_digits" do
|
|
117
|
+
it "should convert a numeric value in a 2 digit string (prepend with a zero if needed)" do
|
|
118
|
+
7.two_digits.should == "07"
|
|
119
|
+
result = @controller.render :two_digits
|
|
120
|
+
result.should == "07"
|
|
121
|
+
end
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
describe "minutes_to_hours" do
|
|
125
|
+
it "should convert a number of minutes into an hour representation" do
|
|
126
|
+
result = @controller.render :minutes_to_hours
|
|
127
|
+
result.should == "05:15"
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "#strftime_ordinalized" do
|
|
4
|
+
|
|
5
|
+
before(:all) do
|
|
6
|
+
@date = Date.parse('2008-5-3')
|
|
7
|
+
@time = Time.parse('2008-5-3 14:00')
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
it "should ordinalize a date even without a locale passed" do
|
|
11
|
+
@date.strftime_ordinalized('%b %d, %Y').should == "May 3rd, 2008"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
describe "to_ordinalized_s" do
|
|
17
|
+
|
|
18
|
+
before(:each) do
|
|
19
|
+
@date = Date.parse('2008-5-3')
|
|
20
|
+
@time = Time.parse('2008-5-3 14:00')
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "should render a date using #to_s if no format is passed" do
|
|
24
|
+
@date.to_ordinalized_s.should == @date.to_s
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it "should render a time using #to_s if no format is passed" do
|
|
28
|
+
@time.to_ordinalized_s.should == @time.to_s
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it "should render a date or time using the db format" do
|
|
32
|
+
@date.to_ordinalized_s(:db).should == "2008-05-03 00:00:00"
|
|
33
|
+
@time.to_ordinalized_s(:db).should == "2008-05-03 14:00:00"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "should render a date or time using the long format" do
|
|
37
|
+
@date.to_ordinalized_s(:long).should == "May 3rd, 2008 00:00"
|
|
38
|
+
@time.to_ordinalized_s(:long).should == "May 3rd, 2008 14:00"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it "should render a date or time using the time format" do
|
|
42
|
+
@date.to_ordinalized_s(:time).should == "00:00"
|
|
43
|
+
@time.to_ordinalized_s(:time).should == "14:00"
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
it "should render a date or a time using the short format" do
|
|
47
|
+
@date.to_ordinalized_s(:short).should == "3rd May 00:00"
|
|
48
|
+
@time.to_ordinalized_s(:short).should == "3rd May 14:00"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
end
|
data/spec/spec_helper.rb
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
require "rubygems"
|
|
2
|
+
require "spec"
|
|
3
|
+
require "merb-core"
|
|
4
|
+
require File.join(File.dirname(__FILE__),"..",'lib',"merb-helpers")
|
|
5
|
+
require "date"
|
|
6
|
+
|
|
7
|
+
# Please read merb_helpers_form_spec.rb
|
|
8
|
+
# for more info on how to test helpers
|
|
9
|
+
# full stack specs are required
|
|
10
|
+
# use the app in spec/fixture to test helpers
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
default_options = {:environment => 'test', :adapter => 'runner'}.merge({:merb_root => File.dirname(__FILE__) / 'fixture'})
|
|
14
|
+
options = default_options.merge($START_OPTIONS || {})
|
|
15
|
+
Merb.start_environment(options)
|
|
16
|
+
|
|
17
|
+
def unload_merb_helpers
|
|
18
|
+
Merb.class_eval do
|
|
19
|
+
remove_const("Helpers") if defined?(Merb::Helpers)
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def reload_merb_helpers
|
|
24
|
+
unload_merb_helpers
|
|
25
|
+
load(MERB_HELPERS_ROOT + "/lib/merb-helpers.rb")
|
|
26
|
+
Merb::Helpers.load
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
class FakeErrors
|
|
30
|
+
|
|
31
|
+
def initialize(model)
|
|
32
|
+
@model = model
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def on(name)
|
|
36
|
+
name.to_s.include?("bad")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
class FakeColumn
|
|
42
|
+
attr_accessor :name, :type
|
|
43
|
+
|
|
44
|
+
def initialize(name, type)
|
|
45
|
+
@name, @type = name, type
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
# -- Global custom matchers --
|
|
54
|
+
|
|
55
|
+
# A better +be_kind_of+ with more informative error messages.
|
|
56
|
+
#
|
|
57
|
+
# The default +be_kind_of+ just says
|
|
58
|
+
#
|
|
59
|
+
# "expected to return true but got false"
|
|
60
|
+
#
|
|
61
|
+
# This one says
|
|
62
|
+
#
|
|
63
|
+
# "expected File but got Tempfile"
|
|
64
|
+
|
|
65
|
+
module Merb
|
|
66
|
+
module Test
|
|
67
|
+
module RspecMatchers
|
|
68
|
+
class IncludeLog
|
|
69
|
+
def initialize(expected)
|
|
70
|
+
@expected = expected
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def matches?(target)
|
|
74
|
+
target.log.rewind
|
|
75
|
+
@text = target.log.read
|
|
76
|
+
@text =~ (String === @expected ? /#{Regexp.escape @expected}/ : @expected)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def failure_message
|
|
80
|
+
"expected to find `#{@expected}' in the log but got:\n" <<
|
|
81
|
+
@text.map {|s| " #{s}" }.join
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def negative_failure_message
|
|
85
|
+
"exected not to find `#{@expected}' in the log but got:\n" <<
|
|
86
|
+
@text.map {|s| " #{s}" }.join
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def description
|
|
90
|
+
"include #{@text} in the log"
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
class BeKindOf
|
|
95
|
+
def initialize(expected) # + args
|
|
96
|
+
@expected = expected
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def matches?(target)
|
|
100
|
+
@target = target
|
|
101
|
+
@target.kind_of?(@expected)
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def failure_message
|
|
105
|
+
"expected #{@expected} but got #{@target.class}"
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def negative_failure_message
|
|
109
|
+
"expected #{@expected} to not be #{@target.class}"
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def description
|
|
113
|
+
"be_kind_of #{@target}"
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def be_kind_of(expected) # + args
|
|
118
|
+
BeKindOf.new(expected)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def include_log(expected)
|
|
122
|
+
IncludeLog.new(expected)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
module Helper
|
|
127
|
+
def running(&blk) blk; end
|
|
128
|
+
|
|
129
|
+
def executing(&blk) blk; end
|
|
130
|
+
|
|
131
|
+
def doing(&blk) blk; end
|
|
132
|
+
|
|
133
|
+
def calling(&blk) blk; end
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
Spec::Runner.configure do |config|
|
|
139
|
+
config.include Merb::Test::Helper
|
|
140
|
+
config.include Merb::Test::RspecMatchers
|
|
141
|
+
config.include Merb::Test::Rspec::ViewMatchers
|
|
142
|
+
config.include Merb::Test::RequestHelper
|
|
143
|
+
|
|
144
|
+
def with_level(level)
|
|
145
|
+
Merb.logger = Merb::Logger.new(StringIO.new, level)
|
|
146
|
+
yield
|
|
147
|
+
Merb.logger
|
|
148
|
+
end
|
|
149
|
+
end
|