dry-effects 0.2.0 → 0.3.1
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 +19 -0
- data/LICENSE +1 -1
- data/README.md +4 -4
- data/dry-effects.gemspec +3 -3
- data/lib/dry/effects/all.rb +1 -5
- data/lib/dry/effects/constructors.rb +29 -3
- data/lib/dry/effects/container.rb +1 -3
- data/lib/dry/effects/effect.rb +0 -3
- data/lib/dry/effects/effects/async.rb +1 -3
- data/lib/dry/effects/effects/cache.rb +0 -2
- data/lib/dry/effects/effects/cmp.rb +0 -2
- data/lib/dry/effects/effects/current_time.rb +0 -11
- data/lib/dry/effects/effects/defer.rb +0 -2
- data/lib/dry/effects/effects/env.rb +0 -2
- data/lib/dry/effects/effects/fork.rb +0 -2
- data/lib/dry/effects/effects/implicit.rb +0 -2
- data/lib/dry/effects/effects/interrupt.rb +0 -2
- data/lib/dry/effects/effects/lock.rb +0 -2
- data/lib/dry/effects/effects/parallel.rb +1 -3
- data/lib/dry/effects/effects/random.rb +0 -2
- data/lib/dry/effects/effects/reader.rb +0 -2
- data/lib/dry/effects/effects/resolve.rb +2 -7
- data/lib/dry/effects/effects/retry.rb +0 -7
- data/lib/dry/effects/effects/state.rb +0 -11
- data/lib/dry/effects/effects/timeout.rb +0 -2
- data/lib/dry/effects/effects/timestamp.rb +0 -2
- data/lib/dry/effects/errors.rb +1 -1
- data/lib/dry/effects/extensions/auto_inject.rb +3 -4
- data/lib/dry/effects/extensions/system.rb +4 -4
- data/lib/dry/effects/extensions.rb +0 -2
- data/lib/dry/effects/frame.rb +3 -15
- data/lib/dry/effects/halt.rb +0 -2
- data/lib/dry/effects/handler.rb +2 -10
- data/lib/dry/effects/inflector.rb +0 -2
- data/lib/dry/effects/initializer.rb +2 -4
- data/lib/dry/effects/instruction.rb +1 -1
- data/lib/dry/effects/instructions/execute.rb +0 -6
- data/lib/dry/effects/instructions/raise.rb +0 -6
- data/lib/dry/effects/instructions.rb +15 -0
- data/lib/dry/effects/provider/class_interface.rb +1 -4
- data/lib/dry/effects/provider.rb +0 -3
- data/lib/dry/effects/providers/async.rb +0 -3
- data/lib/dry/effects/providers/cache.rb +0 -3
- data/lib/dry/effects/providers/cmp.rb +0 -2
- data/lib/dry/effects/providers/current_time/time_generators.rb +1 -3
- data/lib/dry/effects/providers/current_time.rb +1 -3
- data/lib/dry/effects/providers/defer.rb +1 -3
- data/lib/dry/effects/providers/env.rb +1 -4
- data/lib/dry/effects/providers/fork.rb +0 -3
- data/lib/dry/effects/providers/implicit.rb +0 -2
- data/lib/dry/effects/providers/interrupt.rb +0 -4
- data/lib/dry/effects/providers/lock.rb +1 -5
- data/lib/dry/effects/providers/parallel.rb +0 -2
- data/lib/dry/effects/providers/random.rb +0 -2
- data/lib/dry/effects/providers/reader.rb +0 -2
- data/lib/dry/effects/providers/resolve.rb +0 -3
- data/lib/dry/effects/providers/retry.rb +0 -3
- data/lib/dry/effects/providers/state.rb +0 -3
- data/lib/dry/effects/providers/timeout.rb +0 -2
- data/lib/dry/effects/providers/timestamp.rb +2 -5
- data/lib/dry/effects/stack.rb +3 -7
- data/lib/dry/effects/version.rb +1 -1
- data/lib/dry/effects.rb +32 -7
- data/lib/dry-effects.rb +1 -0
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: abc06cbff85f6545a5b05ebeb778737a316fadf9222c9e98c015e05a91e16cdf
|
4
|
+
data.tar.gz: 7023b7bc8b4807c957f561706f9cd8215cc181cf37de06ae218ec48fac48f9da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f240e7f7cf989b27dc384bf2ec84f6a2b021c8f9b76694167a493140d4beb0dfed96fcad700681154362b2cb8569051baf07e849993d8744b91ec24443ba32af
|
7
|
+
data.tar.gz: 60185bafd1a5f68a771c9bcd971412ca09e4cf5b81da8ea659706b713b1a55a67989ae4f59d8ae1c57adbf006731416a3f9e4c78254637a73e7a24ccd03c7203
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,24 @@
|
|
1
1
|
<!--- DO NOT EDIT THIS FILE - IT'S AUTOMATICALLY GENERATED VIA DEVTOOLS --->
|
2
2
|
|
3
|
+
## 0.3.1 2022-10-17
|
4
|
+
|
5
|
+
|
6
|
+
### Changed
|
7
|
+
|
8
|
+
- Add missing zeitwerk loader (@flash-gordon)
|
9
|
+
|
10
|
+
[Compare v0.3.0...v0.3.1](https://github.com/dry-rb/dry-effects/compare/v0.3.0...v0.3.1)
|
11
|
+
|
12
|
+
## 0.3.0 2022-10-15
|
13
|
+
|
14
|
+
|
15
|
+
### Changed
|
16
|
+
|
17
|
+
- Use zeitwerk for auto-loading (@flash-gordon)
|
18
|
+
- Remove dependency on dry-configurable (@flash-gordon)
|
19
|
+
|
20
|
+
[Compare v0.2.0...v0.3.0](https://github.com/dry-rb/dry-effects/compare/v0.2.0...v0.3.0)
|
21
|
+
|
3
22
|
## 0.2.0 2021-09-12
|
4
23
|
|
5
24
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -8,10 +8,10 @@
|
|
8
8
|
# dry-effects [][chat]
|
9
9
|
|
10
10
|
[][gem]
|
11
|
-
[][actions]
|
12
12
|
[][codacy]
|
13
13
|
[][codacy]
|
14
|
-
[][inchpages]
|
15
15
|
|
16
16
|
## Links
|
17
17
|
|
@@ -22,8 +22,8 @@
|
|
22
22
|
|
23
23
|
This library officially supports the following Ruby versions:
|
24
24
|
|
25
|
-
* MRI `>= 2.
|
26
|
-
*
|
25
|
+
* MRI `>= 2.7.0`
|
26
|
+
* jruby `>= 9.3` (postponed until 2.7 is supported)
|
27
27
|
|
28
28
|
## License
|
29
29
|
|
data/dry-effects.gemspec
CHANGED
@@ -22,16 +22,16 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
24
|
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
25
|
-
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-effects/blob/
|
25
|
+
spec.metadata["changelog_uri"] = "https://github.com/dry-rb/dry-effects/blob/main/CHANGELOG.md"
|
26
26
|
spec.metadata["source_code_uri"] = "https://github.com/dry-rb/dry-effects"
|
27
27
|
spec.metadata["bug_tracker_uri"] = "https://github.com/dry-rb/dry-effects/issues"
|
28
28
|
|
29
|
-
spec.required_ruby_version = ">= 2.
|
29
|
+
spec.required_ruby_version = ">= 2.7.0"
|
30
30
|
|
31
31
|
# to update dependencies edit project.yml
|
32
32
|
spec.add_runtime_dependency "concurrent-ruby", "~> 1.0"
|
33
33
|
spec.add_runtime_dependency "dry-container", "~> 0.7", ">= 0.7.2"
|
34
|
-
spec.add_runtime_dependency "dry-core", "~> 0.
|
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
@@ -1,9 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "concurrent/map"
|
4
|
-
require "dry/effects/inflector"
|
5
|
-
require "dry/effects/handler"
|
6
|
-
|
7
3
|
module Dry
|
8
4
|
module Effects
|
9
5
|
default = %i[
|
@@ -40,7 +36,7 @@ module Dry
|
|
40
36
|
Providers.const_get(Inflector.camelize(key))
|
41
37
|
end
|
42
38
|
|
43
|
-
Handler.singleton_class.
|
39
|
+
Handler.singleton_class.define_method(class_name) do |*args, **kwargs|
|
44
40
|
::Dry::Effects.providers[key].mixin(*args, **kwargs)
|
45
41
|
end
|
46
42
|
end
|
@@ -3,9 +3,35 @@
|
|
3
3
|
module Dry
|
4
4
|
module Effects
|
5
5
|
module Constructors
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
extend self
|
7
|
+
|
8
|
+
# @api public
|
9
|
+
def CurrentTime(**kwargs)
|
10
|
+
if kwargs.empty?
|
11
|
+
Effects::CurrentTime::CurrentTime
|
12
|
+
else
|
13
|
+
Effects::CurrentTime::CurrentTime.(**kwargs)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# @api public
|
18
|
+
def Resolve(identifier)
|
19
|
+
Effects::Resolve::Resolve.(identifier)
|
20
|
+
end
|
21
|
+
|
22
|
+
# @api public
|
23
|
+
def Retry(scope)
|
24
|
+
Effects::Retry::Retry.new(type: :retry, scope: scope)
|
25
|
+
end
|
26
|
+
|
27
|
+
# @api public
|
28
|
+
def Read(scope)
|
29
|
+
Effects::State::State.new(type: :state, name: :read, scope: scope)
|
30
|
+
end
|
31
|
+
|
32
|
+
# @api public
|
33
|
+
def Write(scope, value)
|
34
|
+
Effects::State::State.new(type: :state, name: :write, scope: scope, payload: [value])
|
9
35
|
end
|
10
36
|
end
|
11
37
|
end
|
data/lib/dry/effects/effect.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/effect"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module Effects
|
7
5
|
module Effects
|
@@ -15,7 +13,7 @@ module Dry
|
|
15
13
|
|
16
14
|
module_eval do
|
17
15
|
define_method(:async) { |&block| ::Dry::Effects.yield(Async.(block)) }
|
18
|
-
define_method(:await) {
|
16
|
+
define_method(:await) { ::Dry::Effects.yield(Await.(_1)) }
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -1,22 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/effect"
|
4
|
-
require "dry/effects/constructors"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
module Effects
|
9
6
|
class CurrentTime < ::Module
|
10
7
|
CurrentTime = Effect.new(type: :current_time)
|
11
8
|
|
12
|
-
Constructors.register(:CurrentTime) do |**kwargs|
|
13
|
-
if kwargs.empty?
|
14
|
-
CurrentTime
|
15
|
-
else
|
16
|
-
CurrentTime.(**kwargs)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
9
|
def initialize(**options)
|
21
10
|
super()
|
22
11
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/effect"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module Effects
|
7
5
|
module Effects
|
@@ -13,7 +11,7 @@ module Dry
|
|
13
11
|
super
|
14
12
|
|
15
13
|
define_method(:par) { |&block| ::Dry::Effects.yield(Par).(&block) }
|
16
|
-
define_method(:join) {
|
14
|
+
define_method(:join) { ::Dry::Effects.yield(Join.payload(_1)) }
|
17
15
|
end
|
18
16
|
end
|
19
17
|
end
|
@@ -1,24 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/effect"
|
4
|
-
require "dry/effects/constructors"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
module Effects
|
9
6
|
class Resolve < ::Module
|
10
|
-
DependencyNameInvalid = Class.new(StandardError)
|
7
|
+
DependencyNameInvalid = ::Class.new(StandardError)
|
11
8
|
|
12
9
|
VALID_NAME = /([a-z_][a-zA-Z_0-9]*)$/.freeze
|
13
10
|
|
14
11
|
Resolve = Effect.new(type: :resolve)
|
15
12
|
|
16
|
-
Constructors.register(:Resolve) { |key| Resolve.(key) }
|
17
|
-
|
18
13
|
def initialize(*keys, **aliases)
|
19
14
|
super()
|
20
15
|
|
21
|
-
keys_aliased = keys.map {
|
16
|
+
keys_aliased = keys.map { name_for(_1) }.zip(keys)
|
22
17
|
module_eval do
|
23
18
|
(keys_aliased + aliases.to_a).each do |name, key|
|
24
19
|
define_method(name) { |&block| ::Dry::Effects.yield(Resolve.(key), &block) }
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/effect"
|
4
|
-
require "dry/effects/constructors"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
module Effects
|
@@ -13,10 +10,6 @@ module Dry
|
|
13
10
|
option :scope
|
14
11
|
end
|
15
12
|
|
16
|
-
Constructors.register(:Retry) do |scope|
|
17
|
-
Retry.new(type: :retry, scope: scope)
|
18
|
-
end
|
19
|
-
|
20
13
|
def initialize
|
21
14
|
super
|
22
15
|
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/effect"
|
4
|
-
require "dry/effects/constructors"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
module Effects
|
@@ -13,14 +10,6 @@ module Dry
|
|
13
10
|
option :scope
|
14
11
|
end
|
15
12
|
|
16
|
-
Constructors.register(:Read) do |scope|
|
17
|
-
State.new(type: :state, name: :read, scope: scope)
|
18
|
-
end
|
19
|
-
|
20
|
-
Constructors.register(:Write) do |scope, value|
|
21
|
-
State.new(type: :state, name: :write, scope: scope, payload: [value])
|
22
|
-
end
|
23
|
-
|
24
13
|
def initialize(scope, default: Undefined, writer: true, as: scope)
|
25
14
|
super()
|
26
15
|
|
data/lib/dry/effects/errors.rb
CHANGED
@@ -2,12 +2,11 @@
|
|
2
2
|
|
3
3
|
require "concurrent/map"
|
4
4
|
require "dry/auto_inject/strategies/constructor"
|
5
|
-
require "dry/effects/effects/resolve"
|
6
5
|
|
7
6
|
module Dry
|
8
7
|
module Effects
|
9
8
|
class DryAutoEffectsStrategies
|
10
|
-
extend Dry::Container::Mixin
|
9
|
+
extend ::Dry::Container::Mixin
|
11
10
|
|
12
11
|
class Base < AutoInject::Strategies::Constructor
|
13
12
|
private
|
@@ -24,7 +23,7 @@ module Dry
|
|
24
23
|
class Static < Base
|
25
24
|
private
|
26
25
|
|
27
|
-
def define_readers(dynamic
|
26
|
+
def define_readers(dynamic: false)
|
28
27
|
map = dependency_map.to_h
|
29
28
|
cache = ::Concurrent::Map.new
|
30
29
|
instance_mod.class_exec do
|
@@ -49,7 +48,7 @@ module Dry
|
|
49
48
|
class Dynamic < Static
|
50
49
|
private
|
51
50
|
|
52
|
-
def define_readers(dynamic
|
51
|
+
def define_readers(dynamic: true)
|
53
52
|
super
|
54
53
|
end
|
55
54
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/system
|
3
|
+
require "dry/system"
|
4
4
|
|
5
5
|
Dry::Effects.load_extensions(:auto_inject)
|
6
6
|
|
@@ -10,7 +10,7 @@ module Dry
|
|
10
10
|
class AutoRegistrar < ::Dry::System::AutoRegistrar
|
11
11
|
# Always memoize and freeze registered components
|
12
12
|
def call(component_dir)
|
13
|
-
|
13
|
+
component_dir.each_component do |component|
|
14
14
|
next unless register_component?(component)
|
15
15
|
|
16
16
|
container.register(component.key, memoize: true) { component.instance.freeze }
|
@@ -19,7 +19,7 @@ module Dry
|
|
19
19
|
end
|
20
20
|
|
21
21
|
class Container < ::Dry::System::Container
|
22
|
-
|
22
|
+
setting :auto_registrar, default: AutoRegistrar
|
23
23
|
|
24
24
|
def self.injector(effects: true, **kwargs)
|
25
25
|
if effects
|
@@ -35,7 +35,7 @@ module Dry
|
|
35
35
|
super
|
36
36
|
|
37
37
|
# Force all components to load
|
38
|
-
each_key {
|
38
|
+
each_key { resolve(_1) }
|
39
39
|
self
|
40
40
|
end
|
41
41
|
end
|
data/lib/dry/effects/frame.rb
CHANGED
@@ -1,11 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "fiber"
|
4
|
-
require "dry/effects/initializer"
|
5
|
-
require "dry/effects/effect"
|
6
|
-
require "dry/effects/errors"
|
7
|
-
require "dry/effects/stack"
|
8
|
-
require "dry/effects/instructions/raise"
|
9
4
|
|
10
5
|
module Dry
|
11
6
|
module Effects
|
@@ -62,16 +57,9 @@ module Dry
|
|
62
57
|
|
63
58
|
private
|
64
59
|
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
fiber.raise(error)
|
69
|
-
end
|
70
|
-
else
|
71
|
-
# @api private
|
72
|
-
def raise_in_fiber(fiber, error)
|
73
|
-
fiber.resume(Instructions.Raise(error))
|
74
|
-
end
|
60
|
+
# @api private
|
61
|
+
def raise_in_fiber(fiber, error)
|
62
|
+
fiber.raise(error)
|
75
63
|
end
|
76
64
|
end
|
77
65
|
|
data/lib/dry/effects/halt.rb
CHANGED
data/lib/dry/effects/handler.rb
CHANGED
@@ -12,16 +12,8 @@ module Dry
|
|
12
12
|
@frame = Frame.new(provider)
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
def call(...)
|
18
|
-
frame.(...)
|
19
|
-
end
|
20
|
-
RUBY
|
21
|
-
else
|
22
|
-
def call(*args, &block)
|
23
|
-
frame.(*args, &block)
|
24
|
-
end
|
15
|
+
def call(...)
|
16
|
+
frame.(...)
|
25
17
|
end
|
26
18
|
|
27
19
|
def to_s
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/initializer"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module Effects
|
7
5
|
module Initializer
|
@@ -29,7 +27,7 @@ module Dry
|
|
29
27
|
def params_arity
|
30
28
|
@params_arity ||= dry_initializer
|
31
29
|
.definitions
|
32
|
-
.reject {
|
30
|
+
.reject { _2.option }
|
33
31
|
.size
|
34
32
|
end
|
35
33
|
|
@@ -44,7 +42,7 @@ module Dry
|
|
44
42
|
def __define_with__
|
45
43
|
seq_names = dry_initializer
|
46
44
|
.definitions
|
47
|
-
.reject {
|
45
|
+
.reject { _2.option }
|
48
46
|
.keys
|
49
47
|
.join(", ")
|
50
48
|
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/instruction"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module Effects
|
7
5
|
module Instructions
|
@@ -17,10 +15,6 @@ module Dry
|
|
17
15
|
block.call
|
18
16
|
end
|
19
17
|
end
|
20
|
-
|
21
|
-
def self.Execute(&block)
|
22
|
-
Execute.new(block)
|
23
|
-
end
|
24
18
|
end
|
25
19
|
end
|
26
20
|
end
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/instruction"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module Effects
|
7
5
|
module Instructions
|
@@ -17,10 +15,6 @@ module Dry
|
|
17
15
|
raise error
|
18
16
|
end
|
19
17
|
end
|
20
|
-
|
21
|
-
def self.Raise(error)
|
22
|
-
Raise.new(error)
|
23
|
-
end
|
24
18
|
end
|
25
19
|
end
|
26
20
|
end
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/core/class_attributes"
|
4
|
-
require "dry/effects/frame"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
class Provider
|
@@ -15,7 +12,7 @@ module Dry
|
|
15
12
|
@effects = ::Hash.new do |es, type|
|
16
13
|
@mutex.synchronize do
|
17
14
|
es.fetch(type) do
|
18
|
-
es[type] = Class.new(Provider).tap do |provider|
|
15
|
+
es[type] = ::Class.new(Provider).tap do |provider|
|
19
16
|
provider.type type
|
20
17
|
end
|
21
18
|
end
|
data/lib/dry/effects/provider.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/provider"
|
4
|
-
|
5
3
|
module Dry
|
6
4
|
module Effects
|
7
5
|
module Providers
|
8
6
|
class CurrentTime < Provider[:current_time]
|
9
|
-
module
|
7
|
+
module TimeGenerators
|
10
8
|
FixedTimeGenerator = lambda do
|
11
9
|
time = ::Time.now
|
12
10
|
lambda do |refresh: false, **|
|
@@ -1,15 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "time"
|
4
|
-
require "dry/effects/provider"
|
5
|
-
require "dry/effects/providers/current_time/time_generators"
|
6
4
|
|
7
5
|
module Dry
|
8
6
|
module Effects
|
9
7
|
module Providers
|
10
8
|
class CurrentTime < Provider[:current_time]
|
11
9
|
include ::Dry::Equalizer(:fixed, :round, inspect: false)
|
12
|
-
include
|
10
|
+
include TimeGenerators
|
13
11
|
|
14
12
|
Locate = Effect.new(type: :current_time, name: :locate)
|
15
13
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "concurrent/promise"
|
4
|
-
require "dry/effects/provider"
|
5
|
-
require "dry/effects/frame"
|
6
4
|
|
7
5
|
module Dry
|
8
6
|
module Effects
|
@@ -65,7 +63,7 @@ module Dry
|
|
65
63
|
|
66
64
|
def dup
|
67
65
|
if defined? @later_calls
|
68
|
-
super.tap {
|
66
|
+
super.tap { _1.instance_variable_set(:@later_calls, EMPTY_ARRAY) }
|
69
67
|
else
|
70
68
|
super
|
71
69
|
end
|
@@ -1,8 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/provider"
|
4
|
-
require "dry/effects/instructions/raise"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
module Providers
|
@@ -67,7 +64,7 @@ module Dry
|
|
67
64
|
end
|
68
65
|
|
69
66
|
def key?(key)
|
70
|
-
values.key?(key) || key.is_a?(::String) && ::ENV.key?(key) || parent.key?(key)
|
67
|
+
values.key?(key) || (key.is_a?(::String) && ::ENV.key?(key)) || parent.key?(key)
|
71
68
|
end
|
72
69
|
end
|
73
70
|
end
|
@@ -1,9 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/core/equalizer"
|
4
|
-
require "dry/effects/provider"
|
5
|
-
require "dry/effects/initializer"
|
6
|
-
|
7
3
|
module Dry
|
8
4
|
module Effects
|
9
5
|
module Providers
|
@@ -98,7 +94,7 @@ module Dry
|
|
98
94
|
with_backend(backend_replace) do
|
99
95
|
yield
|
100
96
|
ensure
|
101
|
-
owned.each {
|
97
|
+
owned.each { unlock(_1) }
|
102
98
|
end
|
103
99
|
end
|
104
100
|
|
@@ -1,14 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/provider"
|
4
|
-
require "dry/effects/providers/current_time"
|
5
|
-
|
6
3
|
module Dry
|
7
4
|
module Effects
|
8
5
|
module Providers
|
9
6
|
class Timestamp < Provider[:timestamp]
|
10
|
-
include Dry::Equalizer(:round)
|
11
|
-
include CurrentTime::
|
7
|
+
include ::Dry::Equalizer(:round)
|
8
|
+
include CurrentTime::TimeGenerators
|
12
9
|
|
13
10
|
Locate = Effect.new(type: :timestamp, name: :locate)
|
14
11
|
|
data/lib/dry/effects/stack.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "dry/effects/initializer"
|
4
|
-
require "dry/effects/effect"
|
5
|
-
require "dry/effects/instructions/raise"
|
6
|
-
|
7
3
|
module Dry
|
8
4
|
module Effects
|
9
5
|
class Stack
|
10
6
|
extend Initializer
|
11
|
-
include Enumerable
|
12
|
-
include Dry::Equalizer(:providers)
|
7
|
+
include ::Enumerable
|
8
|
+
include ::Dry::Equalizer(:providers)
|
13
9
|
|
14
10
|
param :providers, default: -> { [] }
|
15
11
|
|
@@ -35,7 +31,7 @@ module Dry
|
|
35
31
|
end
|
36
32
|
|
37
33
|
def provider(effect)
|
38
|
-
find {
|
34
|
+
find { _1.provide?(effect) }
|
39
35
|
end
|
40
36
|
|
41
37
|
def each(&block)
|
data/lib/dry/effects/version.rb
CHANGED
data/lib/dry/effects.rb
CHANGED
@@ -1,21 +1,45 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "
|
4
|
-
require "
|
3
|
+
require "zeitwerk"
|
4
|
+
require "concurrent/map"
|
5
|
+
|
6
|
+
require "dry/core"
|
7
|
+
require "dry/container"
|
8
|
+
require "dry/inflector"
|
9
|
+
require "dry/initializer"
|
10
|
+
|
5
11
|
require "dry/effects/container"
|
12
|
+
require "dry/effects/inflector"
|
13
|
+
require "dry/effects/initializer"
|
14
|
+
require "dry/effects/extensions"
|
6
15
|
require "dry/effects/errors"
|
7
|
-
require "dry/effects/
|
16
|
+
require "dry/effects/version"
|
8
17
|
|
9
18
|
module Dry
|
10
19
|
module Effects
|
11
20
|
include Core::Constants
|
12
21
|
|
13
|
-
class Error < StandardError; end
|
22
|
+
class Error < ::StandardError; end
|
14
23
|
|
15
24
|
@effects = Container.new
|
16
25
|
@providers = Container.new
|
17
26
|
|
18
27
|
class << self
|
28
|
+
# @api private
|
29
|
+
def loader
|
30
|
+
@loader ||= ::Zeitwerk::Loader.new.tap do |loader|
|
31
|
+
root = ::File.expand_path("..", __dir__)
|
32
|
+
loader.tag = "dry-effects"
|
33
|
+
loader.inflector = ::Zeitwerk::GemInflector.new("#{root}/dry-effects.rb")
|
34
|
+
loader.push_dir(root)
|
35
|
+
loader.ignore(
|
36
|
+
"#{root}/dry-effects.rb",
|
37
|
+
"#{root}/dry/effects/{all,error,extensions,inflector,initializer,version}.rb",
|
38
|
+
"#{root}/dry/effects/extensions/**/*.rb",
|
39
|
+
)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
19
43
|
attr_reader :effects, :providers
|
20
44
|
|
21
45
|
# Handle an effect.
|
@@ -62,12 +86,13 @@ module Dry
|
|
62
86
|
# @param [Array<Object>] args Handler parameters
|
63
87
|
# @return [Handler]
|
64
88
|
# @api public
|
65
|
-
def [](
|
66
|
-
Handler.new(
|
89
|
+
def [](...)
|
90
|
+
Handler.new(...)
|
67
91
|
end
|
68
92
|
end
|
93
|
+
|
94
|
+
loader.setup
|
69
95
|
end
|
70
96
|
end
|
71
97
|
|
72
98
|
require "dry/effects/all"
|
73
|
-
require "dry/effects/extensions"
|
data/lib/dry-effects.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "dry/effects"
|
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.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nikita Shilnikov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-10-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: concurrent-ruby
|
@@ -50,20 +50,20 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - "~>"
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: '0.
|
53
|
+
version: '0.9'
|
54
54
|
- - ">="
|
55
55
|
- !ruby/object:Gem::Version
|
56
|
-
version: '0.
|
56
|
+
version: '0.9'
|
57
57
|
type: :runtime
|
58
58
|
prerelease: false
|
59
59
|
version_requirements: !ruby/object:Gem::Requirement
|
60
60
|
requirements:
|
61
61
|
- - "~>"
|
62
62
|
- !ruby/object:Gem::Version
|
63
|
-
version: '0.
|
63
|
+
version: '0.9'
|
64
64
|
- - ">="
|
65
65
|
- !ruby/object:Gem::Version
|
66
|
-
version: '0.
|
66
|
+
version: '0.9'
|
67
67
|
- !ruby/object:Gem::Dependency
|
68
68
|
name: dry-inflector
|
69
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,6 +151,7 @@ files:
|
|
151
151
|
- LICENSE
|
152
152
|
- README.md
|
153
153
|
- dry-effects.gemspec
|
154
|
+
- lib/dry-effects.rb
|
154
155
|
- lib/dry/effects.rb
|
155
156
|
- lib/dry/effects/all.rb
|
156
157
|
- lib/dry/effects/constructors.rb
|
@@ -186,6 +187,7 @@ files:
|
|
186
187
|
- lib/dry/effects/inflector.rb
|
187
188
|
- lib/dry/effects/initializer.rb
|
188
189
|
- lib/dry/effects/instruction.rb
|
190
|
+
- lib/dry/effects/instructions.rb
|
189
191
|
- lib/dry/effects/instructions/execute.rb
|
190
192
|
- lib/dry/effects/instructions/raise.rb
|
191
193
|
- lib/dry/effects/provider.rb
|
@@ -216,7 +218,7 @@ licenses:
|
|
216
218
|
- MIT
|
217
219
|
metadata:
|
218
220
|
allowed_push_host: https://rubygems.org
|
219
|
-
changelog_uri: https://github.com/dry-rb/dry-effects/blob/
|
221
|
+
changelog_uri: https://github.com/dry-rb/dry-effects/blob/main/CHANGELOG.md
|
220
222
|
source_code_uri: https://github.com/dry-rb/dry-effects
|
221
223
|
bug_tracker_uri: https://github.com/dry-rb/dry-effects/issues
|
222
224
|
post_install_message:
|
@@ -227,7 +229,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
227
229
|
requirements:
|
228
230
|
- - ">="
|
229
231
|
- !ruby/object:Gem::Version
|
230
|
-
version: 2.
|
232
|
+
version: 2.7.0
|
231
233
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
232
234
|
requirements:
|
233
235
|
- - ">="
|