validations-skipper 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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