formulary 0.0.2 → 0.0.3

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 (44) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +65 -34
  3. data/formulary.gemspec +0 -1
  4. data/lib/formulary.rb +1 -5
  5. data/lib/formulary/html_form.rb +31 -13
  6. data/lib/formulary/html_form/fields.rb +16 -0
  7. data/lib/formulary/html_form/fields/checkbox_group.rb +1 -1
  8. data/lib/formulary/html_form/fields/color_input.rb +24 -0
  9. data/lib/formulary/html_form/fields/date_input.rb +59 -0
  10. data/lib/formulary/html_form/fields/email_input.rb +11 -2
  11. data/lib/formulary/html_form/fields/field.rb +15 -3
  12. data/lib/formulary/html_form/fields/field_group.rb +3 -3
  13. data/lib/formulary/html_form/fields/input.rb +1 -1
  14. data/lib/formulary/html_form/fields/month_input.rb +15 -0
  15. data/lib/formulary/html_form/fields/number_input.rb +63 -0
  16. data/lib/formulary/html_form/fields/password_input.rb +7 -0
  17. data/lib/formulary/html_form/fields/range_input.rb +7 -0
  18. data/lib/formulary/html_form/fields/search_input.rb +7 -0
  19. data/lib/formulary/html_form/fields/select.rb +1 -1
  20. data/lib/formulary/html_form/fields/week_input.rb +15 -0
  21. data/lib/formulary/html_form/labels.rb +39 -0
  22. data/lib/formulary/version.rb +1 -1
  23. data/spec/html_form/fields/checkbox_group_spec.rb +23 -10
  24. data/spec/html_form/fields/color_input_spec.rb +58 -0
  25. data/spec/html_form/fields/date_input_spec.rb +60 -0
  26. data/spec/html_form/fields/email_input_spec.rb +16 -6
  27. data/spec/html_form/fields/field_spec.rb +40 -1
  28. data/spec/html_form/fields/hidden_input_spec.rb +3 -1
  29. data/spec/html_form/fields/month_input_spec.rb +60 -0
  30. data/spec/html_form/fields/number_input_spec.rb +67 -0
  31. data/spec/html_form/fields/password_input_spec.rb +29 -0
  32. data/spec/html_form/fields/radio_button_group_spec.rb +27 -8
  33. data/spec/html_form/fields/range_input_spec.rb +20 -0
  34. data/spec/html_form/fields/search_input_spec.rb +18 -0
  35. data/spec/html_form/fields/select_spec.rb +10 -7
  36. data/spec/html_form/fields/tel_input_spec.rb +3 -3
  37. data/spec/html_form/fields/text_input_spec.rb +3 -3
  38. data/spec/html_form/fields/textarea_spec.rb +2 -2
  39. data/spec/html_form/fields/week_input_spec.rb +60 -0
  40. data/spec/html_form_spec.rb +234 -100
  41. data/spec/support/element_helper.rb +1 -1
  42. data/spec/support/shared_examples_for_pattern.rb +4 -2
  43. data/spec/support/shared_examples_for_required.rb +4 -2
  44. metadata +114 -106
@@ -1,130 +1,264 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Formulary::HtmlForm do
4
- let(:markup) do
5
- <<-EOS
6
- <div class="lead widget">
4
+ context "with a form with complex validations" do
5
+ let(:markup) do
6
+ <<-EOS
7
+ <div class="lead widget">
7
8
 
8
- <p class="heading">Apply</p>
9
+ <p class="heading">Apply</p>
9
10
 
10
- <form id="lead_form" action="{{ widget.lead_form.submission_url.value }}" method="POST">
11
+ <form id="lead_form" action="{{ widget.lead_form.submission_url.value }}" method="POST">
11
12
 
12
- <div class="field">
13
- <label for="first_name">First Name</label>
14
- <input type="text" name="first_name" required />
15
- </div>
16
-
17
- <div class="field">
18
- <label for="last_name">Last Name</label>
19
- <input type="text" name="last_name" required />
20
- </div>
21
-
22
- <div class="field">
23
- <label for="email">Email</label>
24
- <input type="email" name="email" required />
25
- </div>
26
-
27
- <div class="field">
28
- <label for="g5_email">G5 Email</label>
29
- <input type="email" name="g5_email" pattern="@getg5\.com$" />
30
- </div>
31
-
32
- <div class="field">
33
- <label for="phone">Phone</label>
34
- <input type="tel" name="phone" />
35
- </div>
36
-
37
- <div class="field">
38
- <label for="message">Message</label>
39
- <textarea name="message"></textarea>
40
- </div>
41
-
42
- <div class="field">
43
- <label for="unit">Unit</label>
44
- <select name="unit">
45
- <option>5x5</option>
46
- <option value="5x10">Five By Ten</option>
47
- </select>
48
- </div>
49
-
50
- <input type="radio" name="foods" value="bacon">Bacon<br>
51
- <input type="radio" name="foods" value="butter" checked>Butter<br>
52
-
53
- <input type="radio" name="beverages" value="water">Water<br>
54
-
55
- <input type="hidden" name="syndication_url" value="example.com" />
56
-
57
- <input type="checkbox" name="terms">
58
-
59
- <input type="submit" value="Apply" />
60
- </form>
61
- </div>
62
- EOS
63
- end
13
+ <div class="field">
14
+ <label for="first_name">First Name</label>
15
+ <input type="text" id="first_name" name="first_name" required />
16
+ </div>
17
+
18
+ <div class="field">
19
+ <input type="text" name="last_name" required />
20
+ </div>
21
+
22
+ <div class="field">
23
+ <label for="email">Email</label>
24
+ <input type="email" id="email" name="email" required />
25
+ </div>
26
+
27
+ <div class="field">
28
+ <label for="company_email">G5 Email</label>
29
+ <input type="email" id="company_email" name="g5_email" pattern="@getg5\.com$" />
30
+ </div>
31
+
32
+ <div class="field">
33
+ <label for="phone">Phone</label>
34
+ <input type="tel" name="phone" />
35
+ </div>
36
+
37
+ <div class="field">
38
+ <label for="message">Message</label>
39
+ <textarea name="message"></textarea>
40
+ </div>
41
+
42
+ <div class="field">
43
+ <label for="unit">Unit</label>
44
+ <select name="unit">
45
+ <option>5x5</option>
46
+ <option value="5x10">Five By Ten</option>
47
+ </select>
48
+ </div>
49
+
50
+ <fieldset>
51
+ <legend>What is your favorite grease?</legend>
52
+ <label><input type="radio" name="foods" value="bacon">Bacon</label>
53
+ <label><input type="radio" name="foods" value="butter" checked>Butter</label>
54
+ </fieldset>
55
+
56
+ <input type="radio" name="beverages" value="water">Water<br>
57
+
58
+ <label for="date">Date</label>
59
+ <input type="date" id="date" name="date" />
60
+
61
+ <input type="hidden" name="syndication_url" value="example.com" />
62
+
63
+ <label>
64
+ <input type="checkbox" name="terms">I accept your terms
65
+ </label>
66
+
67
+ <div class="field">
68
+ <label for="labeless_field"></label>
69
+ <input type="email" id="labeless_field" name="labeless_field" />
70
+ </div>
71
+
72
+ <div class="field">
73
+ <label for="number">Number</label>
74
+ <input type="number" name="number" id="number" min="5" />
75
+ </div>
64
76
 
65
- let(:html_form) { Formulary::HtmlForm.new(markup) }
77
+ <div class="field">
78
+ <label for="range">Range</label>
79
+ <input type="range" name="range" id="range" step="5" />
80
+ </div>
66
81
 
67
- context "unsupported field type" do
68
- let(:markup) { %{<input type="bacon" name="delicious" />} }
82
+ <div class="field">
83
+ <label for="search">Search</label>
84
+ <input type="search" name="search" id="search" />
85
+ </div>
69
86
 
70
- it "explodes" do
71
- expect { html_form }.to raise_error(Formulary::UnsupportedFieldType, /bacon/)
87
+ <div class="field">
88
+ <label for="password">Password</label>
89
+ <input type="password" name="password" id="password" />
90
+ </div>
91
+
92
+ <div class="field">
93
+ <label for="color">Color</label>
94
+ <input type="color" name="color" id="color" />
95
+ </div>
96
+
97
+ <input type="submit" value="Submit" />
98
+ <input type="button" value="Button" />
99
+ <input type="image" value="Image" />
100
+ <input type="reset" value="Reset" />
101
+ </form>
102
+ </div>
103
+ EOS
72
104
  end
73
- end
74
105
 
75
- describe "validations" do
76
- let(:valid_params) do
77
- {
78
- first_name: "First",
79
- last_name: "Last",
80
- email: "test@test.com",
81
- g5_email: "test@getg5.com",
82
- unit: "5x5"
83
- }
106
+ let(:html_form) { Formulary::HtmlForm.new(markup) }
107
+
108
+ context "unsupported field type" do
109
+ let(:markup) { %{<input type="bacon" name="delicious" />} }
110
+
111
+ it "explodes" do
112
+ expect { html_form }.to raise_error(Formulary::UnsupportedFieldType, /bacon/)
113
+ end
84
114
  end
85
115
 
86
- describe "#valid?" do
87
- subject(:valid) { html_form.valid?(params) }
116
+ context "with a mismatch of field types for a group" do
117
+ let(:markup) do
118
+ %{
119
+ <input type="radio" name="bacon" />
120
+ <input type="checkbox" name="bacon" />
121
+ }
122
+ end
88
123
 
89
- context "with a valid submission" do
90
- let(:params) { valid_params }
91
- it { should be_true }
124
+ it "explodes" do
125
+ expect { html_form }.to raise_error(Formulary::UnsupportedFieldType, /bacon/)
92
126
  end
127
+ end
93
128
 
94
- context "with an invalid submission" do
95
- let(:params) { {} }
96
- it { should be_false }
129
+ describe "validations" do
130
+ let(:valid_params) do
131
+ {
132
+ first_name: "First",
133
+ last_name: "Last",
134
+ email: "test@test.com",
135
+ g5_email: "test@getg5.com",
136
+ unit: "5x5"
137
+ }
97
138
  end
98
139
 
99
- context "due to unexpected parameters" do
100
- let(:params) { valid_params.merge(extra: "test") }
140
+ describe "#valid?" do
141
+ subject(:valid) { html_form.valid?(params) }
101
142
 
102
- it "raises a Formulary::UnexpectedParameter exception" do
103
- expect { valid }.to raise_error(Formulary::UnexpectedParameter, /extra/)
143
+ context "with a valid submission" do
144
+ let(:params) { valid_params }
145
+ it { should be_true }
146
+ end
147
+
148
+ context "with an invalid submission" do
149
+ let(:params) { {} }
150
+ it { should be_false }
151
+ end
152
+
153
+ context "due to unexpected parameters" do
154
+ let(:params) { valid_params.merge(extra: "test") }
155
+
156
+ it "raises a Formulary::UnexpectedParameter exception" do
157
+ expect { valid }.to raise_error(Formulary::UnexpectedParameter, /extra/)
158
+ end
159
+ end
160
+ end
161
+
162
+ describe "#errors" do
163
+ before { html_form.valid?(params) }
164
+ subject { html_form.errors }
165
+
166
+ context "with a valid submission" do
167
+ let(:params) { valid_params }
168
+ it { should be_empty }
169
+ end
170
+
171
+ context "with an invalid submission" do
172
+ let(:params) do
173
+ {
174
+ email: "invalid",
175
+ g5_email: "test@example.com",
176
+ foods: "water",
177
+ date: "4 score and 7 years ago",
178
+ number: "1",
179
+ range: "8"
180
+ }
181
+ end
182
+
183
+ its(["first_name"]) { should eql("'First Name' is required") }
184
+ its(["email"]) { should include("'Email' is not a valid email address") }
185
+ its(["g5_email"]) { should include("'G5 Email' does not match the expected format") }
186
+ its(["foods"]) { should include("'What is your favorite grease?' must be chosen from the available options") }
187
+ its(["date"]) { should include("'Date' is not a properly formatted date") }
188
+ its(["number"]) { should include("'Number' must be greater than or equal to 5") }
189
+ its(["range"]) { should include("'Range' must be a step of 5, the nearest valid values are 5 and 10") }
104
190
  end
105
191
  end
106
192
  end
107
193
 
108
- describe "#errors" do
109
- before { html_form.valid?(params) }
110
- subject { html_form.errors }
194
+ describe "#label_for_field" do
195
+ subject { html_form.label_for_field(field_name) }
111
196
 
112
- context "with a valid submission" do
113
- let(:params) { valid_params }
114
- it { should be_empty }
197
+ context "with a label with a for attribute" do
198
+ let(:field_name) { "first_name" }
199
+ it { should eq("First Name") }
115
200
  end
116
201
 
117
- context "with an invalid submission" do
118
- let(:params) do
119
- {
120
- email: "invalid", g5_email: "test@example.com", foods: "water"
121
- }
122
- end
202
+ context "with no matching label" do
203
+ let(:field_name) { "last_name" }
204
+ it { should be_nil }
205
+ end
206
+
207
+ context "with a label with no text" do
208
+ let(:field_name) { "labeless_field" }
209
+ it { should eq("") }
210
+ end
211
+
212
+ context "with a parent label" do
213
+ let(:field_name) { "terms" }
214
+ it { should eq("I accept your terms") }
215
+ end
216
+
217
+ context "with a name and id mismatch on the field" do
218
+ let(:field_name) { "g5_email" }
219
+ it { should eq("G5 Email") }
220
+ end
221
+
222
+ context "with a fieldset" do
223
+ let(:field_name) { "foods" }
224
+ its(["fieldset"]) { should eq("What is your favorite grease?") }
225
+ its(["bacon"]) { should eq("Bacon") }
226
+ its(["butter"]) { should eq("Butter") }
227
+ end
228
+ end
229
+ end
230
+
231
+ context "with a form with nested fields" do
232
+ let(:markup) do
233
+ <<-EOS
234
+ <form id="lead_form" action="{{ widget.lead_form.submission_url.value }}" method="POST">
235
+
236
+ <label for="first_name">First Name</label>
237
+ <input type="text" name="first_name" required />
238
+
239
+ <label for="parent[child]">Nested Field</label>
240
+ <input type="text" name="parent[child]" required />
241
+
242
+ <input type="submit" value="Apply" />
243
+ </form>
244
+ EOS
245
+ end
246
+
247
+ subject(:valid) { Formulary::HtmlForm.new(markup).valid?(params) }
248
+
249
+ context "with valid nested parameters" do
250
+ let(:params) do
251
+ { "first_name" => "Test", "parent" => { "child" => "nested value" } }
252
+ end
253
+
254
+ it { should be_true }
255
+ end
256
+
257
+ context "with invalid nested parameters" do
258
+ let(:params) { { "parent" => { "invalid" => "bad" } } }
123
259
 
124
- its(["first_name"]) { should include("required") }
125
- its(["email"]) { should include("email") }
126
- its(["g5_email"]) { should include("format") }
127
- its(["foods"]) { should include("choose") }
260
+ it " explodes violently" do
261
+ expect { valid }.to raise_error(Formulary::UnexpectedParameter, /invalid/)
128
262
  end
129
263
  end
130
264
  end
@@ -6,7 +6,7 @@ module ElementHelper
6
6
  def elements
7
7
  @elements ||= \
8
8
  Nokogiri::HTML("<html><body>#{markup}</body></html>").
9
- css("body > *")
9
+ css("body input, body textarea, body select")
10
10
  end
11
11
  end
12
12
 
@@ -1,5 +1,7 @@
1
1
  shared_examples_for "a field that allows the pattern attribute" do
2
- subject(:input) { described_class.new(element) }
2
+ let(:markup_with_label) { "<label for='field'>Field</label>#{markup}" }
3
+ let(:html_form) { Formulary::HtmlForm.new(markup_with_label) }
4
+ subject(:input) { described_class.new(html_form, element) }
3
5
 
4
6
  context "with a matching value" do
5
7
  before { input.set_value(valid_value) }
@@ -10,6 +12,6 @@ shared_examples_for "a field that allows the pattern attribute" do
10
12
  context "without a matching value" do
11
13
  before { input.set_value("z") }
12
14
  it { should_not be_valid }
13
- its(:error) { should include("format") }
15
+ its(:error) { should include("'Field' does not match the expected format") }
14
16
  end
15
17
  end
@@ -1,5 +1,7 @@
1
1
  shared_examples_for "a field that allows the required attribute" do
2
- subject(:input) { described_class.new(element) }
2
+ let(:markup_with_label) { "<label for='field'>Field</label>#{markup}" }
3
+ let(:html_form) { Formulary::HtmlForm.new(markup_with_label) }
4
+ subject(:input) { described_class.new(html_form, element) }
3
5
 
4
6
  context "required" do
5
7
  let(:markup) { markup_with_required }
@@ -19,7 +21,7 @@ shared_examples_for "a field that allows the required attribute" do
19
21
  context "submitted a nil value" do
20
22
  before { input.set_value(nil) }
21
23
  it { should_not be_valid }
22
- its(:error) { should include("required") }
24
+ its(:error) { should eql("'Field' is required") }
23
25
  end
24
26
  end
25
27
 
metadata CHANGED
@@ -1,121 +1,110 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: formulary
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 0
8
- - 2
9
- version: 0.0.2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
10
5
  platform: ruby
11
- authors:
6
+ authors:
12
7
  - Matt Bohme
13
8
  - Don Petersen
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2014-01-10 00:00:00 -08:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2014-03-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: nokogiri
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- requirements:
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
26
18
  - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- version: "0"
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
31
21
  type: :runtime
32
- version_requirements: *id001
33
- - !ruby/object:Gem::Dependency
34
- name: activesupport
35
22
  prerelease: false
36
- requirement: &id002 !ruby/object:Gem::Requirement
37
- requirements:
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: activesupport
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
38
32
  - - ">="
39
- - !ruby/object:Gem::Version
40
- segments:
41
- - 0
42
- version: "0"
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
43
35
  type: :runtime
44
- version_requirements: *id002
45
- - !ruby/object:Gem::Dependency
46
- name: email_veracity
47
36
  prerelease: false
48
- requirement: &id003 !ruby/object:Gem::Requirement
49
- requirements:
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
50
39
  - - ">="
51
- - !ruby/object:Gem::Version
52
- segments:
53
- - 0
54
- version: "0"
55
- type: :runtime
56
- version_requirements: *id003
57
- - !ruby/object:Gem::Dependency
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
58
43
  name: bundler
59
- prerelease: false
60
- requirement: &id004 !ruby/object:Gem::Requirement
61
- requirements:
62
- - - ~>
63
- - !ruby/object:Gem::Version
64
- segments:
65
- - 1
66
- - 3
67
- version: "1.3"
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - "~>"
47
+ - !ruby/object:Gem::Version
48
+ version: '1.3'
68
49
  type: :development
69
- version_requirements: *id004
70
- - !ruby/object:Gem::Dependency
71
- name: rake
72
50
  prerelease: false
73
- requirement: &id005 !ruby/object:Gem::Requirement
74
- requirements:
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "~>"
54
+ - !ruby/object:Gem::Version
55
+ version: '1.3'
56
+ - !ruby/object:Gem::Dependency
57
+ name: rake
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
75
60
  - - ">="
76
- - !ruby/object:Gem::Version
77
- segments:
78
- - 0
79
- version: "0"
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
80
63
  type: :development
81
- version_requirements: *id005
82
- - !ruby/object:Gem::Dependency
83
- name: rspec
84
64
  prerelease: false
85
- requirement: &id006 !ruby/object:Gem::Requirement
86
- requirements:
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: rspec
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
87
74
  - - ">="
88
- - !ruby/object:Gem::Version
89
- segments:
90
- - 0
91
- version: "0"
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
92
77
  type: :development
93
- version_requirements: *id006
94
- - !ruby/object:Gem::Dependency
95
- name: pry
96
78
  prerelease: false
97
- requirement: &id007 !ruby/object:Gem::Requirement
98
- requirements:
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
99
81
  - - ">="
100
- - !ruby/object:Gem::Version
101
- segments:
102
- - 0
103
- version: "0"
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
84
+ - !ruby/object:Gem::Dependency
85
+ name: pry
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
104
91
  type: :development
105
- version_requirements: *id007
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
106
98
  description: Valid form submission based on the HTML5 validation on the form itself
107
- email:
99
+ email:
108
100
  - matt.bohme@g5searchmarketing.com
109
101
  - don.petersen@g5searchmarketing.com
110
102
  executables: []
111
-
112
103
  extensions: []
113
-
114
104
  extra_rdoc_files: []
115
-
116
- files:
117
- - .gitignore
118
- - .rspec
105
+ files:
106
+ - ".gitignore"
107
+ - ".rspec"
119
108
  - Gemfile
120
109
  - LICENSE.txt
121
110
  - README.md
@@ -125,73 +114,92 @@ files:
125
114
  - lib/formulary/html_form.rb
126
115
  - lib/formulary/html_form/fields.rb
127
116
  - lib/formulary/html_form/fields/checkbox_group.rb
117
+ - lib/formulary/html_form/fields/color_input.rb
118
+ - lib/formulary/html_form/fields/date_input.rb
128
119
  - lib/formulary/html_form/fields/email_input.rb
129
120
  - lib/formulary/html_form/fields/field.rb
130
121
  - lib/formulary/html_form/fields/field_group.rb
131
122
  - lib/formulary/html_form/fields/hidden_input.rb
132
123
  - lib/formulary/html_form/fields/input.rb
124
+ - lib/formulary/html_form/fields/month_input.rb
125
+ - lib/formulary/html_form/fields/number_input.rb
126
+ - lib/formulary/html_form/fields/password_input.rb
133
127
  - lib/formulary/html_form/fields/radio_button_group.rb
128
+ - lib/formulary/html_form/fields/range_input.rb
129
+ - lib/formulary/html_form/fields/search_input.rb
134
130
  - lib/formulary/html_form/fields/select.rb
135
131
  - lib/formulary/html_form/fields/tel_input.rb
136
132
  - lib/formulary/html_form/fields/text_input.rb
137
133
  - lib/formulary/html_form/fields/textarea.rb
134
+ - lib/formulary/html_form/fields/week_input.rb
135
+ - lib/formulary/html_form/labels.rb
138
136
  - lib/formulary/version.rb
139
137
  - spec/html_form/fields/checkbox_group_spec.rb
138
+ - spec/html_form/fields/color_input_spec.rb
139
+ - spec/html_form/fields/date_input_spec.rb
140
140
  - spec/html_form/fields/email_input_spec.rb
141
141
  - spec/html_form/fields/field_spec.rb
142
142
  - spec/html_form/fields/hidden_input_spec.rb
143
143
  - spec/html_form/fields/input_spec.rb
144
+ - spec/html_form/fields/month_input_spec.rb
145
+ - spec/html_form/fields/number_input_spec.rb
146
+ - spec/html_form/fields/password_input_spec.rb
144
147
  - spec/html_form/fields/radio_button_group_spec.rb
148
+ - spec/html_form/fields/range_input_spec.rb
149
+ - spec/html_form/fields/search_input_spec.rb
145
150
  - spec/html_form/fields/select_spec.rb
146
151
  - spec/html_form/fields/tel_input_spec.rb
147
152
  - spec/html_form/fields/text_input_spec.rb
148
153
  - spec/html_form/fields/textarea_spec.rb
154
+ - spec/html_form/fields/week_input_spec.rb
149
155
  - spec/html_form_spec.rb
150
156
  - spec/spec_helper.rb
151
157
  - spec/support/element_helper.rb
152
158
  - spec/support/shared_examples_for_pattern.rb
153
159
  - spec/support/shared_examples_for_required.rb
154
- has_rdoc: true
155
160
  homepage: http://github.com/g5/formulary
156
- licenses:
161
+ licenses:
157
162
  - MIT
163
+ metadata: {}
158
164
  post_install_message:
159
165
  rdoc_options: []
160
-
161
- require_paths:
166
+ require_paths:
162
167
  - lib
163
- required_ruby_version: !ruby/object:Gem::Requirement
164
- requirements:
168
+ required_ruby_version: !ruby/object:Gem::Requirement
169
+ requirements:
165
170
  - - ">="
166
- - !ruby/object:Gem::Version
167
- segments:
168
- - 0
169
- version: "0"
170
- required_rubygems_version: !ruby/object:Gem::Requirement
171
- requirements:
171
+ - !ruby/object:Gem::Version
172
+ version: '0'
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ requirements:
172
175
  - - ">="
173
- - !ruby/object:Gem::Version
174
- segments:
175
- - 0
176
- version: "0"
176
+ - !ruby/object:Gem::Version
177
+ version: '0'
177
178
  requirements: []
178
-
179
179
  rubyforge_project:
180
- rubygems_version: 1.3.6
180
+ rubygems_version: 2.2.0
181
181
  signing_key:
182
- specification_version: 3
182
+ specification_version: 4
183
183
  summary: Valid form submission based on the HTML5 validation on the form itself
184
- test_files:
184
+ test_files:
185
185
  - spec/html_form/fields/checkbox_group_spec.rb
186
+ - spec/html_form/fields/color_input_spec.rb
187
+ - spec/html_form/fields/date_input_spec.rb
186
188
  - spec/html_form/fields/email_input_spec.rb
187
189
  - spec/html_form/fields/field_spec.rb
188
190
  - spec/html_form/fields/hidden_input_spec.rb
189
191
  - spec/html_form/fields/input_spec.rb
192
+ - spec/html_form/fields/month_input_spec.rb
193
+ - spec/html_form/fields/number_input_spec.rb
194
+ - spec/html_form/fields/password_input_spec.rb
190
195
  - spec/html_form/fields/radio_button_group_spec.rb
196
+ - spec/html_form/fields/range_input_spec.rb
197
+ - spec/html_form/fields/search_input_spec.rb
191
198
  - spec/html_form/fields/select_spec.rb
192
199
  - spec/html_form/fields/tel_input_spec.rb
193
200
  - spec/html_form/fields/text_input_spec.rb
194
201
  - spec/html_form/fields/textarea_spec.rb
202
+ - spec/html_form/fields/week_input_spec.rb
195
203
  - spec/html_form_spec.rb
196
204
  - spec/spec_helper.rb
197
205
  - spec/support/element_helper.rb