html5_validators 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +79 -47
- data/CHANGELOG.md +78 -0
- data/Rakefile +5 -1
- data/gemfiles/Gemfile.activemodel-5.2 +6 -0
- data/html5_validators.gemspec +4 -3
- data/lib/html5_validators.rb +8 -8
- data/lib/html5_validators/action_view/form_helpers.rb +14 -3
- data/lib/html5_validators/action_view/form_helpers_rails3.rb +4 -4
- data/lib/html5_validators/active_record/base.rb +1 -1
- data/lib/html5_validators/version.rb +1 -1
- data/test/fake_app.rb +87 -31
- data/test/features/active_model_validation_test.rb +42 -24
- data/test/features/active_record_validation_test.rb +50 -30
- data/test/test_helper.rb +21 -3
- metadata +49 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 3bd884c43fd2c924babd8c686b1a7c6647e00a3e27ab3cfff352b7db9a031867
|
|
4
|
+
data.tar.gz: f533a5f59e63c4269bb79468262f03e39d62f8b98b01d0f63e94898d1060358a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 87b2b2bdc69f3e15f8e14e1ed77ad02b37eb05209ef73fa69f121bc8ef94cbc0a9a46ee07df98eb0a062dbcb3c5c2c43fcb1d89bdb2f536006546053bb256f89
|
|
7
|
+
data.tar.gz: 42c463972f9b29a66c43e14b54fd0faac850dfb15545c0d8aeb2fe83110b950c1ec6c8acd25423aaecd9638ba32c15f6f8c1064242a92cc4c0b00014d8fa83ce
|
data/.travis.yml
CHANGED
|
@@ -1,75 +1,107 @@
|
|
|
1
1
|
language: ruby
|
|
2
2
|
|
|
3
|
+
sudo: required
|
|
4
|
+
|
|
5
|
+
addons:
|
|
6
|
+
chrome: stable
|
|
7
|
+
|
|
8
|
+
before_install:
|
|
9
|
+
- sudo apt update -qq
|
|
10
|
+
- sudo apt install -y chromium-chromedriver
|
|
11
|
+
- sudo ln -s /usr/lib/chromium-browser/chromedriver /usr/bin/
|
|
12
|
+
- gem install bundler
|
|
13
|
+
|
|
3
14
|
rvm:
|
|
4
|
-
- 2.0.0
|
|
5
|
-
- 2.1.10
|
|
6
|
-
- 2.2.10
|
|
7
|
-
- 2.3.7
|
|
8
|
-
- 2.4.4
|
|
9
|
-
- 2.5.1
|
|
10
15
|
- ruby-head
|
|
16
|
+
- 2.5.3
|
|
17
|
+
- 2.4.5
|
|
18
|
+
- 2.3.7
|
|
19
|
+
- 2.2.10
|
|
20
|
+
- 2.1.10
|
|
21
|
+
- 2.0.0
|
|
11
22
|
|
|
12
23
|
gemfile:
|
|
13
|
-
- gemfiles/Gemfile.rails-3.2
|
|
14
|
-
- gemfiles/Gemfile.rails-4.0
|
|
15
|
-
- gemfiles/Gemfile.rails-4.1
|
|
16
|
-
- gemfiles/Gemfile.rails-4.2
|
|
17
|
-
- gemfiles/Gemfile.rails-5.0
|
|
18
|
-
- gemfiles/Gemfile.rails-5.1
|
|
19
|
-
- gemfiles/Gemfile.rails-5.2
|
|
20
24
|
- gemfiles/Gemfile.rails-edge
|
|
21
|
-
|
|
22
|
-
|
|
25
|
+
- gemfiles/Gemfile.rails-5.2
|
|
26
|
+
- gemfiles/Gemfile.activemodel-5.2
|
|
27
|
+
- gemfiles/Gemfile.rails-5.1
|
|
28
|
+
- gemfiles/Gemfile.rails-5.0
|
|
29
|
+
- gemfiles/Gemfile.rails-4.2
|
|
30
|
+
- gemfiles/Gemfile.rails-4.1
|
|
31
|
+
- gemfiles/Gemfile.rails-4.0
|
|
32
|
+
- gemfiles/Gemfile.rails-3.2
|
|
23
33
|
|
|
24
34
|
matrix:
|
|
25
35
|
exclude:
|
|
36
|
+
- rvm: 2.4.5
|
|
37
|
+
gemfile: gemfiles/Gemfile.rails-edge
|
|
38
|
+
- rvm: 2.3.7
|
|
39
|
+
gemfile: gemfiles/Gemfile.rails-edge
|
|
40
|
+
- rvm: 2.2.10
|
|
41
|
+
gemfile: gemfiles/Gemfile.rails-edge
|
|
42
|
+
- rvm: 2.1.10
|
|
43
|
+
gemfile: gemfiles/Gemfile.rails-edge
|
|
26
44
|
- rvm: 2.0.0
|
|
27
|
-
gemfile: gemfiles/Gemfile.rails-
|
|
45
|
+
gemfile: gemfiles/Gemfile.rails-edge
|
|
28
46
|
- rvm: 2.1.10
|
|
29
|
-
gemfile: gemfiles/Gemfile.rails-5.
|
|
47
|
+
gemfile: gemfiles/Gemfile.rails-5.2
|
|
48
|
+
- rvm: 2.0.0
|
|
49
|
+
gemfile: gemfiles/Gemfile.rails-5.2
|
|
50
|
+
- rvm: 2.1.10
|
|
51
|
+
gemfile: gemfiles/Gemfile.activemodel-5.2
|
|
30
52
|
- rvm: 2.0.0
|
|
53
|
+
gemfile: gemfiles/Gemfile.activemodel-5.2
|
|
54
|
+
- rvm: 2.4.5
|
|
55
|
+
gemfile: gemfiles/Gemfile.rails-5.1
|
|
56
|
+
- rvm: 2.3.7
|
|
31
57
|
gemfile: gemfiles/Gemfile.rails-5.1
|
|
32
58
|
- rvm: 2.1.10
|
|
33
59
|
gemfile: gemfiles/Gemfile.rails-5.1
|
|
34
60
|
- rvm: 2.0.0
|
|
35
|
-
gemfile: gemfiles/Gemfile.rails-5.
|
|
61
|
+
gemfile: gemfiles/Gemfile.rails-5.1
|
|
62
|
+
- rvm: 2.4.5
|
|
63
|
+
gemfile: gemfiles/Gemfile.rails-5.0
|
|
64
|
+
- rvm: 2.3.7
|
|
65
|
+
gemfile: gemfiles/Gemfile.rails-5.0
|
|
36
66
|
- rvm: 2.1.10
|
|
37
|
-
gemfile: gemfiles/Gemfile.rails-5.
|
|
67
|
+
gemfile: gemfiles/Gemfile.rails-5.0
|
|
38
68
|
- rvm: 2.0.0
|
|
39
|
-
gemfile: gemfiles/Gemfile.rails-
|
|
40
|
-
- rvm:
|
|
41
|
-
gemfile: gemfiles/Gemfile.rails-
|
|
69
|
+
gemfile: gemfiles/Gemfile.rails-5.0
|
|
70
|
+
- rvm: ruby-head
|
|
71
|
+
gemfile: gemfiles/Gemfile.rails-4.2
|
|
72
|
+
- rvm: 2.5.3
|
|
73
|
+
gemfile: gemfiles/Gemfile.rails-4.2
|
|
74
|
+
- rvm: 2.4.5
|
|
75
|
+
gemfile: gemfiles/Gemfile.rails-4.2
|
|
76
|
+
- rvm: ruby-head
|
|
77
|
+
gemfile: gemfiles/Gemfile.rails-4.1
|
|
78
|
+
- rvm: 2.5.3
|
|
79
|
+
gemfile: gemfiles/Gemfile.rails-4.1
|
|
80
|
+
- rvm: 2.4.5
|
|
81
|
+
gemfile: gemfiles/Gemfile.rails-4.1
|
|
42
82
|
- rvm: 2.2.10
|
|
43
|
-
gemfile: gemfiles/Gemfile.rails-
|
|
44
|
-
- rvm: 2.
|
|
45
|
-
gemfile: gemfiles/Gemfile.rails-
|
|
83
|
+
gemfile: gemfiles/Gemfile.rails-4.1
|
|
84
|
+
- rvm: 2.1.10
|
|
85
|
+
gemfile: gemfiles/Gemfile.rails-4.1
|
|
86
|
+
- rvm: ruby-head
|
|
87
|
+
gemfile: gemfiles/Gemfile.rails-4.0
|
|
88
|
+
- rvm: 2.5.3
|
|
89
|
+
gemfile: gemfiles/Gemfile.rails-4.0
|
|
90
|
+
- rvm: 2.4.5
|
|
91
|
+
gemfile: gemfiles/Gemfile.rails-4.0
|
|
46
92
|
- rvm: 2.2.10
|
|
93
|
+
gemfile: gemfiles/Gemfile.rails-4.0
|
|
94
|
+
- rvm: 2.1.10
|
|
95
|
+
gemfile: gemfiles/Gemfile.rails-4.0
|
|
96
|
+
- rvm: ruby-head
|
|
47
97
|
gemfile: gemfiles/Gemfile.rails-3.2
|
|
48
|
-
- rvm: 2.3
|
|
98
|
+
- rvm: 2.5.3
|
|
49
99
|
gemfile: gemfiles/Gemfile.rails-3.2
|
|
50
|
-
- rvm: 2.4.
|
|
100
|
+
- rvm: 2.4.5
|
|
51
101
|
gemfile: gemfiles/Gemfile.rails-3.2
|
|
52
|
-
- rvm: 2.
|
|
53
|
-
gemfile: gemfiles/Gemfile.rails-4.0
|
|
54
|
-
- rvm: 2.4.4
|
|
55
|
-
gemfile: gemfiles/Gemfile.rails-4.1
|
|
56
|
-
- rvm: 2.4.4
|
|
57
|
-
gemfile: gemfiles/Gemfile.rails-4.2
|
|
58
|
-
- rvm: 2.5.1
|
|
102
|
+
- rvm: 2.3.7
|
|
59
103
|
gemfile: gemfiles/Gemfile.rails-3.2
|
|
60
|
-
- rvm: 2.
|
|
61
|
-
gemfile: gemfiles/Gemfile.rails-4.0
|
|
62
|
-
- rvm: 2.5.1
|
|
63
|
-
gemfile: gemfiles/Gemfile.rails-4.1
|
|
64
|
-
- rvm: 2.5.1
|
|
65
|
-
gemfile: gemfiles/Gemfile.rails-4.2
|
|
66
|
-
- rvm: ruby-head
|
|
104
|
+
- rvm: 2.2.10
|
|
67
105
|
gemfile: gemfiles/Gemfile.rails-3.2
|
|
68
|
-
- rvm: ruby-head
|
|
69
|
-
gemfile: gemfiles/Gemfile.rails-4.0
|
|
70
|
-
- rvm: ruby-head
|
|
71
|
-
gemfile: gemfiles/Gemfile.rails-4.1
|
|
72
|
-
- rvm: ruby-head
|
|
73
|
-
gemfile: gemfiles/Gemfile.rails-4.2
|
|
74
106
|
allow_failures:
|
|
75
107
|
- rvm: ruby-head
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
## 1.9.0
|
|
2
|
+
|
|
3
|
+
* Added support for `form_with` [@DialBird]
|
|
4
|
+
|
|
5
|
+
* Enhanced support for non-AR applications to load all necessary monkey-patches on application initialization
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
## 1.8.0
|
|
9
|
+
|
|
10
|
+
* Added support for AR `validation_context` such as `on: :create` or `on: :update`
|
|
11
|
+
|
|
12
|
+
## 1.7.0
|
|
13
|
+
|
|
14
|
+
* Fixed a bug that `required: false` helper option does not override `required: true` value from PresenceValidator [@sandipransing]
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
## 1.5.0
|
|
18
|
+
|
|
19
|
+
* Rails 5 support
|
|
20
|
+
|
|
21
|
+
* Changed `auto_html5_validation` config behavior not to propagate to children classes
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
## 1.4.0
|
|
25
|
+
|
|
26
|
+
* Dropped Ruby 1.8 support
|
|
27
|
+
|
|
28
|
+
* Dropped Ruby 1.9 support
|
|
29
|
+
|
|
30
|
+
* Dropped Rails 3.2 support
|
|
31
|
+
|
|
32
|
+
* Fixed a bug that `maxlength` validation for inputs which can be blank was ignored [@kv109]
|
|
33
|
+
|
|
34
|
+
* Fixed a bug that `auto_html5_validation` was not properly enabled for models that are loaded after loading this gem
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## 1.3.0
|
|
38
|
+
|
|
39
|
+
* Switched from `alias_method_chain` to `Module#prepend` on Ruby 2 and Rails 4
|
|
40
|
+
|
|
41
|
+
* Added `minlength` support
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
## 1.2.2
|
|
45
|
+
|
|
46
|
+
* Fixed undefined method `auto_html5_validation` error for non-AR Active Model models
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
## 1.2.1
|
|
50
|
+
|
|
51
|
+
* Fixed a bug that `minlength / maxlength` values were assigned to `min / max`
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
## 1.2.0
|
|
55
|
+
|
|
56
|
+
* Added global `Html5Validators.enabled` flag [@sinsoku]
|
|
57
|
+
|
|
58
|
+
* Fixed a bug that some Symbol keyed helper options were ignored [@lucas-nelson]
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
## 1.1.3
|
|
62
|
+
|
|
63
|
+
* Fixed a bug that AR::Base.inherited conflicts with other gems [@tricknotes]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
## 1.1.2
|
|
67
|
+
|
|
68
|
+
* Fixed a bug that `cattr_accessor` + `:instance_accessor => false` still creates an `instance_accessor` on AR 3.0 and 3.1
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
## 1.1.1
|
|
72
|
+
|
|
73
|
+
* Rails 4 support
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
## 1.1.0
|
|
77
|
+
|
|
78
|
+
* Added `maxlength` validator support for `text_area` [@ursm]
|
data/Rakefile
CHANGED
|
@@ -4,7 +4,11 @@ require 'rake/testtask'
|
|
|
4
4
|
|
|
5
5
|
Rake::TestTask.new do |t|
|
|
6
6
|
t.libs << 'test'
|
|
7
|
-
|
|
7
|
+
if defined? ::ActiveRecord
|
|
8
|
+
t.test_files = Dir['test/**/*_test.rb']
|
|
9
|
+
else
|
|
10
|
+
t.test_files = Dir['test/**/*_test.rb'] - Dir['test/**/*active_record*'] - Dir['test/**/*active_record*/*.rb']
|
|
11
|
+
end
|
|
8
12
|
t.warning = true
|
|
9
13
|
t.verbose = true
|
|
10
14
|
end
|
data/html5_validators.gemspec
CHANGED
|
@@ -14,13 +14,14 @@ Gem::Specification.new do |s|
|
|
|
14
14
|
s.description = 'A gem/plugin for Rails 3+ that enables client-side validation using ActiveModel + HTML5'
|
|
15
15
|
s.license = 'MIT'
|
|
16
16
|
|
|
17
|
-
s.rubyforge_project = 'html5_validators'
|
|
18
|
-
|
|
19
17
|
s.files = `git ls-files`.split("\n")
|
|
20
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
21
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
22
20
|
s.require_paths = ['lib']
|
|
23
|
-
s.add_development_dependency 'test-unit-
|
|
21
|
+
s.add_development_dependency 'test-unit-activesupport'
|
|
22
|
+
s.add_development_dependency 'test-unit-capybara'
|
|
23
|
+
s.add_development_dependency 'selenium-webdriver'
|
|
24
|
+
s.add_development_dependency 'puma'
|
|
24
25
|
s.add_development_dependency 'capybara', '>= 2'
|
|
25
26
|
s.add_development_dependency 'sqlite3'
|
|
26
27
|
s.add_development_dependency 'rake'
|
data/lib/html5_validators.rb
CHANGED
|
@@ -5,21 +5,21 @@ require 'rails'
|
|
|
5
5
|
module Html5Validators
|
|
6
6
|
@enabled = true
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
def self.enabled=(enable)
|
|
13
|
-
@enabled = enable
|
|
8
|
+
class << self
|
|
9
|
+
attr_accessor :enabled
|
|
14
10
|
end
|
|
15
11
|
|
|
16
12
|
class Railtie < ::Rails::Railtie #:nodoc:
|
|
17
|
-
initializer 'html5_validators' do
|
|
18
|
-
|
|
13
|
+
initializer 'html5_validators' do
|
|
14
|
+
config.after_initialize do
|
|
19
15
|
require 'html5_validators/active_model/helper_methods'
|
|
20
16
|
require 'html5_validators/active_model/validations'
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
ActiveSupport.on_load(:active_record) do
|
|
21
20
|
require 'html5_validators/active_record/base'
|
|
22
21
|
end
|
|
22
|
+
|
|
23
23
|
ActiveSupport.on_load(:action_view) do
|
|
24
24
|
if ActionPack::VERSION::STRING >= '4'
|
|
25
25
|
require 'html5_validators/action_view/form_helpers'
|
|
@@ -11,11 +11,22 @@ module Html5Validators
|
|
|
11
11
|
end
|
|
12
12
|
super
|
|
13
13
|
end
|
|
14
|
+
|
|
15
|
+
if Rails::VERSION::STRING >= '5.1'
|
|
16
|
+
def form_with(model: nil, scope: nil, url: nil, format: nil, **options)
|
|
17
|
+
if model && model.respond_to?(:auto_html5_validation=)
|
|
18
|
+
if !Html5Validators.enabled || (options[:auto_html5_validation] == false)
|
|
19
|
+
model.auto_html5_validation = false
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
super
|
|
23
|
+
end
|
|
24
|
+
end
|
|
14
25
|
end
|
|
15
26
|
|
|
16
27
|
module PresenceValidator
|
|
17
28
|
def render
|
|
18
|
-
if object.
|
|
29
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
19
30
|
@options["required"] ||= @options.fetch(:required) { object.attribute_required?(@method_name) }
|
|
20
31
|
end
|
|
21
32
|
super
|
|
@@ -24,7 +35,7 @@ module Html5Validators
|
|
|
24
35
|
|
|
25
36
|
module LengthValidator
|
|
26
37
|
def render
|
|
27
|
-
if object.
|
|
38
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
28
39
|
@options["maxlength"] ||= @options[:maxlength] || object.attribute_maxlength(@method_name)
|
|
29
40
|
@options["minlength"] ||= @options[:minlength] || object.attribute_minlength(@method_name)
|
|
30
41
|
end
|
|
@@ -34,7 +45,7 @@ module Html5Validators
|
|
|
34
45
|
|
|
35
46
|
module NumericalityValidator
|
|
36
47
|
def render
|
|
37
|
-
if object.
|
|
48
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
38
49
|
@options["max"] ||= @options["max"] || @options[:max] || object.attribute_max(@method_name)
|
|
39
50
|
@options["min"] ||= @options["min"] || @options[:min] || object.attribute_min(@method_name)
|
|
40
51
|
end
|
|
@@ -17,7 +17,7 @@ module ActionView
|
|
|
17
17
|
|
|
18
18
|
class InstanceTag
|
|
19
19
|
def to_input_field_tag_with_html5_attributes(field_type, options = {})
|
|
20
|
-
if object.
|
|
20
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
21
21
|
options["required"] ||= object.attribute_required?(method_name)
|
|
22
22
|
options["maxlength"] ||= object.attribute_maxlength(method_name)
|
|
23
23
|
options["minlength"] ||= object.attribute_minlength(method_name)
|
|
@@ -29,7 +29,7 @@ module ActionView
|
|
|
29
29
|
alias_method_chain :to_input_field_tag, :html5_attributes
|
|
30
30
|
|
|
31
31
|
def to_text_area_tag_with_html5_attributes(options = {})
|
|
32
|
-
if object.
|
|
32
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
33
33
|
options["required"] ||= object.attribute_required?(method_name)
|
|
34
34
|
options["maxlength"] ||= object.attribute_maxlength(method_name)
|
|
35
35
|
options["minlength"] ||= object.attribute_minlength(method_name)
|
|
@@ -39,7 +39,7 @@ module ActionView
|
|
|
39
39
|
alias_method_chain :to_text_area_tag, :html5_attributes
|
|
40
40
|
|
|
41
41
|
def to_radio_button_tag_with_html5_attributes(tag_value, options = {})
|
|
42
|
-
if object.
|
|
42
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
43
43
|
options["required"] ||= object.attribute_required?(method_name)
|
|
44
44
|
end
|
|
45
45
|
to_radio_button_tag_without_html5_attributes tag_value, options
|
|
@@ -47,7 +47,7 @@ module ActionView
|
|
|
47
47
|
alias_method_chain :to_radio_button_tag, :html5_attributes
|
|
48
48
|
|
|
49
49
|
def to_check_box_tag_with_html5_attributes(options = {}, checked_value = "1", unchecked_value = "0")
|
|
50
|
-
if object.
|
|
50
|
+
if object.is_a?(ActiveModel::Validations) && (object.auto_html5_validation != false) && (object.class.auto_html5_validation != false)
|
|
51
51
|
options["required"] ||= object.attribute_required?(method_name)
|
|
52
52
|
end
|
|
53
53
|
to_check_box_tag_without_html5_attributes options, checked_value, unchecked_value
|
data/test/fake_app.rb
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require 'active_record'
|
|
4
3
|
require 'action_controller/railtie'
|
|
4
|
+
require 'active_model'
|
|
5
5
|
|
|
6
6
|
# config
|
|
7
|
-
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
|
8
|
-
|
|
9
7
|
class Html5ValidatorsTestApp < Rails::Application
|
|
10
8
|
config.secret_token = "You know I'm born to lose, and gambling's for fools, But that's the way I like it baby, I don't wanna live for ever, And don't forget the joker!"
|
|
11
9
|
config.session_store :cookie_store, key: '_myapp_session'
|
|
@@ -33,11 +31,29 @@ Rails.application.routes.draw do
|
|
|
33
31
|
end
|
|
34
32
|
|
|
35
33
|
# models
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
34
|
+
begin
|
|
35
|
+
require 'active_record'
|
|
36
|
+
|
|
37
|
+
ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
|
|
38
|
+
|
|
39
|
+
# migrations
|
|
40
|
+
ActiveRecord::Base.connection.instance_eval do
|
|
41
|
+
create_table :people do |t|
|
|
42
|
+
t.string :name
|
|
43
|
+
t.string :email
|
|
44
|
+
t.integer :age
|
|
45
|
+
t.text :bio
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
class ApplicationRecord < ActiveRecord::Base
|
|
50
|
+
self.abstract_class = true
|
|
51
|
+
end
|
|
52
|
+
class Person < ApplicationRecord
|
|
53
|
+
end
|
|
54
|
+
rescue LoadError
|
|
40
55
|
end
|
|
56
|
+
|
|
41
57
|
class Item
|
|
42
58
|
if ActiveModel::VERSION::STRING >= '4'
|
|
43
59
|
include ActiveModel::Model
|
|
@@ -56,28 +72,48 @@ class PeopleController < ApplicationController
|
|
|
56
72
|
def new
|
|
57
73
|
@person = Person.new
|
|
58
74
|
render inline: <<-ERB
|
|
59
|
-
<%= form_for @person do |f| %>
|
|
75
|
+
<%= form_for @person, html: { id: 'form_for' } do |f| %>
|
|
60
76
|
<%= f.text_field :name %>
|
|
61
77
|
<%= f.text_area :bio %>
|
|
62
78
|
<% end %>
|
|
63
|
-
|
|
79
|
+
|
|
80
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
81
|
+
<%= form_with model: @person, id: 'form_with' do |f| %>
|
|
82
|
+
<%= f.text_field :name, id: 'person_name' %>
|
|
83
|
+
<%= f.text_area :bio, id: 'person_bio' %>
|
|
84
|
+
<% end %>
|
|
85
|
+
<% end %>
|
|
86
|
+
ERB
|
|
64
87
|
end
|
|
65
88
|
|
|
66
89
|
def new_without_html5_validation
|
|
67
90
|
@person = Person.new
|
|
68
91
|
render inline: <<-ERB
|
|
69
|
-
<%= form_for @person, auto_html5_validation: false do |f| %>
|
|
92
|
+
<%= form_for @person, html: { id: 'form_for' }, auto_html5_validation: false do |f| %>
|
|
70
93
|
<%= f.text_field :name %>
|
|
71
94
|
<%= f.text_field :email %>
|
|
72
95
|
<% end %>
|
|
73
|
-
|
|
96
|
+
|
|
97
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
98
|
+
<%= form_with model: @person, id: 'form_with', auto_html5_validation: false do |f| %>
|
|
99
|
+
<%= f.text_field :name, id: 'person_name' %>
|
|
100
|
+
<%= f.text_field :email, id: 'person_email' %>
|
|
101
|
+
<% end %>
|
|
102
|
+
<% end %>
|
|
103
|
+
ERB
|
|
74
104
|
end
|
|
75
105
|
|
|
76
106
|
def new_with_required_true
|
|
77
107
|
@person = Person.new
|
|
78
108
|
render inline: <<-ERB
|
|
79
|
-
<%= form_for @person do |f| %>
|
|
109
|
+
<%= form_for @person, html: { id: 'form_for' } do |f| %>
|
|
80
110
|
<%= f.text_field :email, required: true %>
|
|
111
|
+
<% end %>
|
|
112
|
+
|
|
113
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
114
|
+
<%= form_with model: @person, id: 'form_with' do |f| %>
|
|
115
|
+
<%= f.text_field :email, required: true, id: 'person_email' %>
|
|
116
|
+
<% end %>
|
|
81
117
|
<% end %>
|
|
82
118
|
ERB
|
|
83
119
|
end
|
|
@@ -85,8 +121,14 @@ ERB
|
|
|
85
121
|
def new_with_required_false
|
|
86
122
|
@person = Person.new
|
|
87
123
|
render inline: <<-ERB
|
|
88
|
-
<%= form_for @person do |f| %>
|
|
124
|
+
<%= form_for @person, html: { id: 'form_for' } do |f| %>
|
|
89
125
|
<%= f.text_field :email, required: false %>
|
|
126
|
+
<% end %>
|
|
127
|
+
|
|
128
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
129
|
+
<%= form_with model: @person, id: 'form_with' do |f| %>
|
|
130
|
+
<%= f.text_field :email, required: false, id: 'person_email' %>
|
|
131
|
+
<% end %>
|
|
90
132
|
<% end %>
|
|
91
133
|
ERB
|
|
92
134
|
end
|
|
@@ -95,28 +137,48 @@ class ItemsController < ApplicationController
|
|
|
95
137
|
def new
|
|
96
138
|
@item = Item.new
|
|
97
139
|
render inline: <<-ERB
|
|
98
|
-
<%= form_for @item do |f| %>
|
|
140
|
+
<%= form_for @item, html: { id: 'form_for' } do |f| %>
|
|
99
141
|
<%= f.text_field :name %>
|
|
100
142
|
<%= f.text_area :description %>
|
|
101
143
|
<% end %>
|
|
102
|
-
|
|
144
|
+
|
|
145
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
146
|
+
<%= form_with model: @item, id: 'form_with' do |f| %>
|
|
147
|
+
<%= f.text_field :name, id: 'item_name' %>
|
|
148
|
+
<%= f.text_area :description, id: 'item_description' %>
|
|
149
|
+
<% end %>
|
|
150
|
+
<% end %>
|
|
151
|
+
ERB
|
|
103
152
|
end
|
|
104
153
|
|
|
105
154
|
def new_without_html5_validation
|
|
106
155
|
@item = Item.new
|
|
107
156
|
render inline: <<-ERB
|
|
108
|
-
<%= form_for @item, auto_html5_validation: false do |f| %>
|
|
157
|
+
<%= form_for @item, html: { id: 'form_for' }, auto_html5_validation: false do |f| %>
|
|
109
158
|
<%= f.text_field :name %>
|
|
110
159
|
<%= f.text_area :description %>
|
|
111
160
|
<% end %>
|
|
112
|
-
|
|
161
|
+
|
|
162
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
163
|
+
<%= form_with model: @item, id: 'form_with', auto_html5_validation: false do |f| %>
|
|
164
|
+
<%= f.text_field :name, id: 'item_name' %>
|
|
165
|
+
<%= f.text_area :description, id: 'item_description' %>
|
|
166
|
+
<% end %>
|
|
167
|
+
<% end %>
|
|
168
|
+
ERB
|
|
113
169
|
end
|
|
114
170
|
|
|
115
171
|
def new_with_required_true
|
|
116
172
|
@item = Item.new
|
|
117
173
|
render inline: <<-ERB
|
|
118
|
-
<%= form_for @item do |f| %>
|
|
174
|
+
<%= form_for @item, html: { id: 'form_for' } do |f| %>
|
|
119
175
|
<%= f.text_field :name, required: true %>
|
|
176
|
+
<% end %>
|
|
177
|
+
|
|
178
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
179
|
+
<%= form_with model: @item, id: 'form_with' do |f| %>
|
|
180
|
+
<%= f.text_field :name, required: true, id: 'item_name' %>
|
|
181
|
+
<% end %>
|
|
120
182
|
<% end %>
|
|
121
183
|
ERB
|
|
122
184
|
end
|
|
@@ -124,8 +186,14 @@ ERB
|
|
|
124
186
|
def new_with_required_false
|
|
125
187
|
@item = Item.new
|
|
126
188
|
render inline: <<-ERB
|
|
127
|
-
<%= form_for @item do |f| %>
|
|
189
|
+
<%= form_for @item, html: { id: 'form_for' } do |f| %>
|
|
128
190
|
<%= f.text_field :name, required: false %>
|
|
191
|
+
<% end %>
|
|
192
|
+
|
|
193
|
+
<% if Rails::VERSION::STRING >= '5.1' %>
|
|
194
|
+
<%= form_with model: @item, id: 'form_with' do |f| %>
|
|
195
|
+
<%= f.text_field :name, required: false, id: 'item_name' %>
|
|
196
|
+
<% end %>
|
|
129
197
|
<% end %>
|
|
130
198
|
ERB
|
|
131
199
|
end
|
|
@@ -133,15 +201,3 @@ end
|
|
|
133
201
|
|
|
134
202
|
# helpers
|
|
135
203
|
module ApplicationHelper; end
|
|
136
|
-
|
|
137
|
-
#migrations
|
|
138
|
-
class CreateAllTables < ActiveRecord::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
|
|
139
|
-
def self.up
|
|
140
|
-
create_table :people do |t|
|
|
141
|
-
t.string :name
|
|
142
|
-
t.string :email
|
|
143
|
-
t.integer :age
|
|
144
|
-
t.text :bio
|
|
145
|
-
end
|
|
146
|
-
end
|
|
147
|
-
end
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
require 'test_helper'
|
|
4
4
|
|
|
5
5
|
class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
6
|
+
FORM_ID_LIST = if Rails::VERSION::STRING >= '5.1'
|
|
7
|
+
%w[#form_for #form_with].freeze
|
|
8
|
+
else
|
|
9
|
+
%w[#form_for].freeze
|
|
10
|
+
end
|
|
11
|
+
|
|
6
12
|
teardown do
|
|
7
13
|
Item._validators.clear
|
|
8
14
|
end
|
|
@@ -10,14 +16,18 @@ class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
|
10
16
|
sub_test_case 'without validation' do
|
|
11
17
|
test 'new form' do
|
|
12
18
|
visit '/items/new'
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
FORM_ID_LIST.each do |form|
|
|
20
|
+
assert page.has_css? "#{form} input#item_name"
|
|
21
|
+
assert page.has_no_css? "#{form} input#item_name[required=required]"
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
test 'new_without_html5_validation form' do
|
|
18
26
|
visit '/items/new_without_html5_validation'
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
FORM_ID_LIST.each do |form|
|
|
28
|
+
assert page.has_css? "#{form} textarea#item_description"
|
|
29
|
+
assert page.has_no_css? "#{form} textarea#item_description[required=required]"
|
|
30
|
+
end
|
|
21
31
|
end
|
|
22
32
|
end
|
|
23
33
|
|
|
@@ -27,24 +37,28 @@ class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
|
27
37
|
end
|
|
28
38
|
test 'new form' do
|
|
29
39
|
visit '/items/new'
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
FORM_ID_LIST.each do |form|
|
|
41
|
+
assert_equal 'required', find("#{form} input#item_name")[:required]
|
|
42
|
+
assert_equal 'required', find("#{form} textarea#item_description")[:required]
|
|
43
|
+
end
|
|
33
44
|
end
|
|
34
45
|
test 'new_without_html5_validation form' do
|
|
35
46
|
visit '/items/new_without_html5_validation'
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
FORM_ID_LIST.each do |form|
|
|
48
|
+
assert_nil find("#{form} input#item_name")[:required]
|
|
49
|
+
end
|
|
38
50
|
end
|
|
39
51
|
test 'new_with_required_true form' do
|
|
40
52
|
visit '/items/new_with_required_true'
|
|
41
|
-
|
|
42
|
-
|
|
53
|
+
FORM_ID_LIST.each do |form|
|
|
54
|
+
assert_equal 'required', find("#{form} input#item_name")[:required]
|
|
55
|
+
end
|
|
43
56
|
end
|
|
44
57
|
test 'new_with_required_false form' do
|
|
45
58
|
visit '/items/new_with_required_false'
|
|
46
|
-
|
|
47
|
-
|
|
59
|
+
FORM_ID_LIST.each do |form|
|
|
60
|
+
assert_nil find("#{form} input#item_name")[:required]
|
|
61
|
+
end
|
|
48
62
|
end
|
|
49
63
|
sub_test_case 'disabling html5_validation in class level' do
|
|
50
64
|
setup do
|
|
@@ -59,8 +73,9 @@ class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
|
59
73
|
end
|
|
60
74
|
test 'new form' do
|
|
61
75
|
visit '/items/new'
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
FORM_ID_LIST.each do |form|
|
|
77
|
+
assert_nil find("#{form} input#item_name")[:required]
|
|
78
|
+
end
|
|
64
79
|
end
|
|
65
80
|
end
|
|
66
81
|
|
|
@@ -73,9 +88,10 @@ class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
|
73
88
|
end
|
|
74
89
|
test 'new form' do
|
|
75
90
|
visit '/items/new'
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
FORM_ID_LIST.each do |form|
|
|
92
|
+
assert_nil find("#{form} input#item_name")[:required]
|
|
93
|
+
assert_nil find("#{form} textarea#item_description")[:required]
|
|
94
|
+
end
|
|
79
95
|
end
|
|
80
96
|
end
|
|
81
97
|
end
|
|
@@ -88,9 +104,10 @@ class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
|
88
104
|
|
|
89
105
|
test 'new form' do
|
|
90
106
|
visit '/items/new'
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
107
|
+
FORM_ID_LIST.each do |form|
|
|
108
|
+
assert_equal '20', find("#{form} input#item_name")[:maxlength]
|
|
109
|
+
assert_equal '100', find("#{form} textarea#item_description")[:maxlength]
|
|
110
|
+
end
|
|
94
111
|
end
|
|
95
112
|
end
|
|
96
113
|
|
|
@@ -102,9 +119,10 @@ class ActiveModelValidationTest < ActionDispatch::IntegrationTest
|
|
|
102
119
|
|
|
103
120
|
test 'new form' do
|
|
104
121
|
visit '/items/new'
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
122
|
+
FORM_ID_LIST.each do |form|
|
|
123
|
+
assert_equal '3', find("#{form} input#item_name")[:minlength]
|
|
124
|
+
assert_equal '10', find("#{form} textarea#item_description")[:minlength]
|
|
125
|
+
end
|
|
108
126
|
end
|
|
109
127
|
end
|
|
110
128
|
end
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
require 'test_helper'
|
|
4
4
|
|
|
5
5
|
class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
6
|
+
FORM_ID_LIST = if Rails::VERSION::STRING >= '5.1'
|
|
7
|
+
%w[#form_for #form_with].freeze
|
|
8
|
+
else
|
|
9
|
+
%w[#form_for].freeze
|
|
10
|
+
end
|
|
11
|
+
|
|
6
12
|
teardown do
|
|
7
13
|
Person._validators.clear
|
|
8
14
|
end
|
|
@@ -10,14 +16,18 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
10
16
|
sub_test_case 'without validation' do
|
|
11
17
|
test 'new form' do
|
|
12
18
|
visit '/people/new'
|
|
13
|
-
|
|
14
|
-
|
|
19
|
+
FORM_ID_LIST.each do |form|
|
|
20
|
+
assert page.has_css? "#{form} input#person_name"
|
|
21
|
+
assert page.has_no_css? "#{form} input#person_name[required=required]"
|
|
22
|
+
end
|
|
15
23
|
end
|
|
16
24
|
|
|
17
25
|
test 'new_without_html5_validation form' do
|
|
18
26
|
visit '/people/new_without_html5_validation'
|
|
19
|
-
|
|
20
|
-
|
|
27
|
+
FORM_ID_LIST.each do |form|
|
|
28
|
+
assert page.has_css? "#{form} input#person_email"
|
|
29
|
+
assert page.has_no_css? "#{form} input#person_email[required=required]"
|
|
30
|
+
end
|
|
21
31
|
end
|
|
22
32
|
end
|
|
23
33
|
|
|
@@ -27,24 +37,28 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
27
37
|
end
|
|
28
38
|
test 'new form' do
|
|
29
39
|
visit '/people/new'
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
40
|
+
FORM_ID_LIST.each do |form|
|
|
41
|
+
assert_equal 'required', find("#{form} input#person_name")[:required]
|
|
42
|
+
assert_equal 'required', find("#{form} textarea#person_bio")[:required]
|
|
43
|
+
end
|
|
33
44
|
end
|
|
34
45
|
test 'new_without_html5_validation form' do
|
|
35
46
|
visit '/people/new_without_html5_validation'
|
|
36
|
-
|
|
37
|
-
|
|
47
|
+
FORM_ID_LIST.each do |form|
|
|
48
|
+
assert_nil find("#{form} input#person_name")[:required]
|
|
49
|
+
end
|
|
38
50
|
end
|
|
39
51
|
test 'new_with_required_true form' do
|
|
40
52
|
visit '/people/new_with_required_true'
|
|
41
|
-
|
|
42
|
-
|
|
53
|
+
FORM_ID_LIST.each do |form|
|
|
54
|
+
assert_equal 'required', find("#{form} input#person_email")[:required]
|
|
55
|
+
end
|
|
43
56
|
end
|
|
44
57
|
test 'new_with_required_false form' do
|
|
45
58
|
visit '/people/new_with_required_false'
|
|
46
|
-
|
|
47
|
-
|
|
59
|
+
FORM_ID_LIST.each do |form|
|
|
60
|
+
assert_nil find("#{form} input#person_email")[:required]
|
|
61
|
+
end
|
|
48
62
|
end
|
|
49
63
|
sub_test_case 'disabling html5_validation in class level' do
|
|
50
64
|
setup do
|
|
@@ -59,8 +73,9 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
59
73
|
end
|
|
60
74
|
test 'new form' do
|
|
61
75
|
visit '/people/new'
|
|
62
|
-
|
|
63
|
-
|
|
76
|
+
FORM_ID_LIST.each do |form|
|
|
77
|
+
assert_nil find("#{form} input#person_name")[:required]
|
|
78
|
+
end
|
|
64
79
|
end
|
|
65
80
|
end
|
|
66
81
|
|
|
@@ -73,9 +88,10 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
73
88
|
end
|
|
74
89
|
test 'new form' do
|
|
75
90
|
visit '/people/new'
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
91
|
+
FORM_ID_LIST.each do |form|
|
|
92
|
+
assert_nil find("#{form} input#person_name")[:required]
|
|
93
|
+
assert_nil find("#{form} textarea#person_bio")[:required]
|
|
94
|
+
end
|
|
79
95
|
end
|
|
80
96
|
end
|
|
81
97
|
end
|
|
@@ -88,9 +104,10 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
88
104
|
|
|
89
105
|
test 'new form' do
|
|
90
106
|
visit '/people/new'
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
107
|
+
FORM_ID_LIST.each do |form|
|
|
108
|
+
assert_equal '20', find("#{form} input#person_name")[:maxlength]
|
|
109
|
+
assert_equal '100', find("#{form} textarea#person_bio")[:maxlength]
|
|
110
|
+
end
|
|
94
111
|
end
|
|
95
112
|
end
|
|
96
113
|
|
|
@@ -102,9 +119,10 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
102
119
|
|
|
103
120
|
test 'new form' do
|
|
104
121
|
visit '/people/new'
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
122
|
+
FORM_ID_LIST.each do |form|
|
|
123
|
+
assert_equal '3', find("#{form} input#person_name")[:minlength]
|
|
124
|
+
assert_equal '10', find("#{form} textarea#person_bio")[:minlength]
|
|
125
|
+
end
|
|
108
126
|
end
|
|
109
127
|
end
|
|
110
128
|
|
|
@@ -116,9 +134,10 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
116
134
|
end
|
|
117
135
|
test 'new form' do
|
|
118
136
|
visit '/people/new'
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
137
|
+
FORM_ID_LIST.each do |form|
|
|
138
|
+
assert_equal 'required', find("#{form} input#person_name")[:required]
|
|
139
|
+
assert_equal '100', find("#{form} textarea#person_bio")[:maxlength]
|
|
140
|
+
end
|
|
122
141
|
end
|
|
123
142
|
end
|
|
124
143
|
|
|
@@ -128,9 +147,10 @@ class ActiveRecordValidationTest < ActionDispatch::IntegrationTest
|
|
|
128
147
|
end
|
|
129
148
|
test 'new form' do
|
|
130
149
|
visit '/people/new'
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
150
|
+
FORM_ID_LIST.each do |form|
|
|
151
|
+
assert_nil find("#{form} input#person_name")[:required]
|
|
152
|
+
assert_nil find("#{form} textarea#person_bio")[:maxlength]
|
|
153
|
+
end
|
|
134
154
|
end
|
|
135
155
|
end
|
|
136
156
|
end
|
data/test/test_helper.rb
CHANGED
|
@@ -6,13 +6,31 @@ $LOAD_PATH.unshift(File.dirname(__FILE__))
|
|
|
6
6
|
require 'rails'
|
|
7
7
|
require 'bundler/setup'
|
|
8
8
|
Bundler.require
|
|
9
|
+
require 'capybara'
|
|
10
|
+
require 'selenium/webdriver'
|
|
9
11
|
|
|
10
12
|
# needs to load the app before loading rspec/rails => capybara
|
|
11
13
|
require 'fake_app'
|
|
12
|
-
|
|
14
|
+
|
|
15
|
+
require 'active_support/test_case'
|
|
16
|
+
require 'test/unit/active_support'
|
|
17
|
+
require 'test/unit/capybara'
|
|
18
|
+
require 'capybara/rails'
|
|
19
|
+
require 'capybara/dsl'
|
|
20
|
+
ActionDispatch::IntegrationTest.send :include, Capybara::DSL
|
|
21
|
+
|
|
13
22
|
# Requires supporting files with custom matchers and macros, etc,
|
|
14
23
|
# in ./support/ and its subdirectories.
|
|
15
24
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
|
16
25
|
|
|
17
|
-
|
|
18
|
-
|
|
26
|
+
begin
|
|
27
|
+
require "action_dispatch/system_test_case"
|
|
28
|
+
rescue LoadError
|
|
29
|
+
Capybara.register_driver :chrome do |app|
|
|
30
|
+
options = Selenium::WebDriver::Chrome::Options.new(args: %w[no-sandbox headless disable-gpu])
|
|
31
|
+
Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
|
|
32
|
+
end
|
|
33
|
+
Capybara.javascript_driver = :chrome
|
|
34
|
+
else
|
|
35
|
+
ActionDispatch::SystemTestCase.driven_by(:selenium, using: :headless_chrome)
|
|
36
|
+
end
|
metadata
CHANGED
|
@@ -1,17 +1,59 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: html5_validators
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Akira Matsuda
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-
|
|
11
|
+
date: 2018-12-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: test-unit-
|
|
14
|
+
name: test-unit-activesupport
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :development
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: test-unit-capybara
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: selenium-webdriver
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :development
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: puma
|
|
15
57
|
requirement: !ruby/object:Gem::Requirement
|
|
16
58
|
requirements:
|
|
17
59
|
- - ">="
|
|
@@ -90,10 +132,12 @@ extra_rdoc_files: []
|
|
|
90
132
|
files:
|
|
91
133
|
- ".gitignore"
|
|
92
134
|
- ".travis.yml"
|
|
135
|
+
- CHANGELOG.md
|
|
93
136
|
- Gemfile
|
|
94
137
|
- MIT-LICENSE
|
|
95
138
|
- README.md
|
|
96
139
|
- Rakefile
|
|
140
|
+
- gemfiles/Gemfile.activemodel-5.2
|
|
97
141
|
- gemfiles/Gemfile.rails-3.2
|
|
98
142
|
- gemfiles/Gemfile.rails-4.0
|
|
99
143
|
- gemfiles/Gemfile.rails-4.1
|
|
@@ -134,8 +178,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
134
178
|
- !ruby/object:Gem::Version
|
|
135
179
|
version: '0'
|
|
136
180
|
requirements: []
|
|
137
|
-
rubyforge_project:
|
|
138
|
-
rubygems_version: 2.7.
|
|
181
|
+
rubyforge_project:
|
|
182
|
+
rubygems_version: 2.7.6
|
|
139
183
|
signing_key:
|
|
140
184
|
specification_version: 4
|
|
141
185
|
summary: Automatic client side validation using HTML5 Form Validation
|