validations-skipper 0.1.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 +7 -0
- data/lib/validations_skipper.rb +29 -0
- data/test/test_validations_skipper.rb +81 -0
- metadata +93 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9aa7a804e48493ed99bbfe87e237f4c971447ee2b6930940002f8fbb772ec52b
|
4
|
+
data.tar.gz: 3b56a61ab479a7e3dbe953544a7dd3fc4380d62aaddb4fda06b8ee4481241b82
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8306bf7544300da02feaa8f5c1acbfe53603665571fe37c17d3722a5b3846343f56ef8c9efd82438357fe54f0375e72ea49e0b691fb90c088417c97b03483801
|
7
|
+
data.tar.gz: 477cc31e62db5f9f813e16d6d044ba6f47d0dcaa27145c7ddc02147d7e7bad345742193dde6cffd9d1f8966fc7112af66d8f0b92206f09afa779e2133bd981a1
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module ValidationsSkipable
|
2
|
+
def self.included(base)
|
3
|
+
base.class_eval do
|
4
|
+
attr_accessor :skip_validations
|
5
|
+
|
6
|
+
def initialize(*)
|
7
|
+
@original_methods = self.class.instance_methods.map do |instance_method|
|
8
|
+
[instance_method, method(instance_method)]
|
9
|
+
end.to_h
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def skip_validations
|
14
|
+
@skip_validations ||= []
|
15
|
+
end
|
16
|
+
|
17
|
+
def skip_validations=(skip_validations)
|
18
|
+
@skip_validations = skip_validations
|
19
|
+
|
20
|
+
@skip_validations.each do |validation_method|
|
21
|
+
define_singleton_method(validation_method) do
|
22
|
+
return if __method__.in? @skip_validations
|
23
|
+
@original_methods[validation_method].call
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'validations_skipper'
|
3
|
+
require 'active_model'
|
4
|
+
require 'active_support/core_ext/object/inclusion.rb'
|
5
|
+
|
6
|
+
class TestValidationsSkipper < Minitest::Test
|
7
|
+
class ClassWithOneValidation
|
8
|
+
include ActiveModel::Validations
|
9
|
+
include ValidationsSkipable
|
10
|
+
|
11
|
+
validate :validation_method
|
12
|
+
|
13
|
+
def validation_method
|
14
|
+
errors.add(:column, 'An error message')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_skipping_validation
|
19
|
+
@object = ClassWithOneValidation.new
|
20
|
+
@object.skip_validations = [:validation_method]
|
21
|
+
|
22
|
+
assert_equal(@object.valid?, true)
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_not_skipping_validation
|
26
|
+
@object = ClassWithOneValidation.new
|
27
|
+
|
28
|
+
assert_equal(@object.valid?, false)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_toggleing_skipping_validation
|
32
|
+
@object = ClassWithOneValidation.new
|
33
|
+
@object.skip_validations = [:validation_method]
|
34
|
+
@object.skip_validations = []
|
35
|
+
|
36
|
+
assert_equal(@object.valid?, false)
|
37
|
+
end
|
38
|
+
|
39
|
+
class ClassWithTwoValidations
|
40
|
+
include ActiveModel::Validations
|
41
|
+
include ValidationsSkipable
|
42
|
+
|
43
|
+
validate :validation_method1
|
44
|
+
validate :validation_method2
|
45
|
+
|
46
|
+
def validation_method1
|
47
|
+
errors.add(:column, 'An error message')
|
48
|
+
end
|
49
|
+
|
50
|
+
def validation_method2
|
51
|
+
errors.add(:column, 'Another error message')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_skipping_first_validation
|
56
|
+
@object = ClassWithTwoValidations.new
|
57
|
+
@object.skip_validations = [:validation_method1]
|
58
|
+
|
59
|
+
assert_equal(@object.valid?, false)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_skipping_last_validation
|
63
|
+
@object = ClassWithTwoValidations.new
|
64
|
+
@object.skip_validations = [:validation_method2]
|
65
|
+
|
66
|
+
assert_equal(@object.valid?, false)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_skipping_both_validations
|
70
|
+
@object = ClassWithTwoValidations.new
|
71
|
+
@object.skip_validations = [:validation_method1, :validation_method2]
|
72
|
+
|
73
|
+
assert_equal(@object.valid?, true)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_not_skipping_validations
|
77
|
+
@object = ClassWithOneValidation.new
|
78
|
+
|
79
|
+
assert_equal(@object.valid?, false)
|
80
|
+
end
|
81
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: validations-skipper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Victor Cordeiro Costa
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-02-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.10'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.10'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '12.1'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '12.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: activerecord
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.2'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.2'
|
55
|
+
description: |-
|
56
|
+
validations-skipper is a gem that enables objects
|
57
|
+
to skip specified validations with ease.
|
58
|
+
It can be applied to ActiveRecord::Base classes.
|
59
|
+
email:
|
60
|
+
- victorcorcos@gmail.com
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- lib/validations_skipper.rb
|
66
|
+
- test/test_validations_skipper.rb
|
67
|
+
homepage: https://github.com/Victorcorcos/validations-skipper
|
68
|
+
licenses:
|
69
|
+
- MIT
|
70
|
+
metadata: {}
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '2.0'
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubyforge_project:
|
87
|
+
rubygems_version: 2.7.9
|
88
|
+
signing_key:
|
89
|
+
specification_version: 4
|
90
|
+
summary: validations-skipper is a gem that enables objects to skip specified validations
|
91
|
+
with ease. It can be applied to ActiveRecord::Base classes.
|
92
|
+
test_files:
|
93
|
+
- test/test_validations_skipper.rb
|