formtastic 3.1.5 → 4.0.0.rc1
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 +5 -5
- data/.gitattributes +1 -0
- data/.gitignore +3 -2
- data/.travis.yml +28 -40
- data/CHANGELOG.md +49 -0
- data/DEPRECATIONS +1 -1
- data/Gemfile.lock +104 -0
- data/README.md +628 -629
- data/Rakefile +20 -1
- data/app/assets/stylesheets/formtastic.css +1 -1
- data/bin/appraisal +8 -0
- data/formtastic.gemspec +8 -14
- data/gemfiles/rails_5.2/Gemfile +5 -0
- data/gemfiles/rails_6.0/Gemfile +5 -0
- data/gemfiles/rails_edge/Gemfile +13 -0
- data/lib/formtastic.rb +5 -11
- data/lib/formtastic/actions.rb +6 -3
- data/lib/formtastic/deprecation.rb +1 -38
- data/lib/formtastic/engine.rb +3 -1
- data/lib/formtastic/form_builder.rb +8 -24
- data/lib/formtastic/helpers/action_helper.rb +1 -48
- data/lib/formtastic/helpers/errors_helper.rb +2 -2
- data/lib/formtastic/helpers/fieldset_wrapper.rb +7 -3
- data/lib/formtastic/helpers/input_helper.rb +18 -76
- data/lib/formtastic/helpers/inputs_helper.rb +12 -3
- data/lib/formtastic/i18n.rb +1 -1
- data/lib/formtastic/inputs.rb +32 -29
- data/lib/formtastic/inputs/base/collections.rb +1 -5
- data/lib/formtastic/inputs/base/errors.rb +4 -4
- data/lib/formtastic/inputs/base/hints.rb +1 -1
- data/lib/formtastic/inputs/base/timeish.rb +5 -1
- data/lib/formtastic/inputs/base/validations.rb +19 -9
- data/lib/formtastic/inputs/check_boxes_input.rb +3 -3
- data/lib/formtastic/inputs/color_input.rb +0 -1
- data/lib/formtastic/inputs/select_input.rb +1 -1
- data/lib/formtastic/localizer.rb +5 -7
- data/lib/formtastic/version.rb +1 -1
- data/lib/generators/templates/formtastic.rb +4 -6
- data/script/integration-template.rb +71 -0
- data/script/integration.sh +19 -0
- data/spec/action_class_finder_spec.rb +1 -1
- data/spec/actions/button_action_spec.rb +8 -8
- data/spec/actions/generic_action_spec.rb +60 -60
- 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 +27 -27
- data/spec/generators/formtastic/form/form_generator_spec.rb +25 -25
- data/spec/generators/formtastic/input/input_generator_spec.rb +31 -31
- data/spec/generators/formtastic/install/install_generator_spec.rb +9 -9
- data/spec/helpers/action_helper_spec.rb +328 -10
- data/spec/helpers/actions_helper_spec.rb +17 -17
- data/spec/helpers/form_helper_spec.rb +33 -33
- data/spec/helpers/input_helper_spec.rb +975 -2
- data/spec/helpers/inputs_helper_spec.rb +120 -105
- data/spec/helpers/reflection_helper_spec.rb +3 -3
- data/spec/helpers/semantic_errors_helper_spec.rb +22 -22
- data/spec/i18n_spec.rb +26 -26
- data/spec/input_class_finder_spec.rb +1 -1
- data/spec/inputs/base/collections_spec.rb +6 -6
- data/spec/inputs/base/validations_spec.rb +157 -19
- data/spec/inputs/boolean_input_spec.rb +55 -55
- data/spec/inputs/check_boxes_input_spec.rb +96 -95
- data/spec/inputs/color_input_spec.rb +51 -63
- data/spec/inputs/country_input_spec.rb +20 -20
- data/spec/inputs/custom_input_spec.rb +2 -6
- data/spec/inputs/datalist_input_spec.rb +1 -1
- data/spec/inputs/date_picker_input_spec.rb +42 -42
- data/spec/inputs/date_select_input_spec.rb +51 -37
- data/spec/inputs/datetime_picker_input_spec.rb +46 -46
- data/spec/inputs/datetime_select_input_spec.rb +53 -37
- 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 +18 -18
- data/spec/inputs/include_blank_spec.rb +8 -8
- data/spec/inputs/label_spec.rb +20 -20
- 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 +5 -5
- data/spec/inputs/radio_input_spec.rb +63 -65
- data/spec/inputs/range_input_spec.rb +66 -66
- data/spec/inputs/readonly_spec.rb +4 -4
- data/spec/inputs/search_input_spec.rb +5 -5
- data/spec/inputs/select_input_spec.rb +92 -96
- data/spec/inputs/string_input_spec.rb +23 -23
- data/spec/inputs/text_input_spec.rb +16 -16
- data/spec/inputs/time_picker_input_spec.rb +43 -43
- data/spec/inputs/time_select_input_spec.rb +67 -54
- data/spec/inputs/time_zone_input_spec.rb +19 -19
- data/spec/inputs/url_input_spec.rb +5 -5
- data/spec/inputs/with_options_spec.rb +7 -7
- data/spec/localizer_spec.rb +17 -17
- data/spec/namespaced_class_finder_spec.rb +2 -2
- data/spec/schema.rb +21 -0
- data/spec/spec_helper.rb +163 -223
- data/spec/support/custom_macros.rb +72 -75
- data/spec/support/shared_examples.rb +0 -1301
- data/spec/support/test_environment.rb +23 -9
- metadata +33 -123
- data/Appraisals +0 -43
- data/CHANGELOG +0 -54
- data/gemfiles/rails_3.2.gemfile +0 -9
- data/gemfiles/rails_4.0.4.gemfile +0 -8
- data/gemfiles/rails_4.1.gemfile +0 -8
- data/gemfiles/rails_4.2.gemfile +0 -8
- data/gemfiles/rails_4.gemfile +0 -8
- data/gemfiles/rails_5.0.gemfile +0 -8
- data/gemfiles/rails_edge.gemfile +0 -15
- data/lib/formtastic/util.rb +0 -57
- data/spec/helpers/namespaced_action_helper_spec.rb +0 -43
- data/spec/helpers/namespaced_input_helper_spec.rb +0 -36
- data/spec/util_spec.rb +0 -66
@@ -1,13 +1,13 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Formtastic::Helpers::FormHelper.builder' do
|
4
|
+
RSpec.describe 'Formtastic::Helpers::FormHelper.builder' do
|
5
5
|
|
6
6
|
include FormtasticSpecHelper
|
7
7
|
|
8
8
|
class MyCustomFormBuilder < Formtastic::FormBuilder
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
# TODO should be a separate spec for custom inputs
|
12
12
|
class Formtastic::Inputs::AwesomeInput
|
13
13
|
include Formtastic::Inputs::Base
|
@@ -22,32 +22,32 @@ describe 'Formtastic::Helpers::FormHelper.builder' do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
it 'is the Formtastic::FormBuilder by default' do
|
25
|
-
Formtastic::Helpers::FormHelper.builder.
|
25
|
+
expect(Formtastic::Helpers::FormHelper.builder).to eq(Formtastic::FormBuilder)
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'can be configured to use your own custom form builder' do
|
29
29
|
# Set it to a custom builder class
|
30
30
|
Formtastic::Helpers::FormHelper.builder = MyCustomFormBuilder
|
31
|
-
Formtastic::Helpers::FormHelper.builder.
|
31
|
+
expect(Formtastic::Helpers::FormHelper.builder).to eq(MyCustomFormBuilder)
|
32
32
|
|
33
33
|
# Reset it to the default
|
34
34
|
Formtastic::Helpers::FormHelper.builder = Formtastic::FormBuilder
|
35
|
-
Formtastic::Helpers::FormHelper.builder.
|
35
|
+
expect(Formtastic::Helpers::FormHelper.builder).to eq(Formtastic::FormBuilder)
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'should allow custom settings per form builder subclass' do
|
39
39
|
with_config(:all_fields_required_by_default, true) do
|
40
40
|
MyCustomFormBuilder.all_fields_required_by_default = false
|
41
41
|
|
42
|
-
MyCustomFormBuilder.all_fields_required_by_default.
|
43
|
-
Formtastic::FormBuilder.all_fields_required_by_default.
|
42
|
+
expect(MyCustomFormBuilder.all_fields_required_by_default).to be_falsey
|
43
|
+
expect(Formtastic::FormBuilder.all_fields_required_by_default).to be_truthy
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
describe "when using a custom builder" do
|
48
48
|
|
49
49
|
before do
|
50
|
-
@new_post.
|
50
|
+
allow(@new_post).to receive(:title)
|
51
51
|
Formtastic::Helpers::FormHelper.builder = MyCustomFormBuilder
|
52
52
|
end
|
53
53
|
|
@@ -59,10 +59,10 @@ describe 'Formtastic::Helpers::FormHelper.builder' do
|
|
59
59
|
|
60
60
|
it "should yield an instance of the custom builder" do
|
61
61
|
semantic_form_for(@new_post) do |builder|
|
62
|
-
builder.class.
|
62
|
+
expect(builder.class).to be(MyCustomFormBuilder)
|
63
63
|
end
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
# TODO should be a separate spec for custom inputs
|
67
67
|
it "should allow me to call my custom input" do
|
68
68
|
semantic_form_for(@new_post) do |builder|
|
@@ -72,29 +72,45 @@ describe 'Formtastic::Helpers::FormHelper.builder' do
|
|
72
72
|
|
73
73
|
# See: https://github.com/justinfrench/formtastic/issues/657
|
74
74
|
it "should not conflict with navigasmic" do
|
75
|
-
self.class.
|
76
|
-
|
77
|
-
|
75
|
+
allow_any_instance_of(self.class).to receive(:builder).and_return('navigasmic')
|
76
|
+
|
77
|
+
expect { semantic_form_for(@new_post) { |f| } }.not_to raise_error
|
78
78
|
end
|
79
79
|
|
80
|
+
it "should use the custom builder's skipped_columns config for inputs" do
|
81
|
+
class AnotherCustomFormBuilder < Formtastic::FormBuilder
|
82
|
+
configure :skipped_columns, [:title, :created_at]
|
83
|
+
end
|
84
|
+
#AnotherCustomFormBuilder.skipped_columns = [:title, :created_at]
|
85
|
+
|
86
|
+
concat(semantic_form_for(@new_post, builder: AnotherCustomFormBuilder) do |builder|
|
87
|
+
concat(builder.inputs)
|
88
|
+
end)
|
89
|
+
|
90
|
+
expect(output_buffer).to_not have_tag('input#post_title')
|
91
|
+
expect(output_buffer).to_not have_tag('li#post_created_at_input')
|
92
|
+
expect(output_buffer).to have_tag('textarea#post_body')
|
93
|
+
end
|
80
94
|
end
|
81
95
|
|
82
96
|
describe "fields_for" do
|
83
97
|
|
84
98
|
it "should yield an instance of the parent form builder" do
|
85
|
-
@new_post.
|
86
|
-
@new_post.
|
99
|
+
allow(@new_post).to receive(:comment).and_return([@fred])
|
100
|
+
allow(@new_post).to receive(:comment_attributes=)
|
87
101
|
semantic_form_for(@new_post, :builder => MyCustomFormBuilder) do |builder|
|
88
|
-
builder.class.
|
89
|
-
|
102
|
+
expect(builder.class).to be(MyCustomFormBuilder)
|
103
|
+
|
90
104
|
builder.fields_for(:comment) do |nested_builder|
|
91
|
-
nested_builder.class.
|
105
|
+
expect(nested_builder.class).to be(MyCustomFormBuilder)
|
92
106
|
end
|
93
107
|
end
|
94
108
|
end
|
95
109
|
|
96
110
|
end
|
97
111
|
|
112
|
+
|
113
|
+
|
98
114
|
end
|
99
115
|
|
100
116
|
describe "when using a builder passed to form options" do
|
@@ -102,10 +118,10 @@ describe 'Formtastic::Helpers::FormHelper.builder' do
|
|
102
118
|
describe "fields_for" do
|
103
119
|
|
104
120
|
it "should yield an instance of the parent form builder" do
|
105
|
-
@new_post.
|
121
|
+
allow(@new_post).to receive(:author_attributes=)
|
106
122
|
semantic_form_for(@new_post, :builder => MyCustomFormBuilder) do |builder|
|
107
123
|
builder.fields_for(:author) do |nested_builder|
|
108
|
-
nested_builder.class.
|
124
|
+
expect(nested_builder.class).to be(MyCustomFormBuilder)
|
109
125
|
end
|
110
126
|
end
|
111
127
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Rails field_error_proc' do
|
4
|
+
RSpec.describe 'Rails field_error_proc' do
|
5
5
|
|
6
6
|
include FormtasticSpecHelper
|
7
7
|
|
@@ -14,13 +14,13 @@ describe 'Rails field_error_proc' do
|
|
14
14
|
current_field_error_proc = ::ActionView::Base.field_error_proc
|
15
15
|
|
16
16
|
semantic_form_for(@new_post) do |builder|
|
17
|
-
::ActionView::Base.field_error_proc.
|
17
|
+
expect(::ActionView::Base.field_error_proc).not_to eq(current_field_error_proc)
|
18
18
|
end
|
19
19
|
|
20
|
-
::ActionView::Base.field_error_proc.
|
20
|
+
expect(::ActionView::Base.field_error_proc).to eq(current_field_error_proc)
|
21
21
|
|
22
22
|
form_for(@new_post) do |builder|
|
23
|
-
::ActionView::Base.field_error_proc.
|
23
|
+
expect(::ActionView::Base.field_error_proc).to eq(current_field_error_proc)
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -1,44 +1,44 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
|
-
describe 'Formtastic::FormBuilder#fields_for' do
|
4
|
+
RSpec.describe 'Formtastic::FormBuilder#fields_for' do
|
5
5
|
|
6
6
|
include FormtasticSpecHelper
|
7
7
|
|
8
8
|
before do
|
9
9
|
@output_buffer = ''
|
10
10
|
mock_everything
|
11
|
-
@new_post.
|
11
|
+
allow(@new_post).to receive(:author).and_return(::Author.new)
|
12
12
|
end
|
13
13
|
|
14
14
|
context 'outside a form_for block' do
|
15
15
|
it 'yields an instance of FormHelper.builder' do
|
16
16
|
semantic_fields_for(@new_post) do |nested_builder|
|
17
|
-
nested_builder.class.
|
17
|
+
expect(nested_builder.class).to eq(Formtastic::Helpers::FormHelper.builder)
|
18
18
|
end
|
19
19
|
semantic_fields_for(@new_post.author) do |nested_builder|
|
20
|
-
nested_builder.class.
|
20
|
+
expect(nested_builder.class).to eq(Formtastic::Helpers::FormHelper.builder)
|
21
21
|
end
|
22
22
|
semantic_fields_for(:author, @new_post.author) do |nested_builder|
|
23
|
-
nested_builder.class.
|
23
|
+
expect(nested_builder.class).to eq(Formtastic::Helpers::FormHelper.builder)
|
24
24
|
end
|
25
25
|
semantic_fields_for(:author, @hash_backed_author) do |nested_builder|
|
26
|
-
nested_builder.class.
|
26
|
+
expect(nested_builder.class).to eq(Formtastic::Helpers::FormHelper.builder)
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should respond to input' do
|
31
31
|
semantic_fields_for(@new_post) do |nested_builder|
|
32
|
-
nested_builder.respond_to?(:input).
|
32
|
+
expect(nested_builder.respond_to?(:input)).to be_truthy
|
33
33
|
end
|
34
34
|
semantic_fields_for(@new_post.author) do |nested_builder|
|
35
|
-
nested_builder.respond_to?(:input).
|
35
|
+
expect(nested_builder.respond_to?(:input)).to be_truthy
|
36
36
|
end
|
37
37
|
semantic_fields_for(:author, @new_post.author) do |nested_builder|
|
38
|
-
nested_builder.respond_to?(:input).
|
38
|
+
expect(nested_builder.respond_to?(:input)).to be_truthy
|
39
39
|
end
|
40
40
|
semantic_fields_for(:author, @hash_backed_author) do |nested_builder|
|
41
|
-
nested_builder.respond_to?(:input).
|
41
|
+
expect(nested_builder.respond_to?(:input)).to be_truthy
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -47,7 +47,7 @@ describe 'Formtastic::FormBuilder#fields_for' do
|
|
47
47
|
it 'yields an instance of FormHelper.builder' do
|
48
48
|
semantic_form_for(@new_post) do |builder|
|
49
49
|
builder.semantic_fields_for(:author) do |nested_builder|
|
50
|
-
nested_builder.class.
|
50
|
+
expect(nested_builder.class).to eq(Formtastic::Helpers::FormHelper.builder)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
end
|
@@ -55,7 +55,7 @@ describe 'Formtastic::FormBuilder#fields_for' do
|
|
55
55
|
it 'yields an instance of FormHelper.builder with hash-like model' do
|
56
56
|
semantic_form_for(:user) do |builder|
|
57
57
|
builder.semantic_fields_for(:author, @hash_backed_author) do |nested_builder|
|
58
|
-
nested_builder.class.
|
58
|
+
expect(nested_builder.class).to eq(Formtastic::Helpers::FormHelper.builder)
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -63,7 +63,7 @@ describe 'Formtastic::FormBuilder#fields_for' do
|
|
63
63
|
it 'nests the object name' do
|
64
64
|
semantic_form_for(@new_post) do |builder|
|
65
65
|
builder.semantic_fields_for(@bob) do |nested_builder|
|
66
|
-
nested_builder.object_name.
|
66
|
+
expect(nested_builder.object_name).to eq('post[author]')
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
@@ -71,45 +71,45 @@ describe 'Formtastic::FormBuilder#fields_for' do
|
|
71
71
|
it 'supports passing collection as second parameter' do
|
72
72
|
semantic_form_for(@new_post) do |builder|
|
73
73
|
builder.semantic_fields_for(:author, [@fred,@bob]) do |nested_builder|
|
74
|
-
nested_builder.object_name.
|
74
|
+
expect(nested_builder.object_name).to match(/post\[author_attributes\]\[\d+\]/)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'should sanitize html id for li tag' do
|
80
|
-
@bob.
|
80
|
+
allow(@bob).to receive(:column_for_attribute).and_return(double('column', :type => :string, :limit => 255))
|
81
81
|
concat(semantic_form_for(@new_post) do |builder|
|
82
82
|
concat(builder.semantic_fields_for(@bob, :index => 1) do |nested_builder|
|
83
83
|
concat(nested_builder.inputs(:login))
|
84
84
|
end)
|
85
85
|
end)
|
86
|
-
output_buffer.
|
86
|
+
expect(output_buffer).to have_tag('form fieldset.inputs #post_author_1_login_input')
|
87
87
|
# Not valid selector, so using good ol' regex
|
88
|
-
output_buffer.
|
88
|
+
expect(output_buffer).not_to match(/id="post\[author\]_1_login_input"/)
|
89
89
|
# <=> output_buffer.should_not have_tag('form fieldset.inputs #post[author]_1_login_input')
|
90
90
|
end
|
91
91
|
|
92
92
|
it 'should use namespace provided in nested fields' do
|
93
|
-
@bob.
|
93
|
+
allow(@bob).to receive(:column_for_attribute).and_return(double('column', :type => :string, :limit => 255))
|
94
94
|
concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
|
95
95
|
concat(builder.semantic_fields_for(@bob, :index => 1) do |nested_builder|
|
96
96
|
concat(nested_builder.inputs(:login))
|
97
97
|
end)
|
98
98
|
end)
|
99
|
-
output_buffer.
|
99
|
+
expect(output_buffer).to have_tag('form fieldset.inputs #context2_post_author_1_login_input')
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'should render errors on the nested inputs' do
|
103
103
|
@errors = double('errors')
|
104
|
-
@errors.
|
105
|
-
@bob.
|
104
|
+
allow(@errors).to receive(:[]).with(errors_matcher(:login)).and_return(['oh noes'])
|
105
|
+
allow(@bob).to receive(:errors).and_return(@errors)
|
106
106
|
|
107
107
|
concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
|
108
108
|
concat(builder.semantic_fields_for(@bob) do |nested_builder|
|
109
109
|
concat(nested_builder.inputs(:login))
|
110
110
|
end)
|
111
111
|
end)
|
112
|
-
output_buffer.
|
112
|
+
expect(output_buffer).to match(/oh noes/)
|
113
113
|
end
|
114
114
|
|
115
115
|
end
|
@@ -119,9 +119,9 @@ describe 'Formtastic::FormBuilder#fields_for' do
|
|
119
119
|
before do
|
120
120
|
output_buffer.replace ''
|
121
121
|
|
122
|
-
@fred.posts.size.
|
123
|
-
@fred.posts.first.
|
124
|
-
@fred.
|
122
|
+
expect(@fred.posts.size).to eq(1)
|
123
|
+
allow(@fred.posts.first).to receive(:persisted?).and_return(true)
|
124
|
+
allow(@fred).to receive(:posts_attributes=)
|
125
125
|
concat(semantic_form_for(@fred) do |builder|
|
126
126
|
concat(builder.semantic_fields_for(:posts) do |nested_builder|
|
127
127
|
concat(nested_builder.input(:id, :as => :hidden))
|
@@ -131,11 +131,11 @@ describe 'Formtastic::FormBuilder#fields_for' do
|
|
131
131
|
end
|
132
132
|
|
133
133
|
it "should only render one hidden input (my one)" do
|
134
|
-
output_buffer.
|
134
|
+
expect(output_buffer).to have_tag 'input#author_posts_attributes_0_id', :count => 1
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should render the hidden input inside an li.hidden" do
|
138
|
-
output_buffer.
|
138
|
+
expect(output_buffer).to have_tag 'li.hidden input#author_posts_attributes_0_id'
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
@@ -3,7 +3,7 @@ require 'spec_helper'
|
|
3
3
|
# Generators are not automatically loaded by Rails
|
4
4
|
require 'generators/formtastic/form/form_generator'
|
5
5
|
|
6
|
-
describe Formtastic::FormGenerator do
|
6
|
+
RSpec.describe Formtastic::FormGenerator do
|
7
7
|
|
8
8
|
include FormtasticSpecHelper
|
9
9
|
|
@@ -14,7 +14,7 @@ describe Formtastic::FormGenerator do
|
|
14
14
|
@output_buffer = ''
|
15
15
|
prepare_destination
|
16
16
|
mock_everything
|
17
|
-
::Post.
|
17
|
+
allow(::Post).to receive(:reflect_on_all_associations).with(:belongs_to).and_return([
|
18
18
|
double('reflection', :name => :author, :options => {}, :klass => ::Author, :macro => :belongs_to),
|
19
19
|
double('reflection', :name => :reviewer, :options => {:class_name => 'Author'}, :klass => ::Author, :macro => :belongs_to),
|
20
20
|
double('reflection', :name => :main_post, :options => {}, :klass => ::Post, :macro => :belongs_to),
|
@@ -28,13 +28,13 @@ describe Formtastic::FormGenerator do
|
|
28
28
|
|
29
29
|
describe 'without model' do
|
30
30
|
it 'should raise Thor::RequiredArgumentMissingError' do
|
31
|
-
|
31
|
+
expect { run_generator }.to raise_error(Thor::RequiredArgumentMissingError)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
describe 'with existing model' do
|
36
36
|
it 'should not raise an exception' do
|
37
|
-
|
37
|
+
expect { run_generator %w(Post) }.not_to raise_error
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
@@ -43,10 +43,10 @@ describe Formtastic::FormGenerator do
|
|
43
43
|
|
44
44
|
describe 'render only the specified attributes' do
|
45
45
|
subject { file('app/views/posts/_form.html.erb') }
|
46
|
-
it {
|
47
|
-
it {
|
48
|
-
it {
|
49
|
-
it {
|
46
|
+
it { is_expected.to exist }
|
47
|
+
it { is_expected.to contain "<%= f.input :title %>" }
|
48
|
+
it { is_expected.to contain "<%= f.input :author %>" }
|
49
|
+
it { is_expected.not_to contain "<%= f.input :main_post %>" }
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -56,17 +56,17 @@ describe Formtastic::FormGenerator do
|
|
56
56
|
subject { file('app/views/posts/_form.html.erb') }
|
57
57
|
|
58
58
|
describe 'content_columns' do
|
59
|
-
it {
|
60
|
-
it {
|
61
|
-
it {
|
62
|
-
it {
|
59
|
+
it { is_expected.to contain "<%= f.input :title %>" }
|
60
|
+
it { is_expected.to contain "<%= f.input :body %>" }
|
61
|
+
it { is_expected.not_to contain "<%= f.input :created_at %>" }
|
62
|
+
it { is_expected.not_to contain "<%= f.input :updated_at %>" }
|
63
63
|
end
|
64
64
|
|
65
65
|
describe 'reflection_on_association' do
|
66
|
-
it {
|
67
|
-
it {
|
68
|
-
it {
|
69
|
-
it {
|
66
|
+
it { is_expected.to contain "<%= f.input :author %>" }
|
67
|
+
it { is_expected.to contain "<%= f.input :reviewer %>" }
|
68
|
+
it { is_expected.to contain "<%= f.input :main_post %>" }
|
69
|
+
it { is_expected.not_to contain "<%= f.input :attachment %>" }
|
70
70
|
end
|
71
71
|
end
|
72
72
|
|
@@ -76,8 +76,8 @@ describe Formtastic::FormGenerator do
|
|
76
76
|
|
77
77
|
describe 'app/views/posts/_form.html.erb' do
|
78
78
|
subject { file('app/views/posts/_form.html.erb') }
|
79
|
-
it {
|
80
|
-
it {
|
79
|
+
it { is_expected.to exist }
|
80
|
+
it { is_expected.to contain "<%= semantic_form_for @post do |f| %>" }
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
@@ -86,15 +86,15 @@ describe Formtastic::FormGenerator do
|
|
86
86
|
describe 'app/views/posts/_form.html.haml' do
|
87
87
|
before { run_generator %w(Post --template-engine haml) }
|
88
88
|
subject { file('app/views/posts/_form.html.haml') }
|
89
|
-
it {
|
90
|
-
it {
|
89
|
+
it { is_expected.to exist }
|
90
|
+
it { is_expected.to contain "= semantic_form_for @post do |f|" }
|
91
91
|
end
|
92
92
|
|
93
93
|
context 'with copy option' do
|
94
94
|
describe 'app/views/posts/_form.html.haml' do
|
95
95
|
before { run_generator %w(Post --copy --template-engine haml) }
|
96
96
|
subject { file('app/views/posts/_form.html.haml') }
|
97
|
-
it {
|
97
|
+
it { is_expected.not_to exist }
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -105,8 +105,8 @@ describe Formtastic::FormGenerator do
|
|
105
105
|
|
106
106
|
describe 'app/views/posts/_form.html.slim' do
|
107
107
|
subject { file('app/views/posts/_form.html.slim') }
|
108
|
-
it {
|
109
|
-
it {
|
108
|
+
it { is_expected.to exist }
|
109
|
+
it { is_expected.to contain "= semantic_form_for @post do |f|" }
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
@@ -116,7 +116,7 @@ describe Formtastic::FormGenerator do
|
|
116
116
|
|
117
117
|
describe 'app/views/posts/_form.html.erb' do
|
118
118
|
subject { file('app/views/posts/_form.html.erb') }
|
119
|
-
it {
|
119
|
+
it { is_expected.not_to exist }
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
@@ -125,7 +125,7 @@ describe Formtastic::FormGenerator do
|
|
125
125
|
|
126
126
|
describe 'app/views/admin/posts/_form.html.erb' do
|
127
127
|
subject { file('app/views/admin/posts/_form.html.erb') }
|
128
|
-
it {
|
128
|
+
it { is_expected.to exist }
|
129
129
|
end
|
130
130
|
end
|
131
131
|
end
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
require 'generators/formtastic/input/input_generator'
|
4
4
|
|
5
|
-
describe Formtastic::InputGenerator do
|
5
|
+
RSpec.describe Formtastic::InputGenerator do
|
6
6
|
include FormtasticSpecHelper
|
7
7
|
|
8
8
|
destination File.expand_path("../../../../../tmp", __FILE__)
|
@@ -17,7 +17,7 @@ describe Formtastic::InputGenerator do
|
|
17
17
|
|
18
18
|
describe 'without file name' do
|
19
19
|
it 'should raise Thor::RequiredArgumentMissingError' do
|
20
|
-
|
20
|
+
expect { run_generator }.to raise_error(Thor::RequiredArgumentMissingError)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
@@ -26,11 +26,11 @@ describe Formtastic::InputGenerator do
|
|
26
26
|
|
27
27
|
describe 'generate an input in its respective folder' do
|
28
28
|
subject{ file('app/inputs/hat_size_input.rb')}
|
29
|
-
it {
|
30
|
-
it {
|
31
|
-
it {
|
32
|
-
it {
|
33
|
-
it {
|
29
|
+
it { is_expected.to exist}
|
30
|
+
it { is_expected.to contain "class HatSizeInput"}
|
31
|
+
it { is_expected.to contain "def to_html"}
|
32
|
+
it { is_expected.to contain "include Formtastic::Inputs::Base"}
|
33
|
+
it { is_expected.not_to contain "super"}
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -39,8 +39,8 @@ describe Formtastic::InputGenerator do
|
|
39
39
|
|
40
40
|
describe 'generate an input in its respective folder' do
|
41
41
|
subject{ file('app/inputs/hat_size_input.rb')}
|
42
|
-
it {
|
43
|
-
it {
|
42
|
+
it { is_expected.to exist}
|
43
|
+
it { is_expected.to contain "class HatSizeInput"}
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -49,8 +49,8 @@ describe Formtastic::InputGenerator do
|
|
49
49
|
|
50
50
|
describe 'generate an input in its respective folder' do
|
51
51
|
subject{ file('app/inputs/hat_size_input.rb')}
|
52
|
-
it {
|
53
|
-
it {
|
52
|
+
it { is_expected.to exist}
|
53
|
+
it { is_expected.to contain "class HatSizeInput"}
|
54
54
|
end
|
55
55
|
end
|
56
56
|
|
@@ -59,8 +59,8 @@ describe Formtastic::InputGenerator do
|
|
59
59
|
|
60
60
|
describe 'generate an input in its respective folder' do
|
61
61
|
subject{ file('app/inputs/hat_size_input.rb')}
|
62
|
-
it {
|
63
|
-
it {
|
62
|
+
it { is_expected.to exist}
|
63
|
+
it { is_expected.to contain "class HatSizeInput"}
|
64
64
|
end
|
65
65
|
end
|
66
66
|
|
@@ -69,8 +69,8 @@ describe Formtastic::InputGenerator do
|
|
69
69
|
|
70
70
|
describe 'generate an input in its respective folder' do
|
71
71
|
subject{ file('app/inputs/hat_size_input.rb')}
|
72
|
-
it {
|
73
|
-
it {
|
72
|
+
it { is_expected.to exist}
|
73
|
+
it { is_expected.to contain "class HatSizeInput"}
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
@@ -79,12 +79,12 @@ describe Formtastic::InputGenerator do
|
|
79
79
|
|
80
80
|
describe 'app/inputs/string_input.rb' do
|
81
81
|
subject{ file('app/inputs/string_input.rb')}
|
82
|
-
it {
|
83
|
-
it {
|
84
|
-
it {
|
85
|
-
it {
|
86
|
-
it {
|
87
|
-
it {
|
82
|
+
it { is_expected.to exist }
|
83
|
+
it { is_expected.to contain "class StringInput < Formtastic::Inputs::StringInput" }
|
84
|
+
it { is_expected.to contain "def to_html" }
|
85
|
+
it { is_expected.not_to contain "include Formtastic::Inputs::Base" }
|
86
|
+
it { is_expected.to contain "super" }
|
87
|
+
it { is_expected.not_to contain "def input_html_options" }
|
88
88
|
end
|
89
89
|
end
|
90
90
|
|
@@ -93,10 +93,10 @@ describe Formtastic::InputGenerator do
|
|
93
93
|
|
94
94
|
describe 'app/inputs/flexible_text_input.rb' do
|
95
95
|
subject{ file('app/inputs/flexible_text_input.rb')}
|
96
|
-
it {
|
97
|
-
it {
|
98
|
-
it {
|
99
|
-
it {
|
96
|
+
it { is_expected.to contain "class FlexibleTextInput < Formtastic::Inputs::StringInput" }
|
97
|
+
it { is_expected.to contain "def input_html_options" }
|
98
|
+
it { is_expected.not_to contain "include Formtastic::Inputs::Base" }
|
99
|
+
it { is_expected.not_to contain "def to_html" }
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -105,9 +105,9 @@ describe Formtastic::InputGenerator do
|
|
105
105
|
|
106
106
|
describe 'app/inputs/stuff/foo_input.rb' do
|
107
107
|
subject{ file('app/inputs/stuff/foo_input.rb')}
|
108
|
-
it {
|
109
|
-
it {
|
110
|
-
it {
|
108
|
+
it {is_expected.to exist}
|
109
|
+
it { is_expected.to contain "class Stuff::FooInput" }
|
110
|
+
it { is_expected.to contain "include Formtastic::Inputs::Base" }
|
111
111
|
end
|
112
112
|
end
|
113
113
|
|
@@ -116,9 +116,9 @@ describe Formtastic::InputGenerator do
|
|
116
116
|
|
117
117
|
describe 'app/inputs/stuff/foo_input.rb' do
|
118
118
|
subject{ file('app/inputs/stuff/foo_input.rb')}
|
119
|
-
it {
|
120
|
-
it {
|
121
|
-
it {
|
119
|
+
it {is_expected.to exist}
|
120
|
+
it { is_expected.to contain "class Stuff::FooInput" }
|
121
|
+
it { is_expected.to contain "include Formtastic::Inputs::Base" }
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|