dry-effects 0.4.1 → 0.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/CHANGELOG.md +13 -4
- data/README.md +2 -2
- data/dry-effects.gemspec +13 -15
- data/lib/dry/effects/all.rb +3 -4
- data/lib/dry/effects/constructors.rb +2 -6
- data/lib/dry/effects/effects/timeout.rb +1 -3
- data/lib/dry/effects/extensions/active_support/tagged_logging.rb +1 -1
- data/lib/dry/effects/extensions/auto_inject.rb +1 -3
- data/lib/dry/effects/extensions/rspec.rb +2 -6
- data/lib/dry/effects/extensions/system.rb +1 -1
- data/lib/dry/effects/frame.rb +0 -2
- data/lib/dry/effects/initializer.rb +2 -4
- data/lib/dry/effects/instructions/execute.rb +1 -3
- data/lib/dry/effects/instructions/raise.rb +1 -3
- data/lib/dry/effects/providers/cache.rb +1 -3
- data/lib/dry/effects/providers/cmp.rb +3 -9
- data/lib/dry/effects/providers/current_time.rb +1 -3
- data/lib/dry/effects/providers/env.rb +2 -6
- data/lib/dry/effects/providers/implicit.rb +1 -3
- data/lib/dry/effects/providers/interrupt.rb +4 -12
- data/lib/dry/effects/providers/lock.rb +5 -15
- data/lib/dry/effects/providers/parallel.rb +1 -3
- data/lib/dry/effects/providers/reader.rb +1 -3
- data/lib/dry/effects/providers/resolve.rb +1 -3
- data/lib/dry/effects/providers/retry.rb +4 -12
- data/lib/dry/effects/providers/timeout.rb +1 -3
- data/lib/dry/effects/providers/timestamp.rb +1 -3
- data/lib/dry/effects/stack.rb +2 -2
- data/lib/dry/effects/version.rb +1 -1
- metadata +14 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 626d4bdc56d537a84bf03b5dc0dc41064884a332d963927e8ea4a67146f02798
|
4
|
+
data.tar.gz: 5f2ddb0d5d4ef7be1bd6f74df8705004b0a56f777620eba2e07a5d092fd38961
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 252fd40556632c8e54f5c4946c829c2992a37d786e14a8566dfd29ae821043f4245d85c5b4ac7c0fd611c68bd6bfb6ddcc326cb7c9025a751db965ad56464020
|
7
|
+
data.tar.gz: 3277ddb76eb1c387f840a380d9d66de4654ead45eae4fbf4b7e3708082ce7768a58740544344e1e8b9661b464d76563d72dfd24e469dbe9a7c3b1c2fdf38e692
|
data/CHANGELOG.md
CHANGED
@@ -1,22 +1,31 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
-
## 0.
|
3
|
+
## 0.5.0 2025-01-07
|
4
|
+
|
5
|
+
|
6
|
+
### Changed
|
7
|
+
|
8
|
+
- Set minimum Ruby version to 3.1 (@flash-gordon)
|
9
|
+
|
10
|
+
[Compare v0.4.1...v0.5.0](https://github.com/dry-rb/dry-effects/compare/v0.4.1...v0.5.0)
|
11
|
+
|
12
|
+
## 0.4.1 2024-03-15
|
4
13
|
|
5
14
|
|
6
15
|
### Changed
|
7
16
|
|
8
17
|
- Workaround for a clash with Object#with (@tallica + @flash-gordon)
|
9
18
|
|
10
|
-
[Compare v0.4.0...
|
19
|
+
[Compare v0.4.0...v0.4.1](https://github.com/dry-rb/dry-effects/compare/v0.4.0...v0.4.1)
|
11
20
|
|
12
|
-
## 0.4.0
|
21
|
+
## 0.4.0 2022-11-07
|
13
22
|
|
14
23
|
|
15
24
|
### Changed
|
16
25
|
|
17
26
|
- This version is compatible with recently released dry-rb dependencies (@flash-gordon)
|
18
27
|
|
19
|
-
[Compare v0.3.1...
|
28
|
+
[Compare v0.3.1...v0.4.0](https://github.com/dry-rb/dry-effects/compare/v0.3.1...v0.4.0)
|
20
29
|
|
21
30
|
## 0.3.1 2022-10-17
|
22
31
|
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
[gem]: https://rubygems.org/gems/dry-effects
|
3
3
|
[actions]: https://github.com/dry-rb/dry-effects/actions
|
4
4
|
|
5
|
-
# dry-effects [][gem] [][gem] [][actions]
|
6
6
|
|
7
7
|
## Links
|
8
8
|
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
This library officially supports the following Ruby versions:
|
16
16
|
|
17
|
-
* MRI `>= 3.
|
17
|
+
* MRI `>= 3.1`
|
18
18
|
* jruby `>= 9.4` (not tested on CI)
|
19
19
|
|
20
20
|
## License
|
data/dry-effects.gemspec
CHANGED
@@ -16,26 +16,24 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.summary = "Algebraic effects"
|
17
17
|
spec.description = spec.summary
|
18
18
|
spec.homepage = "https://dry-rb.org/gems/dry-effects"
|
19
|
-
spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-effects.gemspec",
|
19
|
+
spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-effects.gemspec",
|
20
|
+
"lib/**/*"]
|
20
21
|
spec.bindir = "bin"
|
21
22
|
spec.executables = []
|
22
23
|
spec.require_paths = ["lib"]
|
23
24
|
|
24
|
-
spec.metadata["allowed_push_host"]
|
25
|
-
spec.metadata["changelog_uri"]
|
26
|
-
spec.metadata["source_code_uri"]
|
27
|
-
spec.metadata["bug_tracker_uri"]
|
25
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
26
|
+
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-effects/blob/main/CHANGELOG.md"
|
27
|
+
spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-effects"
|
28
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-effects/issues"
|
29
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
28
30
|
|
29
|
-
spec.required_ruby_version = ">= 3.
|
31
|
+
spec.required_ruby_version = ">= 3.1"
|
30
32
|
|
31
33
|
# to update dependencies edit project.yml
|
32
|
-
spec.
|
33
|
-
spec.
|
34
|
-
spec.
|
35
|
-
spec.
|
36
|
-
spec.
|
37
|
-
|
38
|
-
spec.add_development_dependency "bundler"
|
39
|
-
spec.add_development_dependency "rake"
|
40
|
-
spec.add_development_dependency "rspec"
|
34
|
+
spec.add_dependency "concurrent-ruby", "~> 1.0"
|
35
|
+
spec.add_dependency "dry-core", "~> 1.1"
|
36
|
+
spec.add_dependency "dry-inflector", "~> 1.1"
|
37
|
+
spec.add_dependency "dry-initializer", "~> 3.2"
|
38
|
+
spec.add_dependency "zeitwerk", "~> 2.6"
|
41
39
|
end
|
data/lib/dry/effects/all.rb
CHANGED
@@ -21,12 +21,11 @@ module Dry
|
|
21
21
|
end
|
22
22
|
|
23
23
|
singleton_class.class_eval do
|
24
|
-
define_method(class_name) do |*args|
|
25
|
-
effect_modules.fetch_or_store([key, args]) do
|
26
|
-
::Dry::Effects.effects[key].new(*args).freeze
|
24
|
+
define_method(class_name) do |*args, **kwargs|
|
25
|
+
effect_modules.fetch_or_store([key, args, kwargs]) do
|
26
|
+
::Dry::Effects.effects[key].new(*args, **kwargs).freeze
|
27
27
|
end
|
28
28
|
end
|
29
|
-
ruby2_keywords(class_name) if respond_to?(:ruby2_keywords, true)
|
30
29
|
end
|
31
30
|
end
|
32
31
|
|
@@ -18,14 +18,10 @@ module Dry
|
|
18
18
|
end
|
19
19
|
|
20
20
|
# @api public
|
21
|
-
def Retry(scope)
|
22
|
-
Effects::Retry::Retry.new(type: :retry, scope: scope)
|
23
|
-
end
|
21
|
+
def Retry(scope) = Effects::Retry::Retry.new(type: :retry, scope: scope)
|
24
22
|
|
25
23
|
# @api public
|
26
|
-
def Read(scope)
|
27
|
-
Effects::State::State.new(type: :state, name: :read, scope: scope)
|
28
|
-
end
|
24
|
+
def Read(scope) = Effects::State::State.new(type: :state, name: :read, scope: scope)
|
29
25
|
|
30
26
|
# @api public
|
31
27
|
def Write(scope, value)
|
@@ -9,7 +9,7 @@ begin
|
|
9
9
|
rescue LoadError
|
10
10
|
ActiveSupport::TaggedLogging::Formatter.prepend(Module.new {
|
11
11
|
def current_tags
|
12
|
-
thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{
|
12
|
+
thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{__id__}"
|
13
13
|
unless Thread.current.thread_variable_get(thread_key)
|
14
14
|
Thread.current.thread_variable_set(thread_key, [])
|
15
15
|
end
|
@@ -7,15 +7,11 @@
|
|
7
7
|
RSpec::Support.singleton_class.prepend(Module.new {
|
8
8
|
include Dry::Effects.Reader(:rspec, as: :effect_local_data)
|
9
9
|
|
10
|
-
def thread_local_data
|
11
|
-
effect_local_data { super }
|
12
|
-
end
|
10
|
+
def thread_local_data = effect_local_data { super }
|
13
11
|
})
|
14
12
|
|
15
13
|
RSpec::Core::Runner.prepend(Module.new {
|
16
14
|
include Dry::Effects::Handler.Reader(:rspec, as: :run_with_data)
|
17
15
|
|
18
|
-
def run_specs(*)
|
19
|
-
run_with_data(RSpec::Support.thread_local_data) { super }
|
20
|
-
end
|
16
|
+
def run_specs(*) = run_with_data(RSpec::Support.thread_local_data) { super }
|
21
17
|
})
|
data/lib/dry/effects/frame.rb
CHANGED
@@ -6,22 +6,20 @@ module Dry
|
|
6
6
|
# @api private
|
7
7
|
module DefineWithHook
|
8
8
|
# @api private
|
9
|
-
def param(
|
9
|
+
def param(...)
|
10
10
|
super.tap do
|
11
11
|
@params_arity = nil
|
12
12
|
__define_with__
|
13
13
|
end
|
14
14
|
end
|
15
|
-
ruby2_keywords(:param) if respond_to?(:ruby2_keywords, true)
|
16
15
|
|
17
16
|
# @api private
|
18
|
-
def option(
|
17
|
+
def option(...)
|
19
18
|
super.tap do
|
20
19
|
__define_with__ unless method_defined?(:with)
|
21
20
|
@has_options = true
|
22
21
|
end
|
23
22
|
end
|
24
|
-
ruby2_keywords(:option) if respond_to?(:ruby2_keywords, true)
|
25
23
|
|
26
24
|
# @api private
|
27
25
|
def params_arity
|
@@ -10,9 +10,7 @@ module Dry
|
|
10
10
|
|
11
11
|
param :id
|
12
12
|
|
13
|
-
def get
|
14
|
-
value
|
15
|
-
end
|
13
|
+
def get = value
|
16
14
|
|
17
15
|
# Yield the block with the handler installed
|
18
16
|
#
|
@@ -33,15 +31,11 @@ module Dry
|
|
33
31
|
# @param [Effect] effect
|
34
32
|
# @return [Boolean]
|
35
33
|
# @api public
|
36
|
-
def provide?(effect)
|
37
|
-
super && id.equal?(effect.id)
|
38
|
-
end
|
34
|
+
def provide?(effect) = super && id.equal?(effect.id)
|
39
35
|
|
40
36
|
# @return [String]
|
41
37
|
# @api public
|
42
|
-
def represent
|
43
|
-
"cmp[#{id}=#{@value}]"
|
44
|
-
end
|
38
|
+
def represent = "cmp[#{id}=#{@value}]"
|
45
39
|
end
|
46
40
|
end
|
47
41
|
end
|
@@ -12,9 +12,7 @@ module Dry
|
|
12
12
|
|
13
13
|
attr_reader :parent
|
14
14
|
|
15
|
-
def read(key)
|
16
|
-
parent.fetch(key) { fetch(key) }
|
17
|
-
end
|
15
|
+
def read(key) = parent.fetch(key) { fetch(key) }
|
18
16
|
|
19
17
|
def fetch(key)
|
20
18
|
values.fetch(key) do
|
@@ -31,9 +29,7 @@ module Dry
|
|
31
29
|
#
|
32
30
|
# @return [Provider]
|
33
31
|
# @api private
|
34
|
-
def locate
|
35
|
-
self
|
36
|
-
end
|
32
|
+
def locate = self
|
37
33
|
|
38
34
|
# Yield the block with the handler installed
|
39
35
|
#
|
@@ -6,9 +6,7 @@ module Dry
|
|
6
6
|
class Interrupt < Provider[:interrupt]
|
7
7
|
param :scope, default: -> { :default }
|
8
8
|
|
9
|
-
def interrupt(*payload)
|
10
|
-
Instructions.Raise(halt.new(payload))
|
11
|
-
end
|
9
|
+
def interrupt(*payload) = Instructions.Raise(halt.new(payload))
|
12
10
|
|
13
11
|
# Yield the block with the handler installed
|
14
12
|
#
|
@@ -19,22 +17,16 @@ module Dry
|
|
19
17
|
[true, e.payload[0]]
|
20
18
|
end
|
21
19
|
|
22
|
-
def halt
|
23
|
-
Halt[scope]
|
24
|
-
end
|
20
|
+
def halt = Halt[scope]
|
25
21
|
|
26
22
|
# @return [String]
|
27
23
|
# @api public
|
28
|
-
def represent
|
29
|
-
"interrupt[#{scope}]"
|
30
|
-
end
|
24
|
+
def represent = "interrupt[#{scope}]"
|
31
25
|
|
32
26
|
# @param [Effect] effect
|
33
27
|
# @return [Boolean]
|
34
28
|
# @api public
|
35
|
-
def provide?(effect)
|
36
|
-
super && scope.equal?(effect.scope)
|
37
|
-
end
|
29
|
+
def provide?(effect) = super && scope.equal?(effect.scope)
|
38
30
|
end
|
39
31
|
end
|
40
32
|
end
|
@@ -31,9 +31,7 @@ module Dry
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
def locked?(key)
|
35
|
-
locks.key?(key)
|
36
|
-
end
|
34
|
+
def locked?(key) = locks.key?(key)
|
37
35
|
|
38
36
|
def unlock(handle)
|
39
37
|
mutex.synchronize do
|
@@ -62,25 +60,17 @@ module Dry
|
|
62
60
|
locked
|
63
61
|
end
|
64
62
|
|
65
|
-
def locked?(key)
|
66
|
-
backend.locked?(key)
|
67
|
-
end
|
63
|
+
def locked?(key) = backend.locked?(key)
|
68
64
|
|
69
|
-
def unlock(handle)
|
70
|
-
backend.unlock(handle)
|
71
|
-
end
|
65
|
+
def unlock(handle) = backend.unlock(handle)
|
72
66
|
|
73
|
-
def meta(key)
|
74
|
-
backend.meta(key)
|
75
|
-
end
|
67
|
+
def meta(key) = backend.meta(key)
|
76
68
|
|
77
69
|
# Locate handler in the stack
|
78
70
|
#
|
79
71
|
# @return [Provider]
|
80
72
|
# @api private
|
81
|
-
def locate
|
82
|
-
self
|
83
|
-
end
|
73
|
+
def locate = self
|
84
74
|
|
85
75
|
# Yield the block with the handler installed
|
86
76
|
#
|
@@ -25,9 +25,7 @@ module Dry
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
def retry
|
29
|
-
Instructions.Raise(halt.new)
|
30
|
-
end
|
28
|
+
def retry = Instructions.Raise(halt.new)
|
31
29
|
|
32
30
|
def attempt
|
33
31
|
if attempts_exhausted?
|
@@ -42,19 +40,13 @@ module Dry
|
|
42
40
|
attempts.equal?(limit)
|
43
41
|
end
|
44
42
|
|
45
|
-
def halt
|
46
|
-
Halt[scope]
|
47
|
-
end
|
43
|
+
def halt = Halt[scope]
|
48
44
|
|
49
|
-
def provide?(effect)
|
50
|
-
super && scope.equal?(effect.scope)
|
51
|
-
end
|
45
|
+
def provide?(effect) = super && scope.equal?(effect.scope)
|
52
46
|
|
53
47
|
# @return [String]
|
54
48
|
# @api public
|
55
|
-
def represent
|
56
|
-
"retry[#{scope} #{attempts}/#{limit}]"
|
57
|
-
end
|
49
|
+
def represent = "retry[#{scope} #{attempts}/#{limit}]"
|
58
50
|
end
|
59
51
|
end
|
60
52
|
end
|
data/lib/dry/effects/stack.rb
CHANGED
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.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Shilnikov
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2025-01-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -30,42 +30,42 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.1'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.1'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: dry-inflector
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '1.
|
47
|
+
version: '1.1'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '1.
|
54
|
+
version: '1.1'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: dry-initializer
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3.
|
61
|
+
version: '3.2'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3.
|
68
|
+
version: '3.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: zeitwerk
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,48 +80,6 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '2.6'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: bundler
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rake
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
83
|
description: Algebraic effects
|
126
84
|
email:
|
127
85
|
- fg@flashgordon.ru
|
@@ -203,7 +161,8 @@ metadata:
|
|
203
161
|
changelog_uri: https://github.com/dry-rb/dry-effects/blob/main/CHANGELOG.md
|
204
162
|
source_code_uri: https://github.com/dry-rb/dry-effects
|
205
163
|
bug_tracker_uri: https://github.com/dry-rb/dry-effects/issues
|
206
|
-
|
164
|
+
rubygems_mfa_required: 'true'
|
165
|
+
post_install_message:
|
207
166
|
rdoc_options: []
|
208
167
|
require_paths:
|
209
168
|
- lib
|
@@ -211,15 +170,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
211
170
|
requirements:
|
212
171
|
- - ">="
|
213
172
|
- !ruby/object:Gem::Version
|
214
|
-
version: 3.
|
173
|
+
version: '3.1'
|
215
174
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
216
175
|
requirements:
|
217
176
|
- - ">="
|
218
177
|
- !ruby/object:Gem::Version
|
219
178
|
version: '0'
|
220
179
|
requirements: []
|
221
|
-
rubygems_version: 3.3.
|
222
|
-
signing_key:
|
180
|
+
rubygems_version: 3.3.27
|
181
|
+
signing_key:
|
223
182
|
specification_version: 4
|
224
183
|
summary: Algebraic effects
|
225
184
|
test_files: []
|