formtastic 2.1.0 → 4.0.0
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.
- checksums.yaml +7 -0
- data/.gitattributes +1 -0
- data/.github/workflows/test.yml +61 -0
- data/.gitignore +4 -2
- data/CHANGELOG.md +52 -0
- data/Gemfile +1 -1
- data/Gemfile.lock +105 -0
- data/MIT-LICENSE +1 -1
- data/{README.textile → README.md} +204 -219
- data/RELEASE_PROCESS +3 -1
- data/Rakefile +27 -29
- data/app/assets/stylesheets/formtastic.css +3 -2
- data/bin/appraisal +8 -0
- data/formtastic.gemspec +11 -14
- data/gemfiles/rails_5.2/Gemfile +5 -0
- data/gemfiles/rails_6.0/Gemfile +5 -0
- data/gemfiles/rails_6.1/Gemfile +5 -0
- data/gemfiles/rails_edge/Gemfile +13 -0
- data/lib/formtastic/action_class_finder.rb +18 -0
- data/lib/formtastic/actions/button_action.rb +55 -60
- data/lib/formtastic/actions/input_action.rb +59 -57
- data/lib/formtastic/actions/link_action.rb +68 -67
- data/lib/formtastic/actions.rb +6 -3
- data/lib/formtastic/deprecation.rb +5 -0
- data/lib/formtastic/engine.rb +3 -1
- data/lib/formtastic/form_builder.rb +35 -16
- data/lib/formtastic/helpers/action_helper.rb +34 -28
- data/lib/formtastic/helpers/enum.rb +13 -0
- data/lib/formtastic/helpers/errors_helper.rb +2 -2
- data/lib/formtastic/helpers/fieldset_wrapper.rb +16 -12
- data/lib/formtastic/helpers/form_helper.rb +19 -16
- data/lib/formtastic/helpers/input_helper.rb +69 -97
- data/lib/formtastic/helpers/inputs_helper.rb +35 -25
- data/lib/formtastic/helpers/reflection.rb +4 -4
- data/lib/formtastic/helpers.rb +1 -2
- data/lib/formtastic/html_attributes.rb +12 -1
- data/lib/formtastic/i18n.rb +1 -1
- data/lib/formtastic/input_class_finder.rb +18 -0
- data/lib/formtastic/inputs/base/choices.rb +2 -2
- data/lib/formtastic/inputs/base/collections.rb +46 -14
- data/lib/formtastic/inputs/base/database.rb +7 -2
- data/lib/formtastic/inputs/base/datetime_pickerish.rb +85 -0
- data/lib/formtastic/inputs/base/errors.rb +7 -7
- data/lib/formtastic/inputs/base/hints.rb +2 -2
- data/lib/formtastic/inputs/base/html.rb +10 -9
- data/lib/formtastic/inputs/base/labelling.rb +5 -8
- data/lib/formtastic/inputs/base/naming.rb +4 -4
- data/lib/formtastic/inputs/base/numeric.rb +1 -1
- data/lib/formtastic/inputs/base/options.rb +3 -4
- data/lib/formtastic/inputs/base/stringish.rb +10 -2
- data/lib/formtastic/inputs/base/timeish.rb +34 -22
- data/lib/formtastic/inputs/base/validations.rb +41 -13
- data/lib/formtastic/inputs/base/wrapping.rb +29 -26
- data/lib/formtastic/inputs/base.rb +22 -15
- data/lib/formtastic/inputs/boolean_input.rb +26 -12
- data/lib/formtastic/inputs/check_boxes_input.rb +39 -31
- data/lib/formtastic/inputs/color_input.rb +41 -0
- data/lib/formtastic/inputs/country_input.rb +24 -5
- data/lib/formtastic/inputs/datalist_input.rb +41 -0
- data/lib/formtastic/inputs/date_picker_input.rb +93 -0
- data/lib/formtastic/inputs/{date_input.rb → date_select_input.rb} +1 -1
- data/lib/formtastic/inputs/datetime_picker_input.rb +103 -0
- data/lib/formtastic/inputs/{datetime_input.rb → datetime_select_input.rb} +1 -1
- data/lib/formtastic/inputs/file_input.rb +2 -2
- data/lib/formtastic/inputs/hidden_input.rb +2 -6
- data/lib/formtastic/inputs/radio_input.rb +28 -22
- data/lib/formtastic/inputs/select_input.rb +36 -39
- data/lib/formtastic/inputs/time_picker_input.rb +99 -0
- data/lib/formtastic/inputs/{time_input.rb → time_select_input.rb} +6 -2
- data/lib/formtastic/inputs/time_zone_input.rb +16 -6
- data/lib/formtastic/inputs.rb +32 -21
- data/lib/formtastic/localized_string.rb +1 -1
- data/lib/formtastic/localizer.rb +24 -24
- data/lib/formtastic/namespaced_class_finder.rb +99 -0
- data/lib/formtastic/version.rb +1 -1
- data/lib/formtastic.rb +20 -10
- data/lib/generators/formtastic/form/form_generator.rb +10 -4
- data/lib/generators/formtastic/input/input_generator.rb +46 -0
- data/lib/generators/formtastic/install/install_generator.rb +5 -19
- data/lib/generators/templates/_form.html.slim +2 -2
- data/lib/generators/templates/formtastic.rb +46 -25
- data/lib/generators/templates/input.rb +19 -0
- data/sample/basic_inputs.html +23 -3
- data/script/integration-template.rb +74 -0
- data/script/integration.sh +19 -0
- data/spec/action_class_finder_spec.rb +12 -0
- data/spec/actions/button_action_spec.rb +8 -8
- data/spec/actions/generic_action_spec.rb +92 -56
- data/spec/actions/input_action_spec.rb +7 -7
- data/spec/actions/link_action_spec.rb +10 -10
- data/spec/builder/custom_builder_spec.rb +36 -20
- data/spec/builder/error_proc_spec.rb +4 -4
- data/spec/builder/semantic_fields_for_spec.rb +28 -29
- data/spec/fast_spec_helper.rb +12 -0
- data/spec/generators/formtastic/form/form_generator_spec.rb +45 -32
- data/spec/generators/formtastic/input/input_generator_spec.rb +124 -0
- data/spec/generators/formtastic/install/install_generator_spec.rb +9 -9
- data/spec/helpers/action_helper_spec.rb +75 -103
- data/spec/helpers/actions_helper_spec.rb +17 -17
- data/spec/helpers/form_helper_spec.rb +84 -33
- data/spec/helpers/input_helper_spec.rb +333 -285
- data/spec/helpers/inputs_helper_spec.rb +167 -121
- data/spec/helpers/reflection_helper_spec.rb +3 -3
- data/spec/helpers/semantic_errors_helper_spec.rb +23 -23
- data/spec/i18n_spec.rb +26 -26
- data/spec/input_class_finder_spec.rb +10 -0
- data/spec/inputs/base/collections_spec.rb +76 -0
- data/spec/inputs/base/validations_spec.rb +480 -0
- data/spec/inputs/boolean_input_spec.rb +100 -65
- data/spec/inputs/check_boxes_input_spec.rb +200 -101
- data/spec/inputs/color_input_spec.rb +85 -0
- data/spec/inputs/country_input_spec.rb +20 -20
- data/spec/inputs/custom_input_spec.rb +3 -4
- data/spec/inputs/datalist_input_spec.rb +61 -0
- data/spec/inputs/date_picker_input_spec.rb +449 -0
- data/spec/inputs/date_select_input_spec.rb +249 -0
- data/spec/inputs/datetime_picker_input_spec.rb +490 -0
- data/spec/inputs/datetime_select_input_spec.rb +209 -0
- data/spec/inputs/email_input_spec.rb +5 -5
- data/spec/inputs/file_input_spec.rb +6 -6
- data/spec/inputs/hidden_input_spec.rb +22 -35
- data/spec/inputs/include_blank_spec.rb +11 -11
- data/spec/inputs/label_spec.rb +62 -25
- data/spec/inputs/number_input_spec.rb +112 -112
- data/spec/inputs/password_input_spec.rb +5 -5
- data/spec/inputs/phone_input_spec.rb +5 -5
- data/spec/inputs/placeholder_spec.rb +6 -6
- data/spec/inputs/radio_input_spec.rb +99 -55
- data/spec/inputs/range_input_spec.rb +66 -66
- data/spec/inputs/readonly_spec.rb +50 -0
- data/spec/inputs/search_input_spec.rb +5 -5
- data/spec/inputs/select_input_spec.rb +170 -170
- data/spec/inputs/string_input_spec.rb +68 -16
- data/spec/inputs/text_input_spec.rb +16 -16
- data/spec/inputs/time_picker_input_spec.rb +455 -0
- data/spec/inputs/time_select_input_spec.rb +261 -0
- data/spec/inputs/time_zone_input_spec.rb +54 -28
- data/spec/inputs/url_input_spec.rb +5 -5
- data/spec/inputs/with_options_spec.rb +7 -7
- data/spec/localizer_spec.rb +39 -17
- data/spec/namespaced_class_finder_spec.rb +79 -0
- data/spec/schema.rb +21 -0
- data/spec/spec_helper.rb +254 -221
- data/spec/support/custom_macros.rb +128 -95
- data/spec/support/shared_examples.rb +12 -0
- data/spec/support/specialized_class_finder_shared_example.rb +27 -0
- data/spec/support/test_environment.rb +26 -10
- metadata +177 -238
- data/.travis.yml +0 -8
- data/Appraisals +0 -11
- data/CHANGELOG +0 -371
- data/gemfiles/rails-3.0.gemfile +0 -7
- data/gemfiles/rails-3.1.gemfile +0 -7
- data/gemfiles/rails-3.2.gemfile +0 -7
- data/lib/formtastic/helpers/buttons_helper.rb +0 -310
- data/lib/formtastic/inputs/base/grouped_collections.rb +0 -77
- data/lib/formtastic/util.rb +0 -25
- data/lib/tasks/verify_rcov.rb +0 -44
- data/spec/helpers/buttons_helper_spec.rb +0 -166
- data/spec/helpers/commit_button_helper_spec.rb +0 -530
- data/spec/inputs/date_input_spec.rb +0 -227
- data/spec/inputs/datetime_input_spec.rb +0 -185
- data/spec/inputs/time_input_spec.rb +0 -267
- data/spec/support/deferred_garbage_collection.rb +0 -21
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'spec_helper'
|
|
3
3
|
|
|
4
|
-
describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
4
|
+
RSpec.describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
5
5
|
|
|
6
6
|
include FormtasticSpecHelper
|
|
7
7
|
|
|
@@ -11,32 +11,32 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
|
11
11
|
@title_errors = ['must not be blank', 'must be awesome']
|
|
12
12
|
@base_errors = ['base error message', 'nasty error']
|
|
13
13
|
@base_error = 'one base error'
|
|
14
|
-
@errors =
|
|
15
|
-
@new_post.
|
|
14
|
+
@errors = double('errors')
|
|
15
|
+
allow(@new_post).to receive(:errors).and_return(@errors)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
describe 'when there is only one error on base' do
|
|
19
19
|
before do
|
|
20
|
-
@errors.
|
|
20
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
|
21
21
|
end
|
|
22
22
|
|
|
23
23
|
it 'should render an unordered list' do
|
|
24
24
|
semantic_form_for(@new_post) do |builder|
|
|
25
|
-
builder.semantic_errors.
|
|
25
|
+
expect(builder.semantic_errors).to have_tag('ul.errors li', :text => @base_error)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
describe 'when there is more than one error on base' do
|
|
31
31
|
before do
|
|
32
|
-
@errors.
|
|
32
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return(@base_errors)
|
|
33
33
|
end
|
|
34
34
|
|
|
35
35
|
it 'should render an unordered list' do
|
|
36
36
|
semantic_form_for(@new_post) do |builder|
|
|
37
|
-
builder.semantic_errors.
|
|
37
|
+
expect(builder.semantic_errors).to have_tag('ul.errors')
|
|
38
38
|
@base_errors.each do |error|
|
|
39
|
-
builder.semantic_errors.
|
|
39
|
+
expect(builder.semantic_errors).to have_tag('ul.errors li', :text => error)
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
end
|
|
@@ -44,67 +44,67 @@ describe 'Formtastic::FormBuilder#semantic_errors' do
|
|
|
44
44
|
|
|
45
45
|
describe 'when there are errors on title' do
|
|
46
46
|
before do
|
|
47
|
-
@errors.
|
|
48
|
-
@errors.
|
|
47
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:title)).and_return(@title_errors)
|
|
48
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return([])
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
it 'should render an unordered list' do
|
|
52
52
|
semantic_form_for(@new_post) do |builder|
|
|
53
53
|
title_name = builder.send(:localized_string, :title, :title, :label) || builder.send(:humanized_attribute_name, :title)
|
|
54
|
-
builder.semantic_errors(:title).
|
|
54
|
+
expect(builder.semantic_errors(:title)).to have_tag('ul.errors li', :text => title_name << " " << @title_errors.to_sentence)
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
describe 'when there are errors on title and base' do
|
|
60
60
|
before do
|
|
61
|
-
@errors.
|
|
62
|
-
@errors.
|
|
61
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:title)).and_return(@title_errors)
|
|
62
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
it 'should render an unordered list' do
|
|
66
66
|
semantic_form_for(@new_post) do |builder|
|
|
67
67
|
title_name = builder.send(:localized_string, :title, :title, :label) || builder.send(:humanized_attribute_name, :title)
|
|
68
|
-
builder.semantic_errors(:title).
|
|
69
|
-
builder.semantic_errors(:title).
|
|
68
|
+
expect(builder.semantic_errors(:title)).to have_tag('ul.errors li', :text => title_name << " " << @title_errors.to_sentence)
|
|
69
|
+
expect(builder.semantic_errors(:title)).to have_tag('ul.errors li', :text => @base_error)
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
|
|
74
74
|
describe 'when there are no errors' do
|
|
75
75
|
before do
|
|
76
|
-
@errors.
|
|
77
|
-
@errors.
|
|
76
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:title)).and_return(nil)
|
|
77
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return(nil)
|
|
78
78
|
end
|
|
79
79
|
|
|
80
80
|
it 'should return nil' do
|
|
81
81
|
semantic_form_for(@new_post) do |builder|
|
|
82
|
-
builder.semantic_errors(:title).
|
|
82
|
+
expect(builder.semantic_errors(:title)).to be_nil
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
describe 'when there is one error on base and options with class is passed' do
|
|
88
88
|
before do
|
|
89
|
-
@errors.
|
|
89
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
|
90
90
|
end
|
|
91
91
|
|
|
92
92
|
it 'should render an unordered list with given class' do
|
|
93
93
|
semantic_form_for(@new_post) do |builder|
|
|
94
|
-
builder.semantic_errors(:class => "awesome").
|
|
94
|
+
expect(builder.semantic_errors(:class => "awesome")).to have_tag('ul.awesome li', :text => @base_error)
|
|
95
95
|
end
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
99
|
describe 'when :base is passed in as an argument' do
|
|
100
100
|
before do
|
|
101
|
-
@errors.
|
|
101
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:base)).and_return(@base_error)
|
|
102
102
|
end
|
|
103
103
|
|
|
104
104
|
it 'should ignore :base and only render base errors once' do
|
|
105
105
|
semantic_form_for(@new_post) do |builder|
|
|
106
|
-
builder.semantic_errors(:base).
|
|
107
|
-
builder.semantic_errors(:base).
|
|
106
|
+
expect(builder.semantic_errors(:base)).to have_tag('ul li', :count => 1)
|
|
107
|
+
expect(builder.semantic_errors(:base)).not_to have_tag('ul li', :text => "Base #{@base_error}")
|
|
108
108
|
end
|
|
109
109
|
end
|
|
110
110
|
end
|
data/spec/i18n_spec.rb
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
require 'spec_helper'
|
|
3
3
|
|
|
4
|
-
describe 'Formtastic::I18n' do
|
|
4
|
+
RSpec.describe 'Formtastic::I18n' do
|
|
5
5
|
|
|
6
6
|
FORMTASTIC_KEYS = [:required, :yes, :no, :create, :update].freeze
|
|
7
7
|
|
|
8
8
|
it "should be defined" do
|
|
9
|
-
|
|
9
|
+
expect { Formtastic::I18n }.not_to raise_error
|
|
10
10
|
end
|
|
11
11
|
|
|
12
12
|
describe "default translations" do
|
|
13
13
|
it "should be defined" do
|
|
14
|
-
|
|
15
|
-
Formtastic::I18n::DEFAULT_VALUES.is_a?(::Hash).
|
|
14
|
+
expect { Formtastic::I18n::DEFAULT_VALUES }.not_to raise_error
|
|
15
|
+
expect(Formtastic::I18n::DEFAULT_VALUES.is_a?(::Hash)).to eq(true)
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
it "should exists for the core I18n lookup keys" do
|
|
19
|
-
(Formtastic::I18n::DEFAULT_VALUES.keys & FORMTASTIC_KEYS).size.
|
|
19
|
+
expect((Formtastic::I18n::DEFAULT_VALUES.keys & FORMTASTIC_KEYS).size).to eq(FORMTASTIC_KEYS.size)
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
|
|
@@ -42,23 +42,23 @@ describe 'Formtastic::I18n' do
|
|
|
42
42
|
|
|
43
43
|
it "should translate core strings correctly" do
|
|
44
44
|
::I18n.backend.store_translations :en, {:formtastic => {:required => 'Default Required'}}
|
|
45
|
-
Formtastic::I18n.t(:required).
|
|
46
|
-
Formtastic::I18n.t(:yes).
|
|
47
|
-
Formtastic::I18n.t(:no).
|
|
48
|
-
Formtastic::I18n.t(:create, :model => 'Post').
|
|
49
|
-
Formtastic::I18n.t(:update, :model => 'Post').
|
|
45
|
+
expect(Formtastic::I18n.t(:required)).to eq("Default Required")
|
|
46
|
+
expect(Formtastic::I18n.t(:yes)).to eq("Default Yes")
|
|
47
|
+
expect(Formtastic::I18n.t(:no)).to eq("Default No")
|
|
48
|
+
expect(Formtastic::I18n.t(:create, :model => 'Post')).to eq("Default Create Post")
|
|
49
|
+
expect(Formtastic::I18n.t(:update, :model => 'Post')).to eq("Default Update Post")
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
it "should all belong to scope 'formtastic'" do
|
|
53
|
-
Formtastic::I18n.t(:duck, :scope => [:custom_scope]).
|
|
53
|
+
expect(Formtastic::I18n.t(:duck, :scope => [:custom_scope])).to eq('Duck')
|
|
54
54
|
end
|
|
55
55
|
|
|
56
56
|
it "should override default I18n lookup args if these are specified" do
|
|
57
|
-
Formtastic::I18n.t(:duck_pond, :scope => [:custom_scope], :ducks => 15).
|
|
57
|
+
expect(Formtastic::I18n.t(:duck_pond, :scope => [:custom_scope], :ducks => 15)).to eq('15 ducks in a pond')
|
|
58
58
|
end
|
|
59
59
|
|
|
60
60
|
it "should be possible to override default values" do
|
|
61
|
-
Formtastic::I18n.t(:required, :default => 'Nothing found!').
|
|
61
|
+
expect(Formtastic::I18n.t(:required, :default => 'Nothing found!')).to eq('Nothing found!')
|
|
62
62
|
end
|
|
63
63
|
|
|
64
64
|
end
|
|
@@ -71,7 +71,7 @@ describe 'Formtastic::I18n' do
|
|
|
71
71
|
|
|
72
72
|
it "should use default strings" do
|
|
73
73
|
(Formtastic::I18n::DEFAULT_VALUES.keys).each do |key|
|
|
74
|
-
Formtastic::I18n.t(key, :model => '%{model}').
|
|
74
|
+
expect(Formtastic::I18n.t(key, :model => '%{model}')).to eq(Formtastic::I18n::DEFAULT_VALUES[key])
|
|
75
75
|
end
|
|
76
76
|
end
|
|
77
77
|
|
|
@@ -98,8 +98,8 @@ describe 'Formtastic::I18n' do
|
|
|
98
98
|
}
|
|
99
99
|
}}
|
|
100
100
|
|
|
101
|
-
@new_post.
|
|
102
|
-
@new_post.
|
|
101
|
+
allow(@new_post).to receive(:title)
|
|
102
|
+
allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :string, :limit => 255))
|
|
103
103
|
end
|
|
104
104
|
|
|
105
105
|
after do
|
|
@@ -108,7 +108,7 @@ describe 'Formtastic::I18n' do
|
|
|
108
108
|
|
|
109
109
|
it "lookup scopes should be defined" do
|
|
110
110
|
with_config :i18n_lookups_by_default, true do
|
|
111
|
-
|
|
111
|
+
expect { Formtastic::I18n::SCOPES }.not_to raise_error
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
@@ -117,7 +117,7 @@ describe 'Formtastic::I18n' do
|
|
|
117
117
|
concat(semantic_form_for(@new_post) do |builder|
|
|
118
118
|
concat(builder.input(:title))
|
|
119
119
|
end)
|
|
120
|
-
output_buffer.
|
|
120
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello post!/)
|
|
121
121
|
end
|
|
122
122
|
end
|
|
123
123
|
|
|
@@ -126,7 +126,7 @@ describe 'Formtastic::I18n' do
|
|
|
126
126
|
concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
|
127
127
|
concat(builder.input(:title))
|
|
128
128
|
end)
|
|
129
|
-
output_buffer.
|
|
129
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello project!/)
|
|
130
130
|
end
|
|
131
131
|
end
|
|
132
132
|
|
|
@@ -135,7 +135,7 @@ describe 'Formtastic::I18n' do
|
|
|
135
135
|
concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
|
|
136
136
|
concat(builder.input(:author))
|
|
137
137
|
end)
|
|
138
|
-
output_buffer.
|
|
138
|
+
expect(output_buffer).to have_tag("form label", :text => /Author/)
|
|
139
139
|
end
|
|
140
140
|
end
|
|
141
141
|
|
|
@@ -146,7 +146,7 @@ describe 'Formtastic::I18n' do
|
|
|
146
146
|
concat(f.input(:name))
|
|
147
147
|
end)
|
|
148
148
|
end)
|
|
149
|
-
output_buffer.
|
|
149
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello author name!/)
|
|
150
150
|
end
|
|
151
151
|
end
|
|
152
152
|
|
|
@@ -157,7 +157,7 @@ describe 'Formtastic::I18n' do
|
|
|
157
157
|
concat(f.input(:name))
|
|
158
158
|
end
|
|
159
159
|
end)
|
|
160
|
-
output_buffer.
|
|
160
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello author name!/)
|
|
161
161
|
end
|
|
162
162
|
end
|
|
163
163
|
|
|
@@ -168,7 +168,7 @@ describe 'Formtastic::I18n' do
|
|
|
168
168
|
concat(f.input(:title))
|
|
169
169
|
end
|
|
170
170
|
end)
|
|
171
|
-
output_buffer.
|
|
171
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello project!/)
|
|
172
172
|
end
|
|
173
173
|
end
|
|
174
174
|
|
|
@@ -179,7 +179,7 @@ describe 'Formtastic::I18n' do
|
|
|
179
179
|
concat(f.input(:name))
|
|
180
180
|
end
|
|
181
181
|
end)
|
|
182
|
-
output_buffer.
|
|
182
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello author name!/)
|
|
183
183
|
end
|
|
184
184
|
end
|
|
185
185
|
|
|
@@ -188,7 +188,7 @@ describe 'Formtastic::I18n' do
|
|
|
188
188
|
concat(semantic_form_for(@new_post) do |builder|
|
|
189
189
|
concat(builder.input(:body))
|
|
190
190
|
end)
|
|
191
|
-
output_buffer.
|
|
191
|
+
expect(output_buffer).to have_tag("form label", :text => /Elaborate/)
|
|
192
192
|
end
|
|
193
193
|
end
|
|
194
194
|
|
|
@@ -199,7 +199,7 @@ describe 'Formtastic::I18n' do
|
|
|
199
199
|
concat(f.input(:login))
|
|
200
200
|
end)
|
|
201
201
|
end)
|
|
202
|
-
output_buffer.
|
|
202
|
+
expect(output_buffer).to have_tag("form label", :text => /Hello login/)
|
|
203
203
|
end
|
|
204
204
|
end
|
|
205
205
|
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
require 'formtastic/input_class_finder'
|
|
4
|
+
|
|
5
|
+
RSpec.describe Formtastic::InputClassFinder do
|
|
6
|
+
it_behaves_like 'Specialized Class Finder' do
|
|
7
|
+
let(:default) { Formtastic::Inputs }
|
|
8
|
+
let(:namespaces_setting) { :input_namespaces }
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
require 'fast_spec_helper'
|
|
2
|
+
require 'inputs/base/collections'
|
|
3
|
+
|
|
4
|
+
class MyInput
|
|
5
|
+
include Formtastic::Inputs::Base::Collections
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
RSpec.describe MyInput do
|
|
9
|
+
let(:builder) { double }
|
|
10
|
+
let(:template) { double }
|
|
11
|
+
let(:model_class) { double }
|
|
12
|
+
let(:model) { double(:class => model_class) }
|
|
13
|
+
let(:model_name) { "post" }
|
|
14
|
+
let(:method) { double }
|
|
15
|
+
let(:options) { Hash.new }
|
|
16
|
+
|
|
17
|
+
let(:instance) { MyInput.new(builder, template, model, model_name, method, options) }
|
|
18
|
+
|
|
19
|
+
# class Whatever < ActiveRecord::Base
|
|
20
|
+
# enum :status => [:active, :archived]
|
|
21
|
+
# end
|
|
22
|
+
#
|
|
23
|
+
# Whatever.statuses
|
|
24
|
+
#
|
|
25
|
+
# Whatever.new.status
|
|
26
|
+
#
|
|
27
|
+
# f.input :status
|
|
28
|
+
describe "#collection_from_enum" do
|
|
29
|
+
|
|
30
|
+
let(:method) { :status }
|
|
31
|
+
|
|
32
|
+
context "when an enum is defined for the method" do
|
|
33
|
+
before do
|
|
34
|
+
statuses = ActiveSupport::HashWithIndifferentAccess.new("active"=>0, "inactive"=>1)
|
|
35
|
+
allow(model_class).to receive(:statuses) { statuses }
|
|
36
|
+
allow(model).to receive(:defined_enums) { {"status" => statuses } }
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
context 'no translations available' do
|
|
40
|
+
it 'returns an Array of EnumOption objects based on the enum options hash' do
|
|
41
|
+
expect(instance.collection_from_enum).to eq [["Active", "active"],["Inactive", "inactive"]]
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
context 'with translations' do
|
|
46
|
+
before do
|
|
47
|
+
::I18n.backend.store_translations :en, :activerecord => {
|
|
48
|
+
:attributes => {
|
|
49
|
+
:post => {
|
|
50
|
+
:statuses => {
|
|
51
|
+
:active => "I am active",
|
|
52
|
+
:inactive => "I am inactive"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
end
|
|
58
|
+
it 'returns an Array of EnumOption objects based on the enum options hash' do
|
|
59
|
+
expect(instance.collection_from_enum).to eq [["I am active", "active"],["I am inactive", "inactive"]]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
after do
|
|
63
|
+
::I18n.backend.store_translations :en, {}
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
context "when an enum is not defined" do
|
|
69
|
+
it 'returns nil' do
|
|
70
|
+
expect(instance.collection_from_enum).to eq nil
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|