formtastic 3.0.0 → 5.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.
Files changed (175) hide show
  1. checksums.yaml +5 -13
  2. data/.gitattributes +1 -0
  3. data/.github/workflows/test.yml +61 -0
  4. data/.gitignore +3 -2
  5. data/CHANGELOG.md +61 -0
  6. data/Gemfile.lock +140 -0
  7. data/MIT-LICENSE +1 -1
  8. data/{README.textile → README.md} +191 -168
  9. data/RELEASE_PROCESS +3 -1
  10. data/Rakefile +24 -8
  11. data/app/assets/stylesheets/formtastic.css +1 -1
  12. data/bin/appraisal +8 -0
  13. data/formtastic.gemspec +13 -17
  14. data/gemfiles/rails_6.0/Gemfile +5 -0
  15. data/gemfiles/rails_6.1/Gemfile +5 -0
  16. data/gemfiles/rails_7.0/Gemfile +5 -0
  17. data/gemfiles/rails_7.1/Gemfile +5 -0
  18. data/gemfiles/rails_edge/Gemfile +13 -0
  19. data/lib/formtastic/action_class_finder.rb +19 -0
  20. data/lib/formtastic/actions/base.rb +1 -0
  21. data/lib/formtastic/actions/button_action.rb +56 -53
  22. data/lib/formtastic/actions/buttonish.rb +1 -0
  23. data/lib/formtastic/actions/input_action.rb +60 -57
  24. data/lib/formtastic/actions/link_action.rb +69 -67
  25. data/lib/formtastic/actions.rb +7 -3
  26. data/lib/formtastic/deprecation.rb +6 -0
  27. data/lib/formtastic/engine.rb +4 -1
  28. data/lib/formtastic/form_builder.rb +32 -25
  29. data/lib/formtastic/helpers/action_helper.rb +22 -31
  30. data/lib/formtastic/helpers/actions_helper.rb +1 -0
  31. data/lib/formtastic/helpers/enum.rb +14 -0
  32. data/lib/formtastic/helpers/errors_helper.rb +3 -2
  33. data/lib/formtastic/helpers/fieldset_wrapper.rb +16 -11
  34. data/lib/formtastic/helpers/file_column_detection.rb +1 -0
  35. data/lib/formtastic/helpers/form_helper.rb +4 -3
  36. data/lib/formtastic/helpers/input_helper.rb +59 -80
  37. data/lib/formtastic/helpers/inputs_helper.rb +33 -27
  38. data/lib/formtastic/helpers/reflection.rb +5 -4
  39. data/lib/formtastic/helpers.rb +2 -2
  40. data/lib/formtastic/html_attributes.rb +13 -1
  41. data/lib/formtastic/i18n.rb +2 -1
  42. data/lib/formtastic/input_class_finder.rb +19 -0
  43. data/lib/formtastic/inputs/base/associations.rb +1 -0
  44. data/lib/formtastic/inputs/base/choices.rb +4 -3
  45. data/lib/formtastic/inputs/base/collections.rb +47 -11
  46. data/lib/formtastic/inputs/base/database.rb +8 -5
  47. data/lib/formtastic/inputs/base/datetime_pickerish.rb +1 -0
  48. data/lib/formtastic/inputs/base/errors.rb +7 -6
  49. data/lib/formtastic/inputs/base/fileish.rb +1 -0
  50. data/lib/formtastic/inputs/base/hints.rb +2 -1
  51. data/lib/formtastic/inputs/base/html.rb +12 -10
  52. data/lib/formtastic/inputs/base/labelling.rb +3 -2
  53. data/lib/formtastic/inputs/base/naming.rb +5 -4
  54. data/lib/formtastic/inputs/base/numeric.rb +1 -0
  55. data/lib/formtastic/inputs/base/options.rb +3 -3
  56. data/lib/formtastic/inputs/base/placeholder.rb +1 -0
  57. data/lib/formtastic/inputs/base/stringish.rb +1 -0
  58. data/lib/formtastic/inputs/base/timeish.rb +9 -4
  59. data/lib/formtastic/inputs/base/validations.rb +39 -12
  60. data/lib/formtastic/inputs/base/wrapping.rb +2 -3
  61. data/lib/formtastic/inputs/base.rb +17 -12
  62. data/lib/formtastic/inputs/boolean_input.rb +2 -1
  63. data/lib/formtastic/inputs/check_boxes_input.rb +16 -24
  64. data/lib/formtastic/inputs/color_input.rb +1 -1
  65. data/lib/formtastic/inputs/country_input.rb +4 -1
  66. data/lib/formtastic/inputs/datalist_input.rb +42 -0
  67. data/lib/formtastic/inputs/date_picker_input.rb +1 -0
  68. data/lib/formtastic/inputs/date_select_input.rb +1 -0
  69. data/lib/formtastic/inputs/datetime_picker_input.rb +1 -0
  70. data/lib/formtastic/inputs/datetime_select_input.rb +1 -0
  71. data/lib/formtastic/inputs/email_input.rb +1 -0
  72. data/lib/formtastic/inputs/file_input.rb +3 -2
  73. data/lib/formtastic/inputs/hidden_input.rb +3 -2
  74. data/lib/formtastic/inputs/number_input.rb +1 -0
  75. data/lib/formtastic/inputs/password_input.rb +1 -0
  76. data/lib/formtastic/inputs/phone_input.rb +1 -0
  77. data/lib/formtastic/inputs/radio_input.rb +26 -21
  78. data/lib/formtastic/inputs/range_input.rb +1 -0
  79. data/lib/formtastic/inputs/search_input.rb +1 -0
  80. data/lib/formtastic/inputs/select_input.rb +32 -10
  81. data/lib/formtastic/inputs/string_input.rb +1 -0
  82. data/lib/formtastic/inputs/text_input.rb +1 -0
  83. data/lib/formtastic/inputs/time_picker_input.rb +1 -0
  84. data/lib/formtastic/inputs/time_select_input.rb +1 -0
  85. data/lib/formtastic/inputs/time_zone_input.rb +17 -6
  86. data/lib/formtastic/inputs/url_input.rb +1 -0
  87. data/lib/formtastic/inputs.rb +33 -28
  88. data/lib/formtastic/localized_string.rb +2 -1
  89. data/lib/formtastic/localizer.rb +23 -24
  90. data/lib/formtastic/namespaced_class_finder.rb +98 -0
  91. data/lib/formtastic/version.rb +2 -1
  92. data/lib/formtastic.rb +19 -14
  93. data/lib/generators/formtastic/form/form_generator.rb +8 -2
  94. data/lib/generators/formtastic/input/input_generator.rb +47 -0
  95. data/lib/generators/formtastic/install/install_generator.rb +2 -0
  96. data/lib/generators/templates/formtastic.rb +29 -7
  97. data/lib/generators/templates/input.rb +19 -0
  98. data/sample/basic_inputs.html +1 -1
  99. data/script/integration-template.rb +73 -0
  100. data/script/integration.sh +19 -0
  101. data/spec/action_class_finder_spec.rb +13 -0
  102. data/spec/actions/button_action_spec.rb +21 -20
  103. data/spec/actions/generic_action_spec.rb +134 -133
  104. data/spec/actions/input_action_spec.rb +20 -19
  105. data/spec/actions/link_action_spec.rb +30 -29
  106. data/spec/builder/custom_builder_spec.rb +39 -22
  107. data/spec/builder/error_proc_spec.rb +6 -5
  108. data/spec/builder/semantic_fields_for_spec.rb +46 -45
  109. data/spec/fast_spec_helper.rb +13 -0
  110. data/spec/generators/formtastic/form/form_generator_spec.rb +33 -32
  111. data/spec/generators/formtastic/input/input_generator_spec.rb +125 -0
  112. data/spec/generators/formtastic/install/install_generator_spec.rb +10 -9
  113. data/spec/helpers/action_helper_spec.rb +70 -97
  114. data/spec/helpers/actions_helper_spec.rb +43 -42
  115. data/spec/helpers/form_helper_spec.rb +56 -39
  116. data/spec/helpers/input_helper_spec.rb +314 -255
  117. data/spec/helpers/inputs_helper_spec.rb +217 -202
  118. data/spec/helpers/reflection_helper_spec.rb +7 -6
  119. data/spec/helpers/semantic_errors_helper_spec.rb +26 -25
  120. data/spec/i18n_spec.rb +30 -29
  121. data/spec/input_class_finder_spec.rb +11 -0
  122. data/spec/inputs/base/collections_spec.rb +78 -0
  123. data/spec/inputs/base/validations_spec.rb +481 -0
  124. data/spec/inputs/boolean_input_spec.rb +73 -72
  125. data/spec/inputs/check_boxes_input_spec.rb +174 -123
  126. data/spec/inputs/color_input_spec.rb +53 -64
  127. data/spec/inputs/country_input_spec.rb +23 -22
  128. data/spec/inputs/custom_input_spec.rb +3 -6
  129. data/spec/inputs/datalist_input_spec.rb +62 -0
  130. data/spec/inputs/date_picker_input_spec.rb +114 -113
  131. data/spec/inputs/date_select_input_spec.rb +76 -61
  132. data/spec/inputs/datetime_picker_input_spec.rb +123 -122
  133. data/spec/inputs/datetime_select_input_spec.rb +85 -68
  134. data/spec/inputs/email_input_spec.rb +17 -16
  135. data/spec/inputs/file_input_spec.rb +18 -17
  136. data/spec/inputs/hidden_input_spec.rb +32 -31
  137. data/spec/inputs/include_blank_spec.rb +10 -9
  138. data/spec/inputs/label_spec.rb +36 -31
  139. data/spec/inputs/number_input_spec.rb +212 -211
  140. data/spec/inputs/password_input_spec.rb +17 -16
  141. data/spec/inputs/phone_input_spec.rb +17 -16
  142. data/spec/inputs/placeholder_spec.rb +18 -17
  143. data/spec/inputs/radio_input_spec.rb +92 -65
  144. data/spec/inputs/range_input_spec.rb +136 -135
  145. data/spec/inputs/readonly_spec.rb +51 -0
  146. data/spec/inputs/search_input_spec.rb +16 -15
  147. data/spec/inputs/select_input_spec.rb +209 -102
  148. data/spec/inputs/string_input_spec.rb +51 -50
  149. data/spec/inputs/text_input_spec.rb +34 -33
  150. data/spec/inputs/time_picker_input_spec.rb +115 -114
  151. data/spec/inputs/time_select_input_spec.rb +84 -70
  152. data/spec/inputs/time_zone_input_spec.rb +58 -31
  153. data/spec/inputs/url_input_spec.rb +17 -16
  154. data/spec/inputs/with_options_spec.rb +9 -8
  155. data/spec/localizer_spec.rb +18 -17
  156. data/spec/namespaced_class_finder_spec.rb +91 -0
  157. data/spec/schema.rb +22 -0
  158. data/spec/spec_helper.rb +180 -249
  159. data/spec/support/custom_macros.rb +128 -98
  160. data/spec/support/deprecation.rb +2 -1
  161. data/spec/support/shared_examples.rb +13 -0
  162. data/spec/support/specialized_class_finder_shared_example.rb +28 -0
  163. data/spec/support/test_environment.rb +25 -10
  164. metadata +95 -136
  165. data/.travis.yml +0 -28
  166. data/Appraisals +0 -25
  167. data/CHANGELOG +0 -27
  168. data/gemfiles/rails_3.2.gemfile +0 -7
  169. data/gemfiles/rails_4.0.4.gemfile +0 -7
  170. data/gemfiles/rails_4.1.gemfile +0 -7
  171. data/gemfiles/rails_4.gemfile +0 -7
  172. data/gemfiles/rails_edge.gemfile +0 -10
  173. data/lib/formtastic/util.rb +0 -53
  174. data/spec/support/deferred_garbage_collection.rb +0 -21
  175. data/spec/util_spec.rb +0 -52
@@ -1,12 +1,13 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
- describe 'datetime select input' do
5
+ RSpec.describe 'datetime select input' do
5
6
 
6
7
  include FormtasticSpecHelper
7
8
 
8
9
  before do
9
- @output_buffer = ''
10
+ @output_buffer = ActionView::OutputBuffer.new ''
10
11
  mock_everything
11
12
  end
12
13
 
@@ -14,7 +15,7 @@ describe 'datetime select input' do
14
15
 
15
16
  before do
16
17
  ::I18n.backend.store_translations :en, {}
17
- output_buffer.replace ''
18
+ @output_buffer = ActionView::OutputBuffer.new ''
18
19
  concat(semantic_form_for(@new_post) do |builder|
19
20
  concat(builder.input(:publish_at, :as => :datetime_select))
20
21
  end)
@@ -27,59 +28,59 @@ describe 'datetime select input' do
27
28
  it_should_have_a_nested_fieldset_with_class('fragments')
28
29
  it_should_have_a_nested_ordered_list_with_class('fragments-group')
29
30
  it_should_apply_error_logic_for_input_type(:datetime_select)
30
-
31
+
31
32
  it 'should have a legend and label with the label text inside the fieldset' do
32
- output_buffer.should have_tag('form li.datetime_select fieldset legend.label label', /Publish at/)
33
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset legend.label label', :text => /Publish at/)
33
34
  end
34
-
35
+
35
36
  it 'should associate the legend label with the first select' do
36
- output_buffer.should have_tag('form li.datetime_select fieldset legend.label')
37
- output_buffer.should have_tag('form li.datetime_select fieldset legend.label label')
38
- output_buffer.should have_tag('form li.datetime_select fieldset legend.label label[@for]')
39
- output_buffer.should have_tag('form li.datetime_select fieldset legend.label label[@for="post_publish_at_1i"]')
37
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset legend.label')
38
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset legend.label label')
39
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset legend.label label[@for]')
40
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset legend.label label[@for="post_publish_at_1i"]')
40
41
  end
41
-
42
+
42
43
  it 'should have an ordered list of five items inside the fieldset' do
43
- output_buffer.should have_tag('form li.datetime_select fieldset ol.fragments-group')
44
- output_buffer.should have_tag('form li.datetime_select fieldset ol li.fragment', :count => 5)
44
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol.fragments-group')
45
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li.fragment', :count => 5)
45
46
  end
46
47
 
47
48
  it 'should have five labels for year, month and day' do
48
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', :count => 5)
49
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /year/i)
50
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /month/i)
51
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /day/i)
52
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /hour/i)
53
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /min/i)
54
- end
55
-
49
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :count => 5)
50
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /year/i)
51
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /month/i)
52
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /day/i)
53
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /hour/i)
54
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /min/i)
55
+ end
56
+
56
57
  it 'should have five selects' do
57
- output_buffer.should have_tag('form li.datetime_select fieldset ol li select', :count => 5)
58
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li select', :count => 5)
58
59
  end
59
60
  end
60
61
 
61
62
  describe "when namespace is provided" do
62
-
63
+
63
64
  before do
64
- output_buffer.replace ''
65
+ @output_buffer = ActionView::OutputBuffer.new ''
65
66
  concat(semantic_form_for(@new_post, :namespace => "context2") do |builder|
66
67
  concat(builder.input(:publish_at, :as => :datetime_select))
67
68
  end)
68
69
  end
69
-
70
+
70
71
  it_should_have_input_wrapper_with_id("context2_post_publish_at_input")
71
72
  it_should_have_select_with_id("context2_post_publish_at_1i")
72
73
  it_should_have_select_with_id("context2_post_publish_at_2i")
73
74
  it_should_have_select_with_id("context2_post_publish_at_3i")
74
75
  it_should_have_select_with_id("context2_post_publish_at_4i")
75
76
  it_should_have_select_with_id("context2_post_publish_at_5i")
76
-
77
+
77
78
  end
78
-
79
+
79
80
  describe "when index is provided" do
80
81
 
81
82
  before do
82
- @output_buffer = ''
83
+ @output_buffer = ActionView::OutputBuffer.new ''
83
84
  mock_everything
84
85
 
85
86
  concat(semantic_form_for(@new_post) do |builder|
@@ -88,106 +89,122 @@ describe 'datetime select input' do
88
89
  end)
89
90
  end)
90
91
  end
91
-
92
+
92
93
  it 'should index the id of the wrapper' do
93
- output_buffer.should have_tag("li#post_author_attributes_3_created_at_input")
94
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_created_at_input")
94
95
  end
95
-
96
+
96
97
  it 'should index the id of the select tag' do
97
- output_buffer.should have_tag("select#post_author_attributes_3_created_at_1i")
98
- output_buffer.should have_tag("select#post_author_attributes_3_created_at_2i")
99
- output_buffer.should have_tag("select#post_author_attributes_3_created_at_3i")
100
- output_buffer.should have_tag("select#post_author_attributes_3_created_at_4i")
101
- output_buffer.should have_tag("select#post_author_attributes_3_created_at_5i")
98
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_1i")
99
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_2i")
100
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_3i")
101
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_4i")
102
+ expect(output_buffer.to_str).to have_tag("select#post_author_attributes_3_created_at_5i")
102
103
  end
103
-
104
+
104
105
  it 'should index the name of the select tag' do
105
- output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(1i)]']")
106
- output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(2i)]']")
107
- output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(3i)]']")
108
- output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(4i)]']")
109
- output_buffer.should have_tag("select[@name='post[author_attributes][3][created_at(5i)]']")
106
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(1i)]']")
107
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(2i)]']")
108
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(3i)]']")
109
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(4i)]']")
110
+ expect(output_buffer.to_str).to have_tag("select[@name='post[author_attributes][3][created_at(5i)]']")
110
111
  end
111
-
112
+
112
113
  end
113
-
114
-
114
+
115
+
115
116
  describe ':labels option' do
116
117
  fields = [:year, :month, :day, :hour, :minute]
117
118
  fields.each do |field|
118
119
  it "should replace the #{field} label with the specified text if :labels[:#{field}] is set" do
119
- output_buffer.replace ''
120
+ @output_buffer = ActionView::OutputBuffer.new ''
120
121
  concat(semantic_form_for(@new_post) do |builder|
121
122
  concat(builder.input(:created_at, :as => :datetime_select, :labels => { field => "another #{field} label" }))
122
123
  end)
123
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', :count => fields.length)
124
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :count => fields.length)
124
125
  fields.each do |f|
125
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', f == field ? /another #{f} label/i : /#{f}/i)
126
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => f == field ? /another #{f} label/i : /#{f}/i)
126
127
  end
127
128
  end
128
-
129
+
129
130
  it "should not display the label for the #{field} field when :labels[:#{field}] is blank" do
130
- output_buffer.replace ''
131
+ @output_buffer = ActionView::OutputBuffer.new ''
131
132
  concat(semantic_form_for(@new_post) do |builder|
132
133
  concat(builder.input(:created_at, :as => :datetime_select, :labels => { field => "" }))
133
134
  end)
134
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', :count => fields.length-1)
135
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :count => fields.length-1)
135
136
  fields.each do |f|
136
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /#{f}/i) unless field == f
137
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /#{f}/i) unless field == f
137
138
  end
138
139
  end
139
-
140
+
140
141
  it "should not display the label for the #{field} field when :labels[:#{field}] is false" do
141
- output_buffer.replace ''
142
+ @output_buffer = ActionView::OutputBuffer.new ''
142
143
  concat(semantic_form_for(@new_post) do |builder|
143
144
  concat(builder.input(:created_at, :as => :datetime_select, :labels => { field => false }))
144
145
  end)
145
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', :count => fields.length-1)
146
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :count => fields.length-1)
146
147
  fields.each do |f|
147
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', /#{f}/i) unless field == f
148
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :text => /#{f}/i) unless field == f
148
149
  end
149
150
  end
150
-
151
- it "should not render unsafe HTML when :labels[:#{field}] is false" do
152
- output_buffer.replace ''
151
+
152
+ it "should not render unsafe HTML when :labels[:#{field}] is false" do
153
+ @output_buffer = ActionView::OutputBuffer.new ''
153
154
  concat(semantic_form_for(@new_post) do |builder|
154
155
  concat(builder.input(:created_at, :as => :datetime_select, :include_seconds => true, :labels => { field => false }))
155
156
  end)
156
- output_buffer.should_not include(">")
157
+ expect(output_buffer.to_str).not_to include(">")
157
158
  end
158
159
  end
159
160
 
160
161
  it "should not display labels for any fields when :labels is falsy" do
161
- output_buffer.replace ''
162
+ @output_buffer = ActionView::OutputBuffer.new ''
162
163
  concat(semantic_form_for(@new_post) do |builder|
163
164
  concat(builder.input(:created_at, :as => :datetime_select, :labels => false))
164
165
  end)
165
- output_buffer.should have_tag('form li.datetime_select fieldset ol li label', :count => 0)
166
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset ol li label', :count => 0)
167
+ end
168
+ end
169
+
170
+ describe ":selected option for setting a value" do
171
+ it "should set the selected value for the form" do
172
+ concat(
173
+ semantic_form_for(@new_post) do |f|
174
+ concat(f.input(:created_at, :as => :datetime_select, :selected => DateTime.new(2018, 10, 4, 12, 00)))
175
+ end
176
+ )
177
+
178
+ expect(output_buffer.to_str).to have_tag "option[value='2018'][selected='selected']"
179
+ expect(output_buffer.to_str).to have_tag "option[value='10'][selected='selected']"
180
+ expect(output_buffer.to_str).to have_tag "option[value='4'][selected='selected']"
181
+ expect(output_buffer.to_str).to have_tag "option[value='12'][selected='selected']"
182
+ expect(output_buffer.to_str).to have_tag "option[value='00'][selected='selected']"
166
183
  end
167
184
  end
168
-
185
+
169
186
  describe "when required" do
170
187
  it "should add the required attribute to the input's html options" do
171
- with_config :use_required_attribute, true do
188
+ with_config :use_required_attribute, true do
172
189
  concat(semantic_form_for(@new_post) do |builder|
173
190
  concat(builder.input(:title, :as => :datetime_select, :required => true))
174
191
  end)
175
- output_buffer.should have_tag("select[@required]", :count => 5)
192
+ expect(output_buffer.to_str).to have_tag("select[@required]", :count => 5)
176
193
  end
177
194
  end
178
195
  end
179
196
 
180
197
  describe "when order does not have year first" do
181
198
  before do
182
- output_buffer.replace ''
199
+ @output_buffer = ActionView::OutputBuffer.new ''
183
200
  concat(semantic_form_for(@new_post) do |builder|
184
201
  concat(builder.input(:publish_at, :as => :datetime_select, :order => [:day, :month, :year]))
185
202
  end)
186
203
  end
187
204
 
188
205
  it 'should associate the legend label with the new first select' do
189
- output_buffer.should have_tag('form li.datetime_select fieldset legend.label label[@for="post_publish_at_3i"]')
206
+ expect(output_buffer.to_str).to have_tag('form li.datetime_select fieldset legend.label label[@for="post_publish_at_3i"]')
190
207
  end
191
208
  end
192
-
209
+
193
210
  end
@@ -1,12 +1,13 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
- describe 'email input' do
5
+ RSpec.describe 'email input' do
5
6
 
6
7
  include FormtasticSpecHelper
7
8
 
8
9
  before do
9
- @output_buffer = ''
10
+ @output_buffer = ActionView::OutputBuffer.new ''
10
11
  mock_everything
11
12
  end
12
13
 
@@ -41,11 +42,11 @@ describe 'email input' do
41
42
  it_should_have_label_and_input_with_id("context2_post_email")
42
43
 
43
44
  end
44
-
45
+
45
46
  describe "when index is provided" do
46
47
 
47
48
  before do
48
- @output_buffer = ''
49
+ @output_buffer = ActionView::OutputBuffer.new ''
49
50
  mock_everything
50
51
 
51
52
  concat(semantic_form_for(@new_post) do |builder|
@@ -54,32 +55,32 @@ describe 'email input' do
54
55
  end)
55
56
  end)
56
57
  end
57
-
58
+
58
59
  it 'should index the id of the wrapper' do
59
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
60
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
60
61
  end
61
-
62
+
62
63
  it 'should index the id of the select tag' do
63
- output_buffer.should have_tag("input#post_author_attributes_3_name")
64
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
64
65
  end
65
-
66
+
66
67
  it 'should index the name of the select tag' do
67
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
68
+ expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
68
69
  end
69
-
70
+
70
71
  end
71
-
72
-
72
+
73
+
73
74
  describe "when required" do
74
75
  it "should add the required attribute to the input's html options" do
75
- with_config :use_required_attribute, true do
76
+ with_config :use_required_attribute, true do
76
77
  concat(semantic_form_for(@new_post) do |builder|
77
78
  concat(builder.input(:title, :as => :email, :required => true))
78
79
  end)
79
- output_buffer.should have_tag("input[@required]")
80
+ expect(output_buffer.to_str).to have_tag("input[@required]")
80
81
  end
81
82
  end
82
83
  end
83
-
84
+
84
85
  end
85
86
 
@@ -1,12 +1,13 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
- describe 'file input' do
5
+ RSpec.describe 'file input' do
5
6
 
6
7
  include FormtasticSpecHelper
7
8
 
8
9
  before do
9
- @output_buffer = ''
10
+ @output_buffer = ActionView::OutputBuffer.new ''
10
11
  mock_everything
11
12
 
12
13
  concat(semantic_form_for(@new_post) do |builder|
@@ -27,13 +28,13 @@ describe 'file input' do
27
28
  concat(semantic_form_for(@new_post) do |builder|
28
29
  concat(builder.input(:title, :as => :file, :input_html => { :class => 'myclass' }))
29
30
  end)
30
- output_buffer.should have_tag("form li input.myclass")
31
+ expect(output_buffer.to_str).to have_tag("form li input.myclass")
31
32
  end
32
33
 
33
34
  describe "when namespace is provided" do
34
35
 
35
36
  before do
36
- @output_buffer = ''
37
+ @output_buffer = ActionView::OutputBuffer.new ''
37
38
  mock_everything
38
39
 
39
40
  concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
@@ -45,11 +46,11 @@ describe 'file input' do
45
46
  it_should_have_label_and_input_with_id("context2_post_body")
46
47
 
47
48
  end
48
-
49
+
49
50
  describe "when index is provided" do
50
51
 
51
52
  before do
52
- @output_buffer = ''
53
+ @output_buffer = ActionView::OutputBuffer.new ''
53
54
  mock_everything
54
55
 
55
56
  concat(semantic_form_for(@new_post) do |builder|
@@ -58,32 +59,32 @@ describe 'file input' do
58
59
  end)
59
60
  end)
60
61
  end
61
-
62
+
62
63
  it 'should index the id of the wrapper' do
63
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
64
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
64
65
  end
65
-
66
+
66
67
  it 'should index the id of the select tag' do
67
- output_buffer.should have_tag("input#post_author_attributes_3_name")
68
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
68
69
  end
69
-
70
+
70
71
  it 'should index the name of the select tag' do
71
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
72
+ expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
72
73
  end
73
-
74
+
74
75
  end
75
-
76
-
76
+
77
+
77
78
  context "when required" do
78
79
  it "should add the required attribute to the input's html options" do
79
80
  with_config :use_required_attribute, true do
80
81
  concat(semantic_form_for(@new_post) do |builder|
81
82
  concat(builder.input(:title, :as => :file, :required => true))
82
83
  end)
83
- output_buffer.should have_tag("input[@required]")
84
+ expect(output_buffer.to_str).to have_tag("input[@required]")
84
85
  end
85
86
  end
86
87
  end
87
-
88
+
88
89
  end
89
90
 
@@ -1,14 +1,15 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
- describe 'hidden input' do
5
+ RSpec.describe 'hidden input' do
5
6
 
6
7
  include FormtasticSpecHelper
7
8
 
8
9
  before do
9
- @output_buffer = ''
10
+ @output_buffer = ActionView::OutputBuffer.new ''
10
11
  mock_everything
11
-
12
+
12
13
  concat(semantic_form_for(@new_post) do |builder|
13
14
  concat(builder.input(:secret, :as => :hidden))
14
15
  concat(builder.input(:published, :as => :hidden, :input_html => {:value => true}))
@@ -22,34 +23,34 @@ describe 'hidden input' do
22
23
  it_should_not_have_a_label
23
24
 
24
25
  it "should generate a input field" do
25
- output_buffer.should have_tag("form li input#post_secret")
26
- output_buffer.should have_tag("form li input#post_secret[@type=\"hidden\"]")
27
- output_buffer.should have_tag("form li input#post_secret[@name=\"post[secret]\"]")
26
+ expect(output_buffer.to_str).to have_tag("form li input#post_secret")
27
+ expect(output_buffer.to_str).to have_tag("form li input#post_secret[@type=\"hidden\"]")
28
+ expect(output_buffer.to_str).to have_tag("form li input#post_secret[@name=\"post[secret]\"]")
28
29
  end
29
30
 
30
31
  it "should get value from the object" do
31
- output_buffer.should have_tag("form li input#post_secret[@type=\"hidden\"][@value=\"1\"]")
32
+ expect(output_buffer.to_str).to have_tag("form li input#post_secret[@type=\"hidden\"][@value=\"1\"]")
32
33
  end
33
-
34
+
34
35
  it "should pass any explicitly specified value - using :input_html options" do
35
- output_buffer.should have_tag("form li input#post_published[@type=\"hidden\"][@value=\"true\"]")
36
+ expect(output_buffer.to_str).to have_tag("form li input#post_published[@type=\"hidden\"][@value=\"true\"]")
36
37
  end
37
38
 
38
39
  it "should pass any option specified using :input_html" do
39
- output_buffer.should have_tag("form li input#new_post_reviewer[@type=\"hidden\"][@class=\"new_post_reviewer\"]")
40
+ expect(output_buffer.to_str).to have_tag("form li input#new_post_reviewer[@type=\"hidden\"][@class=\"new_post_reviewer\"]")
40
41
  end
41
42
 
42
43
  it "should not render inline errors" do
43
44
  @errors = double('errors')
44
- @errors.stub(:[]).with(errors_matcher(:secret)).and_return(["foo", "bah"])
45
- @new_post.stub(:errors).and_return(@errors)
45
+ allow(@errors).to receive(:[]).with(errors_matcher(:secret)).and_return(["foo", "bah"])
46
+ allow(@new_post).to receive(:errors).and_return(@errors)
46
47
 
47
48
  concat(semantic_form_for(@new_post) do |builder|
48
49
  concat(builder.input(:secret, :as => :hidden))
49
50
  end)
50
51
 
51
- output_buffer.should_not have_tag("form li p.inline-errors")
52
- output_buffer.should_not have_tag("form li ul.errors")
52
+ expect(output_buffer.to_str).not_to have_tag("form li p.inline-errors")
53
+ expect(output_buffer.to_str).not_to have_tag("form li ul.errors")
53
54
  end
54
55
 
55
56
  it "should not render inline hints" do
@@ -57,16 +58,16 @@ describe 'hidden input' do
57
58
  concat(builder.input(:secret, :as => :hidden, :hint => "all your base are belong to use"))
58
59
  end)
59
60
 
60
- output_buffer.should_not have_tag("form li p.inline-hints")
61
- output_buffer.should_not have_tag("form li ul.hints")
61
+ expect(output_buffer.to_str).not_to have_tag("form li p.inline-hints")
62
+ expect(output_buffer.to_str).not_to have_tag("form li ul.hints")
62
63
  end
63
64
 
64
65
  describe "when namespace is provided" do
65
66
 
66
67
  before do
67
- @output_buffer = ''
68
+ @output_buffer = ActionView::OutputBuffer.new ''
68
69
  mock_everything
69
-
70
+
70
71
  concat(semantic_form_for(@new_post, :namespace => 'context2') do |builder|
71
72
  concat(builder.input(:secret, :as => :hidden))
72
73
  concat(builder.input(:published, :as => :hidden, :input_html => {:value => true}))
@@ -84,11 +85,11 @@ describe 'hidden input' do
84
85
  end
85
86
 
86
87
  end
87
-
88
+
88
89
  describe "when index is provided" do
89
90
 
90
91
  before do
91
- @output_buffer = ''
92
+ @output_buffer = ActionView::OutputBuffer.new ''
92
93
  mock_everything
93
94
 
94
95
  concat(semantic_form_for(@new_post) do |builder|
@@ -97,28 +98,28 @@ describe 'hidden input' do
97
98
  end)
98
99
  end)
99
100
  end
100
-
101
+
101
102
  it 'should index the id of the wrapper' do
102
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
103
+ expect(output_buffer.to_str).to have_tag("li#post_author_attributes_3_name_input")
103
104
  end
104
-
105
+
105
106
  it 'should index the id of the select tag' do
106
- output_buffer.should have_tag("input#post_author_attributes_3_name")
107
+ expect(output_buffer.to_str).to have_tag("input#post_author_attributes_3_name")
107
108
  end
108
-
109
+
109
110
  it 'should index the name of the select tag' do
110
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
111
+ expect(output_buffer.to_str).to have_tag("input[@name='post[author_attributes][3][name]']")
111
112
  end
112
-
113
+
113
114
  end
114
-
115
-
115
+
116
+
116
117
  context "when required" do
117
118
  it "should not add the required attribute to the input's html options" do
118
119
  concat(semantic_form_for(@new_post) do |builder|
119
120
  concat(builder.input(:title, :as => :hidden, :required => true))
120
121
  end)
121
- output_buffer.should_not have_tag("input[@required]")
122
+ expect(output_buffer.to_str).not_to have_tag("input[@required]")
122
123
  end
123
124
  end
124
125
 
@@ -127,7 +128,7 @@ describe 'hidden input' do
127
128
  concat(semantic_form_for(@new_post) do |builder|
128
129
  concat(builder.input(:title, :as => :hidden, :input_html => {:autofocus => true}))
129
130
  end)
130
- output_buffer.should_not have_tag("input[@autofocus]")
131
+ expect(output_buffer.to_str).not_to have_tag("input[@autofocus]")
131
132
  end
132
133
  end
133
134
 
@@ -1,16 +1,17 @@
1
1
  # encoding: utf-8
2
+ # frozen_string_literal: true
2
3
  require 'spec_helper'
3
4
 
4
- describe "*select: options[:include_blank]" do
5
+ RSpec.describe "*select: options[:include_blank]" do
5
6
 
6
7
  include FormtasticSpecHelper
7
8
 
8
9
  before do
9
- @output_buffer = ''
10
+ @output_buffer = ActionView::OutputBuffer.new ''
10
11
  mock_everything
11
12
 
12
- @new_post.stub(:author_id).and_return(nil)
13
- @new_post.stub(:publish_at).and_return(nil)
13
+ allow(@new_post).to receive(:author_id).and_return(nil)
14
+ allow(@new_post).to receive(:publish_at).and_return(nil)
14
15
  end
15
16
 
16
17
  SELECT_INPUT_TYPES = {
@@ -29,7 +30,7 @@ describe "*select: options[:include_blank]" do
29
30
  concat(semantic_form_for(@new_post) do |builder|
30
31
  concat(builder.input(attribute, :as => as))
31
32
  end)
32
- output_buffer.should have_tag("form li select option[@value='']", "")
33
+ expect(output_buffer.to_str).to have_tag("form li select option[@value='']", "")
33
34
  end
34
35
 
35
36
  it 'blank value should not be included if the default value specified in config is false' do
@@ -37,7 +38,7 @@ describe "*select: options[:include_blank]" do
37
38
  concat(semantic_form_for(@new_post) do |builder|
38
39
  concat(builder.input(attribute, :as => as))
39
40
  end)
40
- output_buffer.should_not have_tag("form li select option[@value='']", "")
41
+ expect(output_buffer.to_str).not_to have_tag("form li select option[@value='']", "")
41
42
  end
42
43
 
43
44
  after do
@@ -50,7 +51,7 @@ describe "*select: options[:include_blank]" do
50
51
  concat(semantic_form_for(@new_post) do |builder|
51
52
  concat(builder.input(attribute, :as => as, :include_blank => false))
52
53
  end)
53
- output_buffer.should_not have_tag("form li select option[@value='']", "")
54
+ expect(output_buffer.to_str).not_to have_tag("form li select option[@value='']", "")
54
55
  end
55
56
  end
56
57
 
@@ -59,7 +60,7 @@ describe "*select: options[:include_blank]" do
59
60
  concat(semantic_form_for(@new_post) do |builder|
60
61
  concat(builder.input(attribute, :as => as, :include_blank => true))
61
62
  end)
62
- output_buffer.should have_tag("form li select option[@value='']", "")
63
+ expect(output_buffer.to_str).to have_tag("form li select option[@value='']", "")
63
64
  end
64
65
  end
65
66
 
@@ -69,7 +70,7 @@ describe "*select: options[:include_blank]" do
69
70
  concat(semantic_form_for(@new_post) do |builder|
70
71
  concat(builder.input(attribute, :as => as, :include_blank => 'string'))
71
72
  end)
72
- output_buffer.should have_tag("form li select option[@value='']", "string")
73
+ expect(output_buffer.to_str).to have_tag("form li select option[@value='']", "string")
73
74
  end
74
75
  end
75
76
  end