dry-effects 0.1.5 → 0.3.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 +34 -0
- data/LICENSE +1 -1
- data/README.md +5 -4
- data/dry-effects.gemspec +15 -15
- data/lib/dry/effects/all.rb +3 -3
- data/lib/dry/effects/container.rb +1 -1
- data/lib/dry/effects/effect.rb +1 -2
- data/lib/dry/effects/effects/async.rb +4 -2
- data/lib/dry/effects/effects/cache.rb +13 -9
- data/lib/dry/effects/effects/cmp.rb +3 -1
- data/lib/dry/effects/effects/current_time.rb +4 -2
- data/lib/dry/effects/effects/defer.rb +3 -1
- data/lib/dry/effects/effects/env.rb +3 -1
- data/lib/dry/effects/effects/fork.rb +3 -1
- data/lib/dry/effects/effects/implicit.rb +3 -1
- data/lib/dry/effects/effects/interrupt.rb +3 -1
- data/lib/dry/effects/effects/lock.rb +3 -1
- data/lib/dry/effects/effects/parallel.rb +4 -2
- data/lib/dry/effects/effects/random.rb +3 -1
- data/lib/dry/effects/effects/reader.rb +1 -1
- data/lib/dry/effects/effects/resolve.rb +24 -4
- data/lib/dry/effects/effects/retry.rb +4 -2
- data/lib/dry/effects/effects/state.rb +4 -2
- data/lib/dry/effects/effects/timeout.rb +3 -1
- data/lib/dry/effects/effects/timestamp.rb +3 -1
- data/lib/dry/effects/errors.rb +4 -4
- data/lib/dry/effects/extensions/active_support/tagged_logging.rb +1 -1
- data/lib/dry/effects/extensions/auto_inject.rb +5 -5
- data/lib/dry/effects/extensions/system.rb +9 -8
- data/lib/dry/effects/extensions.rb +4 -6
- data/lib/dry/effects/frame.rb +23 -9
- data/lib/dry/effects/halt.rb +2 -3
- data/lib/dry/effects/handler.rb +2 -10
- data/lib/dry/effects/inflector.rb +1 -1
- data/lib/dry/effects/initializer.rb +17 -17
- data/lib/dry/effects/instructions/execute.rb +2 -1
- data/lib/dry/effects/instructions/raise.rb +2 -1
- data/lib/dry/effects/provider/class_interface.rb +1 -2
- data/lib/dry/effects/provider.rb +2 -2
- data/lib/dry/effects/providers/async.rb +2 -2
- data/lib/dry/effects/providers/cache.rb +2 -2
- data/lib/dry/effects/providers/cmp.rb +1 -1
- data/lib/dry/effects/providers/current_time/time_generators.rb +1 -1
- data/lib/dry/effects/providers/current_time.rb +5 -5
- data/lib/dry/effects/providers/defer.rb +7 -7
- data/lib/dry/effects/providers/env.rb +3 -3
- data/lib/dry/effects/providers/fork.rb +2 -2
- data/lib/dry/effects/providers/implicit.rb +1 -1
- data/lib/dry/effects/providers/interrupt.rb +3 -3
- data/lib/dry/effects/providers/lock.rb +5 -8
- data/lib/dry/effects/providers/parallel.rb +3 -3
- data/lib/dry/effects/providers/random.rb +5 -4
- data/lib/dry/effects/providers/reader.rb +1 -1
- data/lib/dry/effects/providers/resolve.rb +8 -7
- data/lib/dry/effects/providers/retry.rb +5 -7
- data/lib/dry/effects/providers/state.rb +2 -2
- data/lib/dry/effects/providers/timeout.rb +2 -2
- data/lib/dry/effects/providers/timestamp.rb +2 -2
- data/lib/dry/effects/stack.rb +7 -7
- data/lib/dry/effects/version.rb +1 -1
- data/lib/dry/effects.rb +9 -9
- metadata +9 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '0239ad7c00317ef55c59d15f20b9445a23e4209ee381e6eb0e46300cca5615a4'
|
4
|
+
data.tar.gz: 25c49fe75fe6ada449943aa1642763acab11e20d91d66cd3ed0e5353ecf747b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 311d562013b53ed8e3744b2dd433ab5200313e17021ec8b9e3219d48d1ff31ddd824c537b8282be3647e90dd4045369229814f58782c13bd47be7374f9b48036
|
7
|
+
data.tar.gz: 7eac1b68843190d616057fdd61212ae46e70b3f88b21318daad6e1a5b9d6ea7d15ddbf32e0171095e16a8929d7d45d3661a4eb264629043cb3ae1a794ffc5da4
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,37 @@
|
|
1
|
+
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
|
+
|
3
|
+
## 0.3.0 2022-10-15
|
4
|
+
|
5
|
+
|
6
|
+
### Changed
|
7
|
+
|
8
|
+
- Use zeitwerk for auto-loading (@flash-gordon)
|
9
|
+
- Remove dependency on dry-configurable (@flash-gordon)
|
10
|
+
|
11
|
+
[Compare v0.2.0...v0.3.0](https://github.com/dry-rb/dry-effects/compare/v0.2.0...v0.3.0)
|
12
|
+
|
13
|
+
## 0.2.0 2021-09-12
|
14
|
+
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
|
18
|
+
- Updated "system" extension to work with dry-system 0.19.0 (@timriley in #83)
|
19
|
+
|
20
|
+
[Compare v0.1.5...v0.2.0](https://github.com/dry-rb/dry-effects/compare/v0.1.5...v0.2.0)
|
21
|
+
|
22
|
+
## 0.1.5 2020-02-09
|
23
|
+
|
24
|
+
|
25
|
+
### Fixed
|
26
|
+
|
27
|
+
- Add patch for ActiveRecord::TaggedLogger to preserve tags in presence of effect handlers (leehambley)
|
28
|
+
```ruby
|
29
|
+
Dry::Effects.load_extensions(:active_support_tagged_logging)
|
30
|
+
```
|
31
|
+
|
32
|
+
|
33
|
+
[Compare v0.1.4...v0.1.5](https://github.com/dry-rb/dry-effects/compare/v0.1.4...v0.1.5)
|
34
|
+
|
1
35
|
## 0.1.4 2020-01-07
|
2
36
|
|
3
37
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
<!--- this file is synced from dry-rb/template-gem project -->
|
1
2
|
[gem]: https://rubygems.org/gems/dry-effects
|
2
3
|
[actions]: https://github.com/dry-rb/dry-effects/actions
|
3
4
|
[codacy]: https://www.codacy.com/gh/dry-rb/dry-effects
|
@@ -10,19 +11,19 @@
|
|
10
11
|
[][actions]
|
11
12
|
[][codacy]
|
12
13
|
[][codacy]
|
13
|
-
[][inchpages]
|
14
15
|
|
15
16
|
## Links
|
16
17
|
|
17
|
-
* [User documentation](
|
18
|
+
* [User documentation](https://dry-rb.org/gems/dry-effects)
|
18
19
|
* [API documentation](http://rubydoc.info/gems/dry-effects)
|
19
20
|
|
20
21
|
## Supported Ruby versions
|
21
22
|
|
22
23
|
This library officially supports the following Ruby versions:
|
23
24
|
|
24
|
-
* MRI
|
25
|
-
* jruby
|
25
|
+
* MRI `>= 2.7.0`
|
26
|
+
* jruby `>= 9.3` (postponed until 2.7 is supported)
|
26
27
|
|
27
28
|
## License
|
28
29
|
|
data/dry-effects.gemspec
CHANGED
@@ -1,37 +1,37 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
# this file is managed by dry-rb/devtools project
|
3
2
|
|
4
|
-
|
3
|
+
# this file is synced from dry-rb/template-gem project
|
4
|
+
|
5
|
+
lib = File.expand_path("lib", __dir__)
|
5
6
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
-
require
|
7
|
+
require "dry/effects/version"
|
7
8
|
|
8
9
|
Gem::Specification.new do |spec|
|
9
|
-
spec.name =
|
10
|
+
spec.name = "dry-effects"
|
10
11
|
spec.authors = ["Nikita Shilnikov"]
|
11
12
|
spec.email = ["fg@flashgordon.ru"]
|
12
|
-
spec.license =
|
13
|
+
spec.license = "MIT"
|
13
14
|
spec.version = Dry::Effects::VERSION.dup
|
14
15
|
|
15
16
|
spec.summary = "Algebraic effects"
|
16
17
|
spec.description = spec.summary
|
17
|
-
spec.homepage =
|
18
|
+
spec.homepage = "https://dry-rb.org/gems/dry-effects"
|
18
19
|
spec.files = Dir["CHANGELOG.md", "LICENSE", "README.md", "dry-effects.gemspec", "lib/**/*"]
|
19
|
-
spec.bindir =
|
20
|
+
spec.bindir = "bin"
|
20
21
|
spec.executables = []
|
21
|
-
spec.require_paths = [
|
22
|
+
spec.require_paths = ["lib"]
|
22
23
|
|
23
|
-
spec.metadata[
|
24
|
-
spec.metadata[
|
25
|
-
spec.metadata[
|
26
|
-
spec.metadata[
|
24
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
25
|
+
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-effects/blob/main/CHANGELOG.md"
|
26
|
+
spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-effects"
|
27
|
+
spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-effects/issues"
|
27
28
|
|
28
|
-
spec.required_ruby_version = ">= 2.
|
29
|
+
spec.required_ruby_version = ">= 2.7.0"
|
29
30
|
|
30
31
|
# to update dependencies edit project.yml
|
31
32
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
32
33
|
spec.add_runtime_dependency "dry-container", "~> 0.7", ">= 0.7.2"
|
33
|
-
spec.add_runtime_dependency "dry-core", "~> 0.
|
34
|
-
spec.add_runtime_dependency "dry-equalizer", "~> 0.2", ">= 0.2.2"
|
34
|
+
spec.add_runtime_dependency "dry-core", "~> 0.9", ">= 0.9"
|
35
35
|
spec.add_runtime_dependency "dry-inflector", "~> 0.1", ">= 0.1.2"
|
36
36
|
spec.add_runtime_dependency "dry-initializer", "~> 3.0"
|
37
37
|
|
data/lib/dry/effects/all.rb
CHANGED
data/lib/dry/effects/effect.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -11,9 +11,11 @@ module Dry
|
|
11
11
|
Await = Effect.new(type: :async, name: :await)
|
12
12
|
|
13
13
|
def initialize
|
14
|
+
super
|
15
|
+
|
14
16
|
module_eval do
|
15
17
|
define_method(:async) { |&block| ::Dry::Effects.yield(Async.(block)) }
|
16
|
-
define_method(:await) {
|
18
|
+
define_method(:await) { ::Dry::Effects.yield(Await.(_1)) }
|
17
19
|
end
|
18
20
|
end
|
19
21
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -11,6 +11,8 @@ module Dry
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(scope = nil, shared: false, **kw)
|
14
|
+
super()
|
15
|
+
|
14
16
|
if !kw.empty?
|
15
17
|
scope, as = kw.to_a[0]
|
16
18
|
elsif scope.is_a?(::Hash)
|
@@ -25,16 +27,10 @@ module Dry
|
|
25
27
|
scope: scope
|
26
28
|
)
|
27
29
|
|
28
|
-
|
29
|
-
key = method(:shared_cache_key)
|
30
|
-
else
|
31
|
-
key = method(:cache_key)
|
32
|
-
end
|
33
|
-
|
34
|
-
methods = Array(as)
|
30
|
+
key = key(shared)
|
35
31
|
|
36
32
|
module_eval do
|
37
|
-
|
33
|
+
Array(as).each do |meth|
|
38
34
|
define_method(meth) do |*args, &block|
|
39
35
|
if block
|
40
36
|
eff = fetch_or_store.(key.(self, args), block)
|
@@ -48,6 +44,14 @@ module Dry
|
|
48
44
|
end
|
49
45
|
end
|
50
46
|
|
47
|
+
def key(shared)
|
48
|
+
if shared
|
49
|
+
method(:shared_cache_key)
|
50
|
+
else
|
51
|
+
method(:cache_key)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
51
55
|
def shared_cache_key(_, args, method: Undefined)
|
52
56
|
if Undefined.equal?(method)
|
53
57
|
args
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -11,6 +11,8 @@ module Dry
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(id)
|
14
|
+
super()
|
15
|
+
|
14
16
|
get = CmpEffect.new(type: :cmp, name: :get, id: id)
|
15
17
|
|
16
18
|
module_eval do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
|
+
require "dry/effects/constructors"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module Effects
|
@@ -18,6 +18,8 @@ module Dry
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def initialize(**options)
|
21
|
+
super()
|
22
|
+
|
21
23
|
module_eval do
|
22
24
|
define_method(:current_time) do |opts = EMPTY_HASH|
|
23
25
|
round = opts.fetch(:round, Undefined)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -11,6 +11,8 @@ module Dry
|
|
11
11
|
Wait = Effect.new(type: :defer, name: :wait)
|
12
12
|
|
13
13
|
def initialize
|
14
|
+
super
|
15
|
+
|
14
16
|
module_eval do
|
15
17
|
define_method(:defer) do |executor: Undefined, &block|
|
16
18
|
::Dry::Effects.yield(Defer.(block, executor))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -9,6 +9,8 @@ module Dry
|
|
9
9
|
Read = Effect.new(type: :env, name: :read)
|
10
10
|
|
11
11
|
def initialize(*args, **kwargs)
|
12
|
+
super()
|
13
|
+
|
12
14
|
readers = args.zip(args) + kwargs.to_a
|
13
15
|
|
14
16
|
module_eval do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -9,6 +9,8 @@ module Dry
|
|
9
9
|
Fork = Effect.new(type: :fork)
|
10
10
|
|
11
11
|
def initialize
|
12
|
+
super
|
13
|
+
|
12
14
|
module_eval(<<~RUBY, __FILE__, __LINE__ + 1)
|
13
15
|
def fork
|
14
16
|
yield(::Dry::Effects.yield(Fork))
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -11,6 +11,8 @@ module Dry
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(dependency)
|
14
|
+
super()
|
15
|
+
|
14
16
|
lookup = ImplicitEffect.new(type: :implicit, dependency: dependency)
|
15
17
|
|
16
18
|
module_eval do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -11,6 +11,8 @@ module Dry
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def initialize(scope = :default)
|
14
|
+
super()
|
15
|
+
|
14
16
|
interrupt = InterruptEffect.new(type: :interrupt, scope: scope)
|
15
17
|
|
16
18
|
module_eval do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -12,6 +12,8 @@ module Dry
|
|
12
12
|
Locked = Effect.new(type: :lock, name: :locked?)
|
13
13
|
|
14
14
|
def initialize
|
15
|
+
super
|
16
|
+
|
15
17
|
module_eval do
|
16
18
|
define_method(:lock) do |key, meta: Undefined, &block|
|
17
19
|
if block
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -10,8 +10,10 @@ module Dry
|
|
10
10
|
Join = Effect.new(type: :parallel, name: :join)
|
11
11
|
|
12
12
|
def initialize
|
13
|
+
super
|
14
|
+
|
13
15
|
define_method(:par) { |&block| ::Dry::Effects.yield(Par).(&block) }
|
14
|
-
define_method(:join) {
|
16
|
+
define_method(:join) { ::Dry::Effects.yield(Join.payload(_1)) }
|
15
17
|
end
|
16
18
|
end
|
17
19
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -9,6 +9,8 @@ module Dry
|
|
9
9
|
Rand = Effect.new(type: :random, name: :rand)
|
10
10
|
|
11
11
|
def initialize
|
12
|
+
super
|
13
|
+
|
12
14
|
module_eval do
|
13
15
|
define_method(:rand) { |n = nil| ::Dry::Effects.yield(Rand.payload(n)) }
|
14
16
|
end
|
@@ -1,23 +1,43 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
|
+
require "dry/effects/constructors"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module Effects
|
8
8
|
module Effects
|
9
9
|
class Resolve < ::Module
|
10
|
+
DependencyNameInvalid = Class.new(StandardError)
|
11
|
+
|
12
|
+
VALID_NAME = /([a-z_][a-zA-Z_0-9]*)$/.freeze
|
13
|
+
|
10
14
|
Resolve = Effect.new(type: :resolve)
|
11
15
|
|
12
|
-
Constructors.register(:Resolve) {
|
16
|
+
Constructors.register(:Resolve) { Resolve.(_1) }
|
13
17
|
|
14
18
|
def initialize(*keys, **aliases)
|
19
|
+
super()
|
20
|
+
|
21
|
+
keys_aliased = keys.map { name_for(_1) }.zip(keys)
|
15
22
|
module_eval do
|
16
|
-
(
|
23
|
+
(keys_aliased + aliases.to_a).each do |name, key|
|
17
24
|
define_method(name) { |&block| ::Dry::Effects.yield(Resolve.(key), &block) }
|
18
25
|
end
|
19
26
|
end
|
20
27
|
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
# similar approach in dry-auto_inject https://github.com/dry-rb/dry-auto_inject/blob/master/lib/dry/auto_inject/dependency_map.rb#L42
|
32
|
+
def name_for(identifier)
|
33
|
+
matched = VALID_NAME.match(identifier.to_s)
|
34
|
+
unless matched
|
35
|
+
raise DependencyNameInvalid,
|
36
|
+
"name +#{identifier}+ is not a valid Ruby identifier"
|
37
|
+
end
|
38
|
+
|
39
|
+
matched[0]
|
40
|
+
end
|
21
41
|
end
|
22
42
|
end
|
23
43
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
|
+
require "dry/effects/constructors"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module Effects
|
@@ -18,6 +18,8 @@ module Dry
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def initialize
|
21
|
+
super
|
22
|
+
|
21
23
|
module_eval do
|
22
24
|
define_method(:repeat) do |scope|
|
23
25
|
effect = Retry.new(type: :retry, scope: scope)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
|
+
require "dry/effects/constructors"
|
5
5
|
|
6
6
|
module Dry
|
7
7
|
module Effects
|
@@ -22,6 +22,8 @@ module Dry
|
|
22
22
|
end
|
23
23
|
|
24
24
|
def initialize(scope, default: Undefined, writer: true, as: scope)
|
25
|
+
super()
|
26
|
+
|
25
27
|
read = State.new(type: :state, name: :read, scope: scope)
|
26
28
|
write = State.new(type: :state, name: :write, scope: scope)
|
27
29
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -13,6 +13,8 @@ module Dry
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def initialize(scope)
|
16
|
+
super()
|
17
|
+
|
16
18
|
timeout = TimeoutEffect.new(type: :timeout, name: :timeout, scope: scope)
|
17
19
|
|
18
20
|
module_eval do
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
3
|
+
require "dry/effects/effect"
|
4
4
|
|
5
5
|
module Dry
|
6
6
|
module Effects
|
@@ -9,6 +9,8 @@ module Dry
|
|
9
9
|
Timestamp = Effect.new(type: :timestamp)
|
10
10
|
|
11
11
|
def initialize(options = EMPTY_HASH)
|
12
|
+
super()
|
13
|
+
|
12
14
|
module_eval do
|
13
15
|
define_method(:timestamp) do |round: Undefined|
|
14
16
|
round_to = Undefined.coalesce(round, options.fetch(:round, Undefined))
|
data/lib/dry/effects/errors.rb
CHANGED
@@ -20,7 +20,7 @@ module Dry
|
|
20
20
|
super(
|
21
21
|
Undefined.default(message) {
|
22
22
|
"Effect #{effect.inspect} not handled. "\
|
23
|
-
|
23
|
+
"Effects must be wrapped with corresponding handlers"
|
24
24
|
}
|
25
25
|
)
|
26
26
|
end
|
@@ -32,7 +32,7 @@ module Dry
|
|
32
32
|
class MissingStateError < UnhandledEffectError
|
33
33
|
def initialize(effect)
|
34
34
|
message = "Value of +#{effect.scope}+ is not set, "\
|
35
|
-
|
35
|
+
"you need to provide value with an effect handler"
|
36
36
|
|
37
37
|
super(effect, message)
|
38
38
|
end
|
@@ -46,8 +46,8 @@ module Dry
|
|
46
46
|
|
47
47
|
def initialize(effect)
|
48
48
|
message = "+#{effect.scope}+ is not defined, you need to assign it first "\
|
49
|
-
|
50
|
-
|
49
|
+
"by using a writer, passing initial value to the handler, or "\
|
50
|
+
"providing a fallback value"
|
51
51
|
|
52
52
|
super(message)
|
53
53
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
3
|
+
require "concurrent/map"
|
4
|
+
require "dry/auto_inject/strategies/constructor"
|
5
|
+
require "dry/effects/effects/resolve"
|
6
6
|
|
7
7
|
module Dry
|
8
8
|
module Effects
|
@@ -24,7 +24,7 @@ module Dry
|
|
24
24
|
class Static < Base
|
25
25
|
private
|
26
26
|
|
27
|
-
def define_readers(dynamic
|
27
|
+
def define_readers(dynamic: false)
|
28
28
|
map = dependency_map.to_h
|
29
29
|
cache = ::Concurrent::Map.new
|
30
30
|
instance_mod.class_exec do
|
@@ -49,7 +49,7 @@ module Dry
|
|
49
49
|
class Dynamic < Static
|
50
50
|
private
|
51
51
|
|
52
|
-
def define_readers(dynamic
|
52
|
+
def define_readers(dynamic: true)
|
53
53
|
super
|
54
54
|
end
|
55
55
|
end
|