strict 1.4.0 → 1.5.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/Gemfile.lock +21 -21
- data/README.md +48 -0
- data/lib/strict/attribute.rb +2 -0
- data/lib/strict/configuration.rb +44 -0
- data/lib/strict/parameter.rb +2 -0
- data/lib/strict/return.rb +2 -0
- data/lib/strict/version.rb +1 -1
- data/lib/strict.rb +41 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 05af463032460cf8cf6cce2c976fe04a60315e8fcfba76984692ae5fe880dc23
|
4
|
+
data.tar.gz: 4c1668b6dc7282e128be060abd39f4b785a85857fa4648f14dbc2e22d745643c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 442536f508b71231134f0bc291c12343d926737f53b8c8cb1ef575247ae4ac87435bba5a169bdda043daaa5e88c6ead88298520f824528903b1066d39dbf87a1
|
7
|
+
data.tar.gz: 81456be545bc010c0dac65fb3d2f9e390deb966c57b63032e81cf64a185a5268d0f14a40d6592c33db6793dc3bfb847548e76e6906ac7f9c4f8d6143a10f6151
|
data/Gemfile.lock
CHANGED
@@ -1,51 +1,51 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
strict (1.
|
4
|
+
strict (1.5.0)
|
5
5
|
zeitwerk (~> 2.6)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
10
|
ast (2.4.2)
|
11
|
-
debug (1.
|
12
|
-
irb (>= 1.
|
11
|
+
debug (1.7.2)
|
12
|
+
irb (>= 1.5.0)
|
13
13
|
reline (>= 0.3.1)
|
14
14
|
gem-release (2.2.2)
|
15
|
-
io-console (0.
|
16
|
-
irb (1.4
|
15
|
+
io-console (0.6.0)
|
16
|
+
irb (1.6.4)
|
17
17
|
reline (>= 0.3.0)
|
18
|
-
json (2.6.
|
19
|
-
minitest (5.
|
18
|
+
json (2.6.3)
|
19
|
+
minitest (5.18.0)
|
20
20
|
minitest-spec-context (0.0.4)
|
21
21
|
parallel (1.22.1)
|
22
|
-
parser (3.
|
22
|
+
parser (3.2.2.0)
|
23
23
|
ast (~> 2.4.1)
|
24
24
|
rainbow (3.1.1)
|
25
25
|
rake (13.0.6)
|
26
|
-
regexp_parser (2.
|
27
|
-
reline (0.3.
|
26
|
+
regexp_parser (2.7.0)
|
27
|
+
reline (0.3.3)
|
28
28
|
io-console (~> 0.5)
|
29
29
|
rexml (3.2.5)
|
30
|
-
rubocop (1.
|
30
|
+
rubocop (1.49.0)
|
31
31
|
json (~> 2.3)
|
32
32
|
parallel (~> 1.10)
|
33
|
-
parser (>= 3.
|
33
|
+
parser (>= 3.2.0.0)
|
34
34
|
rainbow (>= 2.2.2, < 4.0)
|
35
35
|
regexp_parser (>= 1.8, < 3.0)
|
36
36
|
rexml (>= 3.2.5, < 4.0)
|
37
|
-
rubocop-ast (>= 1.
|
37
|
+
rubocop-ast (>= 1.28.0, < 2.0)
|
38
38
|
ruby-progressbar (~> 1.7)
|
39
|
-
unicode-display_width (>=
|
40
|
-
rubocop-ast (1.
|
41
|
-
parser (>= 3.
|
42
|
-
rubocop-minitest (0.
|
43
|
-
rubocop (>=
|
39
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
40
|
+
rubocop-ast (1.28.0)
|
41
|
+
parser (>= 3.2.1.0)
|
42
|
+
rubocop-minitest (0.30.0)
|
43
|
+
rubocop (>= 1.39, < 2.0)
|
44
44
|
rubocop-rake (0.6.0)
|
45
45
|
rubocop (~> 1.0)
|
46
|
-
ruby-progressbar (1.
|
47
|
-
unicode-display_width (2.
|
48
|
-
zeitwerk (2.6.
|
46
|
+
ruby-progressbar (1.13.0)
|
47
|
+
unicode-display_width (2.4.2)
|
48
|
+
zeitwerk (2.6.7)
|
49
49
|
|
50
50
|
PLATFORMS
|
51
51
|
arm64-darwin-21
|
data/README.md
CHANGED
@@ -173,6 +173,54 @@ storage = Storage.new(Storages::Wat.new)
|
|
173
173
|
# => Strict::ImplementationDoesNotConformError
|
174
174
|
```
|
175
175
|
|
176
|
+
### Configuration
|
177
|
+
|
178
|
+
Strict exposes some configuration options which can be configured globally via `Strict.configure { ... }` or overridden
|
179
|
+
within a block via `Strict.with_overrides(...) { ... }`.
|
180
|
+
|
181
|
+
#### Example
|
182
|
+
|
183
|
+
```ruby
|
184
|
+
# Globally
|
185
|
+
|
186
|
+
Strict.configure do |c|
|
187
|
+
c.sample_rate = 0.75 # run validation ~75% of the time
|
188
|
+
end
|
189
|
+
|
190
|
+
Strict.configure do |c|
|
191
|
+
c.sample_rate = 0 # disable validation (Strict becomes Lenient)
|
192
|
+
end
|
193
|
+
|
194
|
+
Strict.configure do |c|
|
195
|
+
c.sample_rate = 0 # always run validation
|
196
|
+
end
|
197
|
+
|
198
|
+
# Locally within the block (only applies to the current thread)
|
199
|
+
|
200
|
+
Strict.with_overrides(sample_rate: 0) do
|
201
|
+
# Use Strict as you normally would
|
202
|
+
|
203
|
+
Strict.with_overrides(sample_rate: 0.5) do
|
204
|
+
# Overrides can be nested
|
205
|
+
end
|
206
|
+
end
|
207
|
+
```
|
208
|
+
|
209
|
+
#### `Strict.configuration.random`
|
210
|
+
|
211
|
+
The instance of a `Random::Formatter` that Strict uses in tandom with the `sample_rate` to determine when validation
|
212
|
+
should be checked.
|
213
|
+
|
214
|
+
**Default**: `Random.new`
|
215
|
+
|
216
|
+
#### `Strict.configuration.sample_rate`
|
217
|
+
|
218
|
+
The rate of samples Strict will consider when validating attributes, parameters, and return values. A rate of 0.25 will
|
219
|
+
validate roughly 25% of the time, a rate of 0 will disable validation entirely, and a rate of 1 will always
|
220
|
+
run validations. The `sample_rate` is used in tandem with `random` to determine whether validation should be run.
|
221
|
+
|
222
|
+
**Default**: 1
|
223
|
+
|
176
224
|
## Development
|
177
225
|
|
178
226
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
data/lib/strict/attribute.rb
CHANGED
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Strict
|
4
|
+
class Configuration
|
5
|
+
attr_reader :random, :sample_rate
|
6
|
+
|
7
|
+
def initialize(random: nil, sample_rate: nil)
|
8
|
+
self.random = random || Random.new
|
9
|
+
self.sample_rate = sample_rate || 1
|
10
|
+
end
|
11
|
+
|
12
|
+
def random=(random)
|
13
|
+
case random
|
14
|
+
when Random::Formatter
|
15
|
+
@random = random
|
16
|
+
else
|
17
|
+
raise Strict::Error, "Expected a Random::Formatter, got: #{random.inspect}."
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def sample_rate=(rate)
|
22
|
+
case rate
|
23
|
+
when 0..1
|
24
|
+
@sample_rate = rate
|
25
|
+
else
|
26
|
+
raise Strict::Error, "Expected a sample rate between 0 and 1 (inclusive), got: #{rate.inspect}. " \
|
27
|
+
"A rate of 0 will disable strict validation. " \
|
28
|
+
"A rate of 1 will validate 100% of the time. " \
|
29
|
+
"A rate of 0.25 will validate roughly 25% of the time."
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def validate?
|
34
|
+
sample_rate >= 1 || (sample_rate > 0 && random.rand < sample_rate) # rubocop:disable Style/NumericPredicate
|
35
|
+
end
|
36
|
+
|
37
|
+
def to_h
|
38
|
+
{
|
39
|
+
random: random,
|
40
|
+
sample_rate: sample_rate
|
41
|
+
}
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
data/lib/strict/parameter.rb
CHANGED
data/lib/strict/return.rb
CHANGED
data/lib/strict/version.rb
CHANGED
data/lib/strict.rb
CHANGED
@@ -6,4 +6,45 @@ loader.setup
|
|
6
6
|
|
7
7
|
module Strict
|
8
8
|
ISSUE_TRACKER = "https://github.com/kylekthompson/strict/issues"
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def configuration
|
12
|
+
thread_configuration || global_configuration
|
13
|
+
end
|
14
|
+
|
15
|
+
def configure
|
16
|
+
raise Strict::Error, "cannot reconfigure overridden configuration" if overridden?
|
17
|
+
|
18
|
+
yield(configuration)
|
19
|
+
end
|
20
|
+
|
21
|
+
def with_overrides(**overrides)
|
22
|
+
original_thread_configuration = thread_configuration
|
23
|
+
|
24
|
+
begin
|
25
|
+
self.thread_configuration = Strict::Configuration.new(**configuration.to_h.merge(overrides))
|
26
|
+
yield
|
27
|
+
ensure
|
28
|
+
self.thread_configuration = original_thread_configuration
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def overridden?
|
35
|
+
!!thread_configuration
|
36
|
+
end
|
37
|
+
|
38
|
+
def thread_configuration
|
39
|
+
Thread.current[:configuration]
|
40
|
+
end
|
41
|
+
|
42
|
+
def thread_configuration=(configuration)
|
43
|
+
Thread.current[:configuration] = configuration
|
44
|
+
end
|
45
|
+
|
46
|
+
def global_configuration
|
47
|
+
@global_configuration ||= Strict::Configuration.new
|
48
|
+
end
|
49
|
+
end
|
9
50
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: strict
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kyle Thompson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: zeitwerk
|
@@ -164,6 +164,7 @@ files:
|
|
164
164
|
- lib/strict/attributes/instance.rb
|
165
165
|
- lib/strict/coercers/array.rb
|
166
166
|
- lib/strict/coercers/hash.rb
|
167
|
+
- lib/strict/configuration.rb
|
167
168
|
- lib/strict/dsl/coercible.rb
|
168
169
|
- lib/strict/dsl/validatable.rb
|
169
170
|
- lib/strict/error.rb
|