dry-effects 0.1.2 → 0.1.3
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/CHANGELOG.md +12 -0
- data/lib/dry/effects/effects/random.rb +1 -1
- data/lib/dry/effects/providers/random.rb +72 -1
- data/lib/dry/effects/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 06b5f9b8d829b3fc846dfe06e838492c4022a164406a3371039e0d258206bb10
|
4
|
+
data.tar.gz: 3963e477f1036e4b3657a1cf2ba1ebad879334069c152910e365541b2cd9a809
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d1259fe383b29301b2beb6b5b08af66d0161abeb4bc6c3884885b4860c3fbda38b1c6cb95c61f08780d40aacd6be3be4d96553ac694735021ed612f62823f77
|
7
|
+
data.tar.gz: 1466e9485f008b74d4c4a00f9d2dd2fa5f241bc31c569dd871b1aec73dcc12aee072f71530a01f54c1a55c9578ff350d84ee12420216125ef0329b2ed3cd42ec
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
# v0.1.3 - 2019-12-20
|
2
|
+
|
3
|
+
## Added
|
4
|
+
|
5
|
+
- Options for the random provider. You can pass a `seed` or a proc that will be used to generate random values. It is expected the value returned from the proc is within the `0.0...1.0` range (flash-gordon)
|
6
|
+
```ruby
|
7
|
+
with_random(seed: 123) { ... }
|
8
|
+
with_random(proc {|prev = 0.0| (prev + 0.1) % 1 }) { ... }
|
9
|
+
```
|
10
|
+
|
11
|
+
[Compare v0.1.2...v0.1.3](https://github.com/dry-rb/dry-effects/compare/v0.1.2...v0.1.3)
|
12
|
+
|
1
13
|
# v0.1.2 - 2019-12-15
|
2
14
|
|
3
15
|
## Fixed
|
@@ -6,7 +6,78 @@ module Dry
|
|
6
6
|
module Effects
|
7
7
|
module Providers
|
8
8
|
class Random < Provider[:random]
|
9
|
-
|
9
|
+
DEFAULT = -> _ { ::Random::DEFAULT.rand }
|
10
|
+
|
11
|
+
DEFAULT_RANGE = 0.0...1.0
|
12
|
+
|
13
|
+
def rand(range_or_limit = nil)
|
14
|
+
range_or_limit ||= DEFAULT_RANGE
|
15
|
+
|
16
|
+
if range_or_limit.is_a?(::Range)
|
17
|
+
low = range_or_limit.begin
|
18
|
+
high = range_or_limit.end
|
19
|
+
exclude_end = range_or_limit.exclude_end?
|
20
|
+
elsif range_or_limit >= 1
|
21
|
+
low = 0
|
22
|
+
high = range_or_limit.floor
|
23
|
+
exclude_end = true
|
24
|
+
else
|
25
|
+
low = 0.0
|
26
|
+
high = range_or_limit.to_f
|
27
|
+
exclude_end = true
|
28
|
+
end
|
29
|
+
|
30
|
+
if low.is_a?(::Integer)
|
31
|
+
next_integer(low, high, exclude_end)
|
32
|
+
else
|
33
|
+
next_float(low, high)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def call(options = Undefined)
|
38
|
+
@prev = nil
|
39
|
+
@generator = build_generator(options)
|
40
|
+
yield
|
41
|
+
end
|
42
|
+
|
43
|
+
def next_integer(low, high, exclude_end)
|
44
|
+
@prev = @generator.(@prev) % 1
|
45
|
+
|
46
|
+
value = low + (@prev * (high - low)).round
|
47
|
+
|
48
|
+
if value.eql?(high) && exclude_end
|
49
|
+
low
|
50
|
+
else
|
51
|
+
value
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def next_float(low, high)
|
56
|
+
@prev = @generator.(@prev) % 1
|
57
|
+
|
58
|
+
low + (@prev * (high - low))
|
59
|
+
end
|
60
|
+
|
61
|
+
def build_generator(options)
|
62
|
+
case options
|
63
|
+
when Undefined
|
64
|
+
DEFAULT
|
65
|
+
when ::Hash
|
66
|
+
if options.key?(:seed)
|
67
|
+
random = ::Random.new(options[:seed])
|
68
|
+
else
|
69
|
+
random = ::Random::DEFAULT
|
70
|
+
end
|
71
|
+
|
72
|
+
-> _ { random.rand }
|
73
|
+
else
|
74
|
+
generator = options
|
75
|
+
|
76
|
+
lambda do |prev|
|
77
|
+
prev.nil? ? generator.() : generator.(prev)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
10
81
|
end
|
11
82
|
end
|
12
83
|
end
|
data/lib/dry/effects/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dry-effects
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Shilnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-12-
|
11
|
+
date: 2019-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|