sequel-more-validations 1.0.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: 9932378edb17d7ed7908c89cf477edd399d568d4ace1c8c483ea7535f2c304ab
4
+ data.tar.gz: 60d11202a965923a0597c49b62daa38c74d2e1a65d46ba15f562439b81934405
5
+ SHA512:
6
+ metadata.gz: 3e77b24de709a095ad9a5fb096d5423ef1aaf36d3a7ecb6feec978fc9f8bcc99e98b507e0df2de8d9e793b87f4d0602abcd95404ae02abbb8f1bff6cdafd03f0
7
+ data.tar.gz: 2d4b41f0875bacf03a395aaa2ce119dd5a1d910e5530b2711c6e863b90798f15038a47b62a591186cf8254f8519fa528b46120561f89c69fe8e1d0163ad19196
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "sequel"
4
+ require "sequel/model"
5
+
6
+ # Additional validations for Sequel models.
7
+ # See README or InstanceMethods for more info.
8
+ module Sequel::Plugins::MoreValidations
9
+ VERSION = "1.0.0"
10
+
11
+ module InstanceMethods
12
+ # Ensures that only one of the passed columns is not null
13
+ def validates_mutually_exclusive(*cols)
14
+ set_cols = cols.find_all { |col| !self[col].nil? }
15
+
16
+ self.errors.add(set_cols.first, "is mutually exclusive with other set columns #{set_cols[1..].join(', ')}") if
17
+ set_cols.length > 1
18
+ end
19
+
20
+ # Ensures that at least one of the passed columns is not null
21
+ def validates_at_least_one_of(*cols)
22
+ self.errors.add(cols.first, "must be set if all of #{cols[1..].join(', ')} are null") unless
23
+ cols.any? { |col| !self[col].nil? }
24
+ end
25
+
26
+ # Ensures that one and only one of the passed columns is not null
27
+ def validates_exactly_one_of(*cols)
28
+ self.validates_at_least_one_of(*cols)
29
+ self.validates_mutually_exclusive(*cols)
30
+ end
31
+
32
+ # Ensures the value in the column is an IPAddr or can be parsed as one.
33
+ def validates_ip_address(col)
34
+ return if self[col].respond_to?(:ipv4?)
35
+ begin
36
+ IPAddr.new(self[col])
37
+ rescue IPAddr::Error
38
+ self.errors.add(col, "is not a valid INET address")
39
+ end
40
+ end
41
+
42
+ # Ensure the value in the column is non-nil, non-empty, and the start is before the end.
43
+ def validates_pgrange(col)
44
+ val = self[col]
45
+ if val.nil?
46
+ self.errors.add(col, "cannot be nil")
47
+ return
48
+ end
49
+ return if val.end > val.begin
50
+ if val.end == val.begin
51
+ self.errors.add(col, "cannot be empty")
52
+ return
53
+ end
54
+ self.errors.add(col, "lower bound must be less than upper bound")
55
+ end
56
+ end
57
+ end
metadata ADDED
@@ -0,0 +1,145 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sequel-more-validations
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Lithic Tech
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-03-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rspec
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '3.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-core
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.10'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.11'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop-performance
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-sequel
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.2'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: sequel
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '5.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '5.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: sqlite3
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1'
111
+ description: 'sequel-more-validations is a Sequel model plugin that provides common
112
+ helplful validations.
113
+
114
+ '
115
+ email: hello@lithic.tech
116
+ executables: []
117
+ extensions: []
118
+ extra_rdoc_files: []
119
+ files:
120
+ - lib/sequel/plugins/more_validations.rb
121
+ homepage: https://github.com/lithictech/sequel-more-validations
122
+ licenses:
123
+ - MIT
124
+ metadata:
125
+ rubygems_mfa_required: 'true'
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: 2.7.0
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubygems_version: 3.1.6
142
+ signing_key:
143
+ specification_version: 4
144
+ summary: Extra validations for Ruby Sequel models.
145
+ test_files: []