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.
Files changed (114) hide show
  1. checksums.yaml +5 -5
  2. data/.gitattributes +1 -0
  3. data/.gitignore +3 -2
  4. data/.travis.yml +28 -40
  5. data/CHANGELOG.md +49 -0
  6. data/DEPRECATIONS +1 -1
  7. data/Gemfile.lock +104 -0
  8. data/README.md +628 -629
  9. data/Rakefile +20 -1
  10. data/app/assets/stylesheets/formtastic.css +1 -1
  11. data/bin/appraisal +8 -0
  12. data/formtastic.gemspec +8 -14
  13. data/gemfiles/rails_5.2/Gemfile +5 -0
  14. data/gemfiles/rails_6.0/Gemfile +5 -0
  15. data/gemfiles/rails_edge/Gemfile +13 -0
  16. data/lib/formtastic.rb +5 -11
  17. data/lib/formtastic/actions.rb +6 -3
  18. data/lib/formtastic/deprecation.rb +1 -38
  19. data/lib/formtastic/engine.rb +3 -1
  20. data/lib/formtastic/form_builder.rb +8 -24
  21. data/lib/formtastic/helpers/action_helper.rb +1 -48
  22. data/lib/formtastic/helpers/errors_helper.rb +2 -2
  23. data/lib/formtastic/helpers/fieldset_wrapper.rb +7 -3
  24. data/lib/formtastic/helpers/input_helper.rb +18 -76
  25. data/lib/formtastic/helpers/inputs_helper.rb +12 -3
  26. data/lib/formtastic/i18n.rb +1 -1
  27. data/lib/formtastic/inputs.rb +32 -29
  28. data/lib/formtastic/inputs/base/collections.rb +1 -5
  29. data/lib/formtastic/inputs/base/errors.rb +4 -4
  30. data/lib/formtastic/inputs/base/hints.rb +1 -1
  31. data/lib/formtastic/inputs/base/timeish.rb +5 -1
  32. data/lib/formtastic/inputs/base/validations.rb +19 -9
  33. data/lib/formtastic/inputs/check_boxes_input.rb +3 -3
  34. data/lib/formtastic/inputs/color_input.rb +0 -1
  35. data/lib/formtastic/inputs/select_input.rb +1 -1
  36. data/lib/formtastic/localizer.rb +5 -7
  37. data/lib/formtastic/version.rb +1 -1
  38. data/lib/generators/templates/formtastic.rb +4 -6
  39. data/script/integration-template.rb +71 -0
  40. data/script/integration.sh +19 -0
  41. data/spec/action_class_finder_spec.rb +1 -1
  42. data/spec/actions/button_action_spec.rb +8 -8
  43. data/spec/actions/generic_action_spec.rb +60 -60
  44. data/spec/actions/input_action_spec.rb +7 -7
  45. data/spec/actions/link_action_spec.rb +10 -10
  46. data/spec/builder/custom_builder_spec.rb +36 -20
  47. data/spec/builder/error_proc_spec.rb +4 -4
  48. data/spec/builder/semantic_fields_for_spec.rb +27 -27
  49. data/spec/generators/formtastic/form/form_generator_spec.rb +25 -25
  50. data/spec/generators/formtastic/input/input_generator_spec.rb +31 -31
  51. data/spec/generators/formtastic/install/install_generator_spec.rb +9 -9
  52. data/spec/helpers/action_helper_spec.rb +328 -10
  53. data/spec/helpers/actions_helper_spec.rb +17 -17
  54. data/spec/helpers/form_helper_spec.rb +33 -33
  55. data/spec/helpers/input_helper_spec.rb +975 -2
  56. data/spec/helpers/inputs_helper_spec.rb +120 -105
  57. data/spec/helpers/reflection_helper_spec.rb +3 -3
  58. data/spec/helpers/semantic_errors_helper_spec.rb +22 -22
  59. data/spec/i18n_spec.rb +26 -26
  60. data/spec/input_class_finder_spec.rb +1 -1
  61. data/spec/inputs/base/collections_spec.rb +6 -6
  62. data/spec/inputs/base/validations_spec.rb +157 -19
  63. data/spec/inputs/boolean_input_spec.rb +55 -55
  64. data/spec/inputs/check_boxes_input_spec.rb +96 -95
  65. data/spec/inputs/color_input_spec.rb +51 -63
  66. data/spec/inputs/country_input_spec.rb +20 -20
  67. data/spec/inputs/custom_input_spec.rb +2 -6
  68. data/spec/inputs/datalist_input_spec.rb +1 -1
  69. data/spec/inputs/date_picker_input_spec.rb +42 -42
  70. data/spec/inputs/date_select_input_spec.rb +51 -37
  71. data/spec/inputs/datetime_picker_input_spec.rb +46 -46
  72. data/spec/inputs/datetime_select_input_spec.rb +53 -37
  73. data/spec/inputs/email_input_spec.rb +5 -5
  74. data/spec/inputs/file_input_spec.rb +6 -6
  75. data/spec/inputs/hidden_input_spec.rb +18 -18
  76. data/spec/inputs/include_blank_spec.rb +8 -8
  77. data/spec/inputs/label_spec.rb +20 -20
  78. data/spec/inputs/number_input_spec.rb +112 -112
  79. data/spec/inputs/password_input_spec.rb +5 -5
  80. data/spec/inputs/phone_input_spec.rb +5 -5
  81. data/spec/inputs/placeholder_spec.rb +5 -5
  82. data/spec/inputs/radio_input_spec.rb +63 -65
  83. data/spec/inputs/range_input_spec.rb +66 -66
  84. data/spec/inputs/readonly_spec.rb +4 -4
  85. data/spec/inputs/search_input_spec.rb +5 -5
  86. data/spec/inputs/select_input_spec.rb +92 -96
  87. data/spec/inputs/string_input_spec.rb +23 -23
  88. data/spec/inputs/text_input_spec.rb +16 -16
  89. data/spec/inputs/time_picker_input_spec.rb +43 -43
  90. data/spec/inputs/time_select_input_spec.rb +67 -54
  91. data/spec/inputs/time_zone_input_spec.rb +19 -19
  92. data/spec/inputs/url_input_spec.rb +5 -5
  93. data/spec/inputs/with_options_spec.rb +7 -7
  94. data/spec/localizer_spec.rb +17 -17
  95. data/spec/namespaced_class_finder_spec.rb +2 -2
  96. data/spec/schema.rb +21 -0
  97. data/spec/spec_helper.rb +163 -223
  98. data/spec/support/custom_macros.rb +72 -75
  99. data/spec/support/shared_examples.rb +0 -1301
  100. data/spec/support/test_environment.rb +23 -9
  101. metadata +33 -123
  102. data/Appraisals +0 -43
  103. data/CHANGELOG +0 -54
  104. data/gemfiles/rails_3.2.gemfile +0 -9
  105. data/gemfiles/rails_4.0.4.gemfile +0 -8
  106. data/gemfiles/rails_4.1.gemfile +0 -8
  107. data/gemfiles/rails_4.2.gemfile +0 -8
  108. data/gemfiles/rails_4.gemfile +0 -8
  109. data/gemfiles/rails_5.0.gemfile +0 -8
  110. data/gemfiles/rails_edge.gemfile +0 -15
  111. data/lib/formtastic/util.rb +0 -57
  112. data/spec/helpers/namespaced_action_helper_spec.rb +0 -43
  113. data/spec/helpers/namespaced_input_helper_spec.rb +0 -36
  114. data/spec/util_spec.rb +0 -66
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'password input' do
4
+ RSpec.describe 'password input' do
5
5
 
6
6
  include FormtasticSpecHelper
7
7
 
@@ -71,15 +71,15 @@ describe 'password input' do
71
71
  end
72
72
 
73
73
  it 'should index the id of the wrapper' do
74
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
74
+ expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
75
75
  end
76
76
 
77
77
  it 'should index the id of the select tag' do
78
- output_buffer.should have_tag("input#post_author_attributes_3_name")
78
+ expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
79
79
  end
80
80
 
81
81
  it 'should index the name of the select tag' do
82
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
82
+ expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
83
83
  end
84
84
 
85
85
  end
@@ -91,7 +91,7 @@ describe 'password input' do
91
91
  concat(semantic_form_for(@new_post) do |builder|
92
92
  concat(builder.input(:title, :as => :password, :required => true))
93
93
  end)
94
- output_buffer.should have_tag("input[@required]")
94
+ expect(output_buffer).to have_tag("input[@required]")
95
95
  end
96
96
  end
97
97
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'phone input' do
4
+ RSpec.describe 'phone input' do
5
5
 
6
6
  include FormtasticSpecHelper
7
7
 
@@ -56,15 +56,15 @@ describe 'phone input' do
56
56
  end
57
57
 
58
58
  it 'should index the id of the wrapper' do
59
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
59
+ expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
60
60
  end
61
61
 
62
62
  it 'should index the id of the select tag' do
63
- output_buffer.should have_tag("input#post_author_attributes_3_name")
63
+ expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
64
64
  end
65
65
 
66
66
  it 'should index the name of the select tag' do
67
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
67
+ expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
68
68
  end
69
69
 
70
70
  end
@@ -76,7 +76,7 @@ describe 'phone input' do
76
76
  concat(semantic_form_for(@new_post) do |builder|
77
77
  concat(builder.input(:title, :as => :phone, :required => true))
78
78
  end)
79
- output_buffer.should have_tag("input[@required]")
79
+ expect(output_buffer).to have_tag("input[@required]")
80
80
  end
81
81
  end
82
82
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'string input' do
4
+ RSpec.describe 'string input' do
5
5
 
6
6
  include FormtasticSpecHelper
7
7
 
@@ -27,7 +27,7 @@ describe 'string input' do
27
27
  concat(semantic_form_for(@new_post) do |builder|
28
28
  concat(builder.input(:title, :as => type))
29
29
  end)
30
- output_buffer.should have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="War and Peace"]')
30
+ expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="War and Peace"]')
31
31
  end
32
32
  end
33
33
  end
@@ -37,7 +37,7 @@ describe 'string input' do
37
37
  concat(semantic_form_for(@new_post) do |builder|
38
38
  concat(builder.input(:title, :as => type))
39
39
  end)
40
- output_buffer.should_not have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder]')
40
+ expect(output_buffer).not_to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder]')
41
41
  end
42
42
  end
43
43
 
@@ -48,7 +48,7 @@ describe 'string input' do
48
48
  concat(semantic_form_for(@new_post) do |builder|
49
49
  concat(builder.input(:title, :as => type, :input_html => { :placeholder => "Foo" }))
50
50
  end)
51
- output_buffer.should have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Foo"]')
51
+ expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Foo"]')
52
52
  end
53
53
  end
54
54
  end
@@ -58,7 +58,7 @@ describe 'string input' do
58
58
  concat(semantic_form_for(@new_post) do |builder|
59
59
  concat(builder.input(:title, :as => type, :input_html => { :placeholder => "Untitled" }))
60
60
  end)
61
- output_buffer.should have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Untitled"]')
61
+ expect(output_buffer).to have_tag((type == :text ? 'textarea' : 'input') + '[@placeholder="Untitled"]')
62
62
  end
63
63
  end
64
64
 
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'radio input' do
4
+ RSpec.describe 'radio input' do
5
5
 
6
6
  include FormtasticSpecHelper
7
7
 
@@ -27,66 +27,66 @@ describe 'radio input' do
27
27
  it_should_use_the_collection_when_provided(:radio, 'input')
28
28
 
29
29
  it 'should generate a legend containing a label with text for the input' do
30
- output_buffer.should have_tag('form li fieldset legend.label label')
31
- output_buffer.should have_tag('form li fieldset legend.label label', /Author/)
30
+ expect(output_buffer).to have_tag('form li fieldset legend.label label')
31
+ expect(output_buffer).to have_tag('form li fieldset legend.label label', :text => /Author/)
32
32
  end
33
33
 
34
34
  it 'should not link the label within the legend to any input' do
35
- output_buffer.should_not have_tag('form li fieldset legend label[@for]')
35
+ expect(output_buffer).not_to have_tag('form li fieldset legend label[@for]')
36
36
  end
37
37
 
38
38
  it 'should generate an ordered list with a list item for each choice' do
39
- output_buffer.should have_tag('form li fieldset ol')
40
- output_buffer.should have_tag('form li fieldset ol li.choice', :count => ::Author.all.size)
39
+ expect(output_buffer).to have_tag('form li fieldset ol')
40
+ expect(output_buffer).to have_tag('form li fieldset ol li.choice', :count => ::Author.all.size)
41
41
  end
42
42
 
43
43
  it 'should have one option with a "checked" attribute' do
44
- output_buffer.should have_tag('form li input[@checked]', :count => 1)
44
+ expect(output_buffer).to have_tag('form li input[@checked]', :count => 1)
45
45
  end
46
46
 
47
47
  describe "each choice" do
48
48
 
49
49
  it 'should not give the choice label the .label class' do
50
- output_buffer.should_not have_tag('li.choice label.label')
50
+ expect(output_buffer).not_to have_tag('li.choice label.label')
51
51
  end
52
52
 
53
53
  it 'should not add the required attribute to each input' do
54
- output_buffer.should_not have_tag('li.choice input[@required]')
54
+ expect(output_buffer).not_to have_tag('li.choice input[@required]')
55
55
  end
56
56
 
57
57
 
58
58
  it 'should contain a label for the radio input with a nested input and label text' do
59
59
  ::Author.all.each do |author|
60
- output_buffer.should have_tag('form li fieldset ol li label', /#{author.to_label}/)
61
- output_buffer.should have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
60
+ expect(output_buffer).to have_tag('form li fieldset ol li label', /#{author.to_label}/)
61
+ expect(output_buffer).to have_tag("form li fieldset ol li label[@for='post_author_id_#{author.id}']")
62
62
  end
63
63
  end
64
64
 
65
65
  it 'should use values as li.class when value_as_class is true' do
66
66
  ::Author.all.each do |author|
67
- output_buffer.should have_tag("form li fieldset ol li.author_#{author.id} label")
67
+ expect(output_buffer).to have_tag("form li fieldset ol li.author_#{author.id} label")
68
68
  end
69
69
  end
70
70
 
71
71
  it "should have a radio input" do
72
72
  ::Author.all.each do |author|
73
- output_buffer.should have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
74
- output_buffer.should have_tag("form li fieldset ol li label input[@type='radio']")
75
- output_buffer.should have_tag("form li fieldset ol li label input[@value='#{author.id}']")
76
- output_buffer.should have_tag("form li fieldset ol li label input[@name='post[author_id]']")
73
+ expect(output_buffer).to have_tag("form li fieldset ol li label input#post_author_id_#{author.id}")
74
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@type='radio']")
75
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
76
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@name='post[author_id]']")
77
77
  end
78
78
  end
79
79
 
80
80
  it "should mark input as checked if it's the the existing choice" do
81
- @new_post.author_id.should == @bob.id
82
- @new_post.author.id.should == @bob.id
83
- @new_post.author.should == @bob
81
+ expect(@new_post.author_id).to eq(@bob.id)
82
+ expect(@new_post.author.id).to eq(@bob.id)
83
+ expect(@new_post.author).to eq(@bob)
84
84
 
85
85
  concat(semantic_form_for(@new_post) do |builder|
86
86
  concat(builder.input(:author, :as => :radio))
87
87
  end)
88
88
 
89
- output_buffer.should have_tag("form li fieldset ol li label input[@checked='checked']")
89
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@checked='checked']")
90
90
  end
91
91
 
92
92
  it "should mark the input as disabled if options attached for disabling" do
@@ -94,8 +94,8 @@ describe 'radio input' do
94
94
  concat(builder.input(:author, :as => :radio, :collection => [["Test", 'test'], ["Try", "try", {:disabled => true}]]))
95
95
  end)
96
96
 
97
- output_buffer.should_not have_tag("form li fieldset ol li label input[@value='test'][@disabled='disabled']")
98
- output_buffer.should have_tag("form li fieldset ol li label input[@value='try'][@disabled='disabled']")
97
+ expect(output_buffer).not_to have_tag("form li fieldset ol li label input[@value='test'][@disabled='disabled']")
98
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='try'][@disabled='disabled']")
99
99
  end
100
100
 
101
101
  it "should not contain invalid HTML attributes" do
@@ -104,13 +104,13 @@ describe 'radio input' do
104
104
  concat(builder.input(:author, :as => :radio))
105
105
  end)
106
106
 
107
- output_buffer.should_not have_tag("form li fieldset ol li input[@find_options]")
107
+ expect(output_buffer).not_to have_tag("form li fieldset ol li input[@find_options]")
108
108
  end
109
109
 
110
110
  end
111
111
 
112
112
  describe 'and no object is given' do
113
- before(:each) do
113
+ before(:example) do
114
114
  output_buffer.replace ''
115
115
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
116
116
  concat(builder.input(:author_id, :as => :radio, :collection => ::Author.all))
@@ -118,17 +118,17 @@ describe 'radio input' do
118
118
  end
119
119
 
120
120
  it 'should generate a fieldset with legend' do
121
- output_buffer.should have_tag('form li fieldset legend', /Author/)
121
+ expect(output_buffer).to have_tag('form li fieldset legend', :text => /Author/)
122
122
  end
123
123
 
124
124
  it 'should generate an li tag for each item in the collection' do
125
- output_buffer.should have_tag('form li fieldset ol li', :count => ::Author.all.size)
125
+ expect(output_buffer).to have_tag('form li fieldset ol li', :count => ::Author.all.size)
126
126
  end
127
127
 
128
128
  it 'should generate labels for each item' do
129
129
  ::Author.all.each do |author|
130
- output_buffer.should have_tag('form li fieldset ol li label', /#{author.to_label}/)
131
- output_buffer.should have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
130
+ expect(output_buffer).to have_tag('form li fieldset ol li label', :text => /#{author.to_label}/)
131
+ expect(output_buffer).to have_tag("form li fieldset ol li label[@for='project_author_id_#{author.id}']")
132
132
  end
133
133
  end
134
134
 
@@ -136,17 +136,15 @@ describe 'radio input' do
136
136
  concat(semantic_form_for(:project, :url => 'http://test.host') do |builder|
137
137
  concat(builder.input(:author_id, :as => :radio, :collection => [["<b>Item 1</b>", 1], ["<b>Item 2</b>", 2]]))
138
138
  end)
139
- output_buffer.should have_tag('form li fieldset ol li label') do |label|
140
- label.body.should match /&lt;b&gt;Item [12]&lt;\/b&gt;$/
141
- end
139
+ expect(output_buffer).to have_tag('form li fieldset ol li label', text: %r{<b>Item [12]</b>}, count: 2)
142
140
  end
143
141
 
144
142
  it 'should generate inputs for each item' do
145
143
  ::Author.all.each do |author|
146
- output_buffer.should have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
147
- output_buffer.should have_tag("form li fieldset ol li label input[@type='radio']")
148
- output_buffer.should have_tag("form li fieldset ol li label input[@value='#{author.id}']")
149
- output_buffer.should have_tag("form li fieldset ol li label input[@name='project[author_id]']")
144
+ expect(output_buffer).to have_tag("form li fieldset ol li label input#project_author_id_#{author.id}")
145
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@type='radio']")
146
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@value='#{author.id}']")
147
+ expect(output_buffer).to have_tag("form li fieldset ol li label input[@name='project[author_id]']")
150
148
  end
151
149
  end
152
150
  end
@@ -154,10 +152,10 @@ describe 'radio input' do
154
152
 
155
153
  describe 'for a enum column' do
156
154
  before do
157
- @new_post.stub(:status) { 'inactive' }
155
+ allow(@new_post).to receive(:status) { 'inactive' }
158
156
  statuses = ActiveSupport::HashWithIndifferentAccess.new("active"=>0, "inactive"=>1)
159
- @new_post.class.stub(:statuses) { statuses }
160
- @new_post.stub(:defined_enums) { { "status" => statuses } }
157
+ allow(@new_post.class).to receive(:statuses) { statuses }
158
+ allow(@new_post).to receive(:defined_enums) { { "status" => statuses } }
161
159
  end
162
160
 
163
161
  before do
@@ -167,15 +165,15 @@ describe 'radio input' do
167
165
  end
168
166
 
169
167
  it 'should have a radio input for each defined enum status' do
170
- output_buffer.should have_tag("form li input[@name='post[status]'][@type='radio']", :count => @new_post.class.statuses.count)
168
+ expect(output_buffer).to have_tag("form li input[@name='post[status]'][@type='radio']", :count => @new_post.class.statuses.count)
171
169
  @new_post.class.statuses.each do |label, value|
172
- output_buffer.should have_tag("form li input[@value='#{label}']")
173
- output_buffer.should have_tag("form li label", /#{label.humanize}/)
170
+ expect(output_buffer).to have_tag("form li input[@value='#{label}']")
171
+ expect(output_buffer).to have_tag("form li label", :text => /#{label.humanize}/)
174
172
  end
175
173
  end
176
174
 
177
175
  it 'should have one radio input with a "checked" attribute' do
178
- output_buffer.should have_tag("form li input[@name='post[status]'][@checked]", :count => 1)
176
+ expect(output_buffer).to have_tag("form li input[@name='post[status]'][@checked]", :count => 1)
179
177
  end
180
178
  end
181
179
 
@@ -186,7 +184,7 @@ describe 'radio input' do
186
184
  ::I18n.backend.store_translations :en, :formtastic => { :labels => { :post => { :authors => "Translated!" }}}
187
185
 
188
186
  with_config :i18n_lookups_by_default, true do
189
- @new_post.stub(:author_ids).and_return(nil)
187
+ allow(@new_post).to receive(:author_ids).and_return(nil)
190
188
  concat(semantic_form_for(@new_post) do |builder|
191
189
  concat(builder.input(:authors, :as => :radio))
192
190
  end)
@@ -198,66 +196,66 @@ describe 'radio input' do
198
196
  end
199
197
 
200
198
  it "should do foo" do
201
- output_buffer.should have_tag("legend.label label", /Translated/)
199
+ expect(output_buffer).to have_tag("legend.label label", :text => /Translated/)
202
200
  end
203
201
 
204
202
  end
205
203
 
206
204
  describe "when :label option is set" do
207
205
  before do
208
- @new_post.stub(:author_ids).and_return(nil)
206
+ allow(@new_post).to receive(:author_ids).and_return(nil)
209
207
  concat(semantic_form_for(@new_post) do |builder|
210
208
  concat(builder.input(:authors, :as => :radio, :label => 'The authors'))
211
209
  end)
212
210
  end
213
211
 
214
212
  it "should output the correct label title" do
215
- output_buffer.should have_tag("legend.label label", /The authors/)
213
+ expect(output_buffer).to have_tag("legend.label label", :text => /The authors/)
216
214
  end
217
215
  end
218
216
 
219
217
  describe "when :label option is false" do
220
218
  before do
221
219
  @output_buffer = ''
222
- @new_post.stub(:author_ids).and_return(nil)
220
+ allow(@new_post).to receive(:author_ids).and_return(nil)
223
221
  concat(semantic_form_for(@new_post) do |builder|
224
222
  concat(builder.input(:authors, :as => :radio, :label => false))
225
223
  end)
226
224
  end
227
225
 
228
226
  it "should not output the legend" do
229
- output_buffer.should_not have_tag("legend.label")
230
- output_buffer.should_not include("&gt;")
227
+ expect(output_buffer).not_to have_tag("legend.label")
228
+ expect(output_buffer).not_to include("&gt;")
231
229
  end
232
230
 
233
231
  it "should not cause escaped HTML" do
234
- output_buffer.should_not include("&gt;")
232
+ expect(output_buffer).not_to include("&gt;")
235
233
  end
236
234
  end
237
235
 
238
236
  describe "when :required option is true" do
239
237
  before do
240
- @new_post.stub(:author_ids).and_return(nil)
238
+ allow(@new_post).to receive(:author_ids).and_return(nil)
241
239
  concat(semantic_form_for(@new_post) do |builder|
242
240
  concat(builder.input(:authors, :as => :radio, :required => true))
243
241
  end)
244
242
  end
245
243
 
246
244
  it "should output the correct label title" do
247
- output_buffer.should have_tag("legend.label label abbr")
245
+ expect(output_buffer).to have_tag("legend.label label abbr")
248
246
  end
249
247
  end
250
248
 
251
249
  describe "when :namespace is given on form" do
252
250
  before do
253
251
  @output_buffer = ''
254
- @new_post.stub(:author_ids).and_return(nil)
252
+ allow(@new_post).to receive(:author_ids).and_return(nil)
255
253
  concat(semantic_form_for(@new_post, :namespace => "custom_prefix") do |builder|
256
254
  concat(builder.input(:authors, :as => :radio, :label => ''))
257
255
  end)
258
256
 
259
- output_buffer.should match(/for="custom_prefix_post_author_ids_(\d+)"/)
260
- output_buffer.should match(/id="custom_prefix_post_author_ids_(\d+)"/)
257
+ expect(output_buffer).to match(/for="custom_prefix_post_author_ids_(\d+)"/)
258
+ expect(output_buffer).to match(/id="custom_prefix_post_author_ids_(\d+)"/)
261
259
  end
262
260
  it_should_have_input_wrapper_with_id("custom_prefix_post_authors_input")
263
261
  end
@@ -276,16 +274,16 @@ describe 'radio input' do
276
274
  end
277
275
 
278
276
  it 'should index the id of the wrapper' do
279
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
277
+ expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
280
278
  end
281
279
 
282
280
  it 'should index the id of the select tag' do
283
- output_buffer.should have_tag("input#post_author_attributes_3_name_true")
284
- output_buffer.should have_tag("input#post_author_attributes_3_name_false")
281
+ expect(output_buffer).to have_tag("input#post_author_attributes_3_name_true")
282
+ expect(output_buffer).to have_tag("input#post_author_attributes_3_name_false")
285
283
  end
286
284
 
287
285
  it 'should index the name of the select tag' do
288
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
286
+ expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
289
287
  end
290
288
 
291
289
  end
@@ -301,9 +299,9 @@ describe 'radio input' do
301
299
  end
302
300
 
303
301
  it 'should output the correct labels' do
304
- output_buffer.should have_tag("li.choice label", /1/)
305
- output_buffer.should have_tag("li.choice label", /2/)
306
- output_buffer.should have_tag("li.choice label", /3/)
302
+ expect(output_buffer).to have_tag("li.choice label", :text => /1/)
303
+ expect(output_buffer).to have_tag("li.choice label", :text => /2/)
304
+ expect(output_buffer).to have_tag("li.choice label", :text => /3/)
307
305
  end
308
306
  end
309
307
 
@@ -318,9 +316,9 @@ describe 'radio input' do
318
316
  end
319
317
 
320
318
  it 'should output the correct labels' do
321
- output_buffer.should have_tag("li.choice label", /A/)
322
- output_buffer.should have_tag("li.choice label", /B/)
323
- output_buffer.should have_tag("li.choice label", /C/)
319
+ expect(output_buffer).to have_tag("li.choice label", :text => /A/)
320
+ expect(output_buffer).to have_tag("li.choice label", :text => /B/)
321
+ expect(output_buffer).to have_tag("li.choice label", :text => /C/)
324
322
  end
325
323
  end
326
324
 
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
3
 
4
- describe 'range input' do
4
+ RSpec.describe 'range input' do
5
5
 
6
6
  include FormtasticSpecHelper
7
7
 
@@ -57,15 +57,15 @@ describe 'range input' do
57
57
  end
58
58
 
59
59
  it 'should index the id of the wrapper' do
60
- output_buffer.should have_tag("li#post_author_attributes_3_name_input")
60
+ expect(output_buffer).to have_tag("li#post_author_attributes_3_name_input")
61
61
  end
62
62
 
63
63
  it 'should index the id of the select tag' do
64
- output_buffer.should have_tag("input#post_author_attributes_3_name")
64
+ expect(output_buffer).to have_tag("input#post_author_attributes_3_name")
65
65
  end
66
66
 
67
67
  it 'should index the name of the select tag' do
68
- output_buffer.should have_tag("input[@name='post[author_attributes][3][name]']")
68
+ expect(output_buffer).to have_tag("input[@name='post[author_attributes][3][name]']")
69
69
  end
70
70
 
71
71
  end
@@ -73,7 +73,7 @@ describe 'range input' do
73
73
 
74
74
  describe "when validations require a minimum value (:greater_than)" do
75
75
  before do
76
- @new_post.class.stub(:validators_on).with(:title).and_return([
76
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
77
77
  active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than=>2})
78
78
  ])
79
79
  end
@@ -82,68 +82,68 @@ describe 'range input' do
82
82
  concat(semantic_form_for(@new_post) do |builder|
83
83
  builder.input(:title, :as => :range, :input_html => { :min => 5 })
84
84
  end)
85
- output_buffer.should have_tag('input[@min="5"]')
85
+ expect(output_buffer).to have_tag('input[@min="5"]')
86
86
  end
87
87
 
88
88
  it "should allow :input_html to override :min through :in" do
89
89
  concat(semantic_form_for(@new_post) do |builder|
90
90
  builder.input(:title, :as => :range, :input_html => { :in => 5..102 })
91
91
  end)
92
- output_buffer.should have_tag('input[@min="5"]')
92
+ expect(output_buffer).to have_tag('input[@min="5"]')
93
93
  end
94
94
 
95
95
  it "should allow options to override :min" do
96
96
  concat(semantic_form_for(@new_post) do |builder|
97
97
  builder.input(:title, :as => :range, :min => 5)
98
98
  end)
99
- output_buffer.should have_tag('input[@min="5"]')
99
+ expect(output_buffer).to have_tag('input[@min="5"]')
100
100
  end
101
101
 
102
102
  it "should allow options to override :min through :in" do
103
103
  concat(semantic_form_for(@new_post) do |builder|
104
104
  builder.input(:title, :as => :range, :in => 5..102)
105
105
  end)
106
- output_buffer.should have_tag('input[@min="5"]')
106
+ expect(output_buffer).to have_tag('input[@min="5"]')
107
107
  end
108
108
 
109
109
  describe "and the column is an integer" do
110
110
  before do
111
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
111
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
112
112
  end
113
113
 
114
114
  it "should add a min attribute to the input one greater than the validation" do
115
115
  concat(semantic_form_for(@new_post) do |builder|
116
116
  builder.input(:title, :as => :range)
117
117
  end)
118
- output_buffer.should have_tag('input[@min="3"]')
118
+ expect(output_buffer).to have_tag('input[@min="3"]')
119
119
  end
120
120
  end
121
121
 
122
122
  describe "and the column is a float" do
123
123
  before do
124
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
124
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
125
125
  end
126
126
 
127
127
  it "should raise an error" do
128
- lambda {
128
+ expect {
129
129
  concat(semantic_form_for(@new_post) do |builder|
130
130
  builder.input(:title, :as => :range)
131
131
  end)
132
- }.should raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
132
+ }.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
133
133
  end
134
134
  end
135
135
 
136
136
  describe "and the column is a big decimal" do
137
137
  before do
138
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
138
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
139
139
  end
140
140
 
141
141
  it "should raise an error" do
142
- lambda {
142
+ expect {
143
143
  concat(semantic_form_for(@new_post) do |builder|
144
144
  builder.input(:title, :as => :range)
145
145
  end)
146
- }.should raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
146
+ }.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMinimumAttributeError)
147
147
  end
148
148
  end
149
149
 
@@ -151,7 +151,7 @@ describe 'range input' do
151
151
 
152
152
  describe "when validations require a minimum value (:greater_than_or_equal_to)" do
153
153
  before do
154
- @new_post.class.stub(:validators_on).with(:title).and_return([
154
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
155
155
  active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than_or_equal_to=>2})
156
156
  ])
157
157
  end
@@ -160,56 +160,56 @@ describe 'range input' do
160
160
  concat(semantic_form_for(@new_post) do |builder|
161
161
  builder.input(:title, :as => :range, :input_html => { :min => 5 })
162
162
  end)
163
- output_buffer.should have_tag('input[@min="5"]')
163
+ expect(output_buffer).to have_tag('input[@min="5"]')
164
164
  end
165
165
 
166
166
  it "should allow options to override :min" do
167
167
  concat(semantic_form_for(@new_post) do |builder|
168
168
  builder.input(:title, :as => :range, :min => 5)
169
169
  end)
170
- output_buffer.should have_tag('input[@min="5"]')
170
+ expect(output_buffer).to have_tag('input[@min="5"]')
171
171
  end
172
172
 
173
173
  it "should allow :input_html to override :min with :in" do
174
174
  concat(semantic_form_for(@new_post) do |builder|
175
175
  builder.input(:title, :as => :range, :input_html => { :in => 5..102 })
176
176
  end)
177
- output_buffer.should have_tag('input[@min="5"]')
177
+ expect(output_buffer).to have_tag('input[@min="5"]')
178
178
  end
179
179
 
180
180
  it "should allow options to override :min with :in" do
181
181
  concat(semantic_form_for(@new_post) do |builder|
182
182
  builder.input(:title, :as => :range, :in => 5..102)
183
183
  end)
184
- output_buffer.should have_tag('input[@min="5"]')
184
+ expect(output_buffer).to have_tag('input[@min="5"]')
185
185
  end
186
186
 
187
187
 
188
188
  [:integer, :decimal, :float].each do |column_type|
189
189
  describe "and the column is a #{column_type}" do
190
190
  before do
191
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
191
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
192
192
  end
193
193
 
194
194
  it "should add a max attribute to the input equal to the validation" do
195
195
  concat(semantic_form_for(@new_post) do |builder|
196
196
  builder.input(:title, :as => :range)
197
197
  end)
198
- output_buffer.should have_tag('input[@min="2"]')
198
+ expect(output_buffer).to have_tag('input[@min="2"]')
199
199
  end
200
200
  end
201
201
  end
202
202
 
203
203
  describe "and there is no column" do
204
204
  before do
205
- @new_post.stub(:column_for_attribute).with(:title).and_return(nil)
205
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(nil)
206
206
  end
207
207
 
208
208
  it "should add a max attribute to the input equal to the validation" do
209
209
  concat(semantic_form_for(@new_post) do |builder|
210
210
  builder.input(:title, :as => :range)
211
211
  end)
212
- output_buffer.should have_tag('input[@min="2"]')
212
+ expect(output_buffer).to have_tag('input[@min="2"]')
213
213
  end
214
214
  end
215
215
  end
@@ -220,14 +220,14 @@ describe 'range input' do
220
220
  concat(semantic_form_for(@new_post) do |builder|
221
221
  builder.input(:title, :as => :range)
222
222
  end)
223
- output_buffer.should have_tag('input[@min="1"]')
223
+ expect(output_buffer).to have_tag('input[@min="1"]')
224
224
  end
225
225
 
226
226
  end
227
227
 
228
228
  describe "when validations require a maximum value (:less_than)" do
229
229
  before do
230
- @new_post.class.stub(:validators_on).with(:title).and_return([
230
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
231
231
  active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than=>20})
232
232
  ])
233
233
  end
@@ -236,68 +236,68 @@ describe 'range input' do
236
236
  concat(semantic_form_for(@new_post) do |builder|
237
237
  builder.input(:title, :as => :range, :input_html => { :max => 102 })
238
238
  end)
239
- output_buffer.should have_tag('input[@max="102"]')
239
+ expect(output_buffer).to have_tag('input[@max="102"]')
240
240
  end
241
241
 
242
242
  it "should allow option to override :max" do
243
243
  concat(semantic_form_for(@new_post) do |builder|
244
244
  builder.input(:title, :as => :range, :max => 102)
245
245
  end)
246
- output_buffer.should have_tag('input[@max="102"]')
246
+ expect(output_buffer).to have_tag('input[@max="102"]')
247
247
  end
248
248
 
249
249
  it "should allow :input_html to override :max with :in" do
250
250
  concat(semantic_form_for(@new_post) do |builder|
251
251
  builder.input(:title, :as => :range, :input_html => { :in => 1..102 })
252
252
  end)
253
- output_buffer.should have_tag('input[@max="102"]')
253
+ expect(output_buffer).to have_tag('input[@max="102"]')
254
254
  end
255
255
 
256
256
  it "should allow option to override :max with :in" do
257
257
  concat(semantic_form_for(@new_post) do |builder|
258
258
  builder.input(:title, :as => :range, :in => 1..102)
259
259
  end)
260
- output_buffer.should have_tag('input[@max="102"]')
260
+ expect(output_buffer).to have_tag('input[@max="102"]')
261
261
  end
262
262
 
263
263
  describe "and the column is an integer" do
264
264
  before do
265
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
265
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :integer))
266
266
  end
267
267
 
268
268
  it "should add a max attribute to the input one greater than the validation" do
269
269
  concat(semantic_form_for(@new_post) do |builder|
270
270
  builder.input(:title, :as => :range)
271
271
  end)
272
- output_buffer.should have_tag('input[@max="19"]')
272
+ expect(output_buffer).to have_tag('input[@max="19"]')
273
273
  end
274
274
  end
275
275
 
276
276
  describe "and the column is a float" do
277
277
  before do
278
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
278
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :float))
279
279
  end
280
280
 
281
281
  it "should raise an error" do
282
- lambda {
282
+ expect {
283
283
  concat(semantic_form_for(@new_post) do |builder|
284
284
  builder.input(:title, :as => :range)
285
285
  end)
286
- }.should raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
286
+ }.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
287
287
  end
288
288
  end
289
289
 
290
290
  describe "and the column is a big decimal" do
291
291
  before do
292
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
292
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => :decimal))
293
293
  end
294
294
 
295
295
  it "should raise an error" do
296
- lambda {
296
+ expect {
297
297
  concat(semantic_form_for(@new_post) do |builder|
298
298
  builder.input(:title, :as => :range)
299
299
  end)
300
- }.should raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
300
+ }.to raise_error(Formtastic::Inputs::Base::Validations::IndeterminableMaximumAttributeError)
301
301
  end
302
302
  end
303
303
 
@@ -305,7 +305,7 @@ describe 'range input' do
305
305
 
306
306
  describe "when validations require a maximum value (:less_than_or_equal_to)" do
307
307
  before do
308
- @new_post.class.stub(:validators_on).with(:title).and_return([
308
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
309
309
  active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than_or_equal_to=>20})
310
310
  ])
311
311
  end
@@ -314,55 +314,55 @@ describe 'range input' do
314
314
  concat(semantic_form_for(@new_post) do |builder|
315
315
  builder.input(:title, :as => :range, :input_html => { :max => 102 })
316
316
  end)
317
- output_buffer.should have_tag('input[@max="102"]')
317
+ expect(output_buffer).to have_tag('input[@max="102"]')
318
318
  end
319
319
 
320
320
  it "should allow options to override :max" do
321
321
  concat(semantic_form_for(@new_post) do |builder|
322
322
  builder.input(:title, :as => :range, :max => 102)
323
323
  end)
324
- output_buffer.should have_tag('input[@max="102"]')
324
+ expect(output_buffer).to have_tag('input[@max="102"]')
325
325
  end
326
326
 
327
327
  it "should allow :input_html to override :max with :in" do
328
328
  concat(semantic_form_for(@new_post) do |builder|
329
329
  builder.input(:title, :as => :range, :input_html => { :in => 1..102 })
330
330
  end)
331
- output_buffer.should have_tag('input[@max="102"]')
331
+ expect(output_buffer).to have_tag('input[@max="102"]')
332
332
  end
333
333
 
334
334
  it "should allow options to override :max with :in" do
335
335
  concat(semantic_form_for(@new_post) do |builder|
336
336
  builder.input(:title, :as => :range, :in => 1..102)
337
337
  end)
338
- output_buffer.should have_tag('input[@max="102"]')
338
+ expect(output_buffer).to have_tag('input[@max="102"]')
339
339
  end
340
340
 
341
341
  [:integer, :decimal, :float].each do |column_type|
342
342
  describe "and the column is a #{column_type}" do
343
343
  before do
344
- @new_post.stub(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
344
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(double('column', :type => column_type))
345
345
  end
346
346
 
347
347
  it "should add a max attribute to the input equal to the validation" do
348
348
  concat(semantic_form_for(@new_post) do |builder|
349
349
  builder.input(:title, :as => :range)
350
350
  end)
351
- output_buffer.should have_tag('input[@max="20"]')
351
+ expect(output_buffer).to have_tag('input[@max="20"]')
352
352
  end
353
353
  end
354
354
  end
355
355
 
356
356
  describe "and there is no column" do
357
357
  before do
358
- @new_post.stub(:column_for_attribute).with(:title).and_return(nil)
358
+ allow(@new_post).to receive(:column_for_attribute).with(:title).and_return(nil)
359
359
  end
360
360
 
361
361
  it "should add a max attribute to the input equal to the validation" do
362
362
  concat(semantic_form_for(@new_post) do |builder|
363
363
  builder.input(:title, :as => :range)
364
364
  end)
365
- output_buffer.should have_tag('input[@max="20"]')
365
+ expect(output_buffer).to have_tag('input[@max="20"]')
366
366
  end
367
367
  end
368
368
  end
@@ -373,14 +373,14 @@ describe 'range input' do
373
373
  concat(semantic_form_for(@new_post) do |builder|
374
374
  builder.input(:title, :as => :range)
375
375
  end)
376
- output_buffer.should have_tag('input[@max="100"]')
376
+ expect(output_buffer).to have_tag('input[@max="100"]')
377
377
  end
378
378
 
379
379
  end
380
380
 
381
381
  describe "when validations require conflicting minimum values (:greater_than, :greater_than_or_equal_to)" do
382
382
  before do
383
- @new_post.class.stub(:validators_on).with(:title).and_return([
383
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
384
384
  active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :greater_than => 20, :greater_than_or_equal_to=>2})
385
385
  ])
386
386
  end
@@ -389,13 +389,13 @@ describe 'range input' do
389
389
  concat(semantic_form_for(@new_post) do |builder|
390
390
  builder.input(:title, :as => :range)
391
391
  end)
392
- output_buffer.should have_tag('input[@min="2"]')
392
+ expect(output_buffer).to have_tag('input[@min="2"]')
393
393
  end
394
394
  end
395
395
 
396
396
  describe "when validations require conflicting maximum values (:less_than, :less_than_or_equal_to)" do
397
397
  before do
398
- @new_post.class.stub(:validators_on).with(:title).and_return([
398
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
399
399
  active_model_numericality_validator([:title], {:only_integer=>false, :allow_nil=>false, :less_than => 20, :less_than_or_equal_to=>2})
400
400
  ])
401
401
  end
@@ -404,14 +404,14 @@ describe 'range input' do
404
404
  concat(semantic_form_for(@new_post) do |builder|
405
405
  builder.input(:title, :as => :range)
406
406
  end)
407
- output_buffer.should have_tag('input[@max="2"]')
407
+ expect(output_buffer).to have_tag('input[@max="2"]')
408
408
  end
409
409
  end
410
410
 
411
411
  describe "when validations require only an integer (:only_integer)" do
412
412
 
413
413
  before do
414
- @new_post.class.stub(:validators_on).with(:title).and_return([
414
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
415
415
  active_model_numericality_validator([:title], {:allow_nil=>false, :only_integer=>true})
416
416
  ])
417
417
  end
@@ -420,21 +420,21 @@ describe 'range input' do
420
420
  concat(semantic_form_for(@new_post) do |builder|
421
421
  builder.input(:title, :as => :range)
422
422
  end)
423
- output_buffer.should have_tag('input[@step="1"]')
423
+ expect(output_buffer).to have_tag('input[@step="1"]')
424
424
  end
425
425
 
426
426
  it "should let input_html override :step" do
427
427
  concat(semantic_form_for(@new_post) do |builder|
428
428
  builder.input(:title, :as => :range, :input_html => { :step => 3 })
429
429
  end)
430
- output_buffer.should have_tag('input[@step="3"]')
430
+ expect(output_buffer).to have_tag('input[@step="3"]')
431
431
  end
432
432
 
433
433
  it "should let options override :step" do
434
434
  concat(semantic_form_for(@new_post) do |builder|
435
435
  builder.input(:title, :as => :range, :step => 3)
436
436
  end)
437
- output_buffer.should have_tag('input[@step="3"]')
437
+ expect(output_buffer).to have_tag('input[@step="3"]')
438
438
  end
439
439
 
440
440
  end
@@ -442,7 +442,7 @@ describe 'range input' do
442
442
  describe "when validations require a :step (non standard)" do
443
443
 
444
444
  before do
445
- @new_post.class.stub(:validators_on).with(:title).and_return([
445
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
446
446
  active_model_numericality_validator([:title], {:allow_nil=>false, :only_integer=>true, :step=>2})
447
447
  ])
448
448
  end
@@ -451,21 +451,21 @@ describe 'range input' do
451
451
  concat(semantic_form_for(@new_post) do |builder|
452
452
  builder.input(:title, :as => :range)
453
453
  end)
454
- output_buffer.should have_tag('input[@step="2"]')
454
+ expect(output_buffer).to have_tag('input[@step="2"]')
455
455
  end
456
456
 
457
457
  it "should let input_html override :step" do
458
458
  concat(semantic_form_for(@new_post) do |builder|
459
459
  builder.input(:title, :as => :range, :input_html => { :step => 3 })
460
460
  end)
461
- output_buffer.should have_tag('input[@step="3"]')
461
+ expect(output_buffer).to have_tag('input[@step="3"]')
462
462
  end
463
463
 
464
464
  it "should let options override :step" do
465
465
  concat(semantic_form_for(@new_post) do |builder|
466
466
  builder.input(:title, :as => :range, :step => 3)
467
467
  end)
468
- output_buffer.should have_tag('input[@step="3"]')
468
+ expect(output_buffer).to have_tag('input[@step="3"]')
469
469
  end
470
470
 
471
471
  end
@@ -473,7 +473,7 @@ describe 'range input' do
473
473
  describe "when validations do not specify :step (non standard) or :only_integer" do
474
474
 
475
475
  before do
476
- @new_post.class.stub(:validators_on).with(:title).and_return([
476
+ allow(@new_post.class).to receive(:validators_on).with(:title).and_return([
477
477
  active_model_numericality_validator([:title], {:allow_nil=>false})
478
478
  ])
479
479
  end
@@ -482,21 +482,21 @@ describe 'range input' do
482
482
  concat(semantic_form_for(@new_post) do |builder|
483
483
  builder.input(:title, :as => :range)
484
484
  end)
485
- output_buffer.should have_tag('input[@step="1"]')
485
+ expect(output_buffer).to have_tag('input[@step="1"]')
486
486
  end
487
487
 
488
488
  it "should let input_html set :step" do
489
489
  concat(semantic_form_for(@new_post) do |builder|
490
490
  builder.input(:title, :as => :range, :input_html => { :step => 3 })
491
491
  end)
492
- output_buffer.should have_tag('input[@step="3"]')
492
+ expect(output_buffer).to have_tag('input[@step="3"]')
493
493
  end
494
494
 
495
495
  it "should let options set :step" do
496
496
  concat(semantic_form_for(@new_post) do |builder|
497
497
  builder.input(:title, :as => :range, :step => 3)
498
498
  end)
499
- output_buffer.should have_tag('input[@step="3"]')
499
+ expect(output_buffer).to have_tag('input[@step="3"]')
500
500
  end
501
501
 
502
502
  end