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 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