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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +19 -0
  3. data/LICENSE +1 -1
  4. data/README.md +4 -4
  5. data/dry-effects.gemspec +3 -3
  6. data/lib/dry/effects/all.rb +1 -5
  7. data/lib/dry/effects/constructors.rb +29 -3
  8. data/lib/dry/effects/container.rb +1 -3
  9. data/lib/dry/effects/effect.rb +0 -3
  10. data/lib/dry/effects/effects/async.rb +1 -3
  11. data/lib/dry/effects/effects/cache.rb +0 -2
  12. data/lib/dry/effects/effects/cmp.rb +0 -2
  13. data/lib/dry/effects/effects/current_time.rb +0 -11
  14. data/lib/dry/effects/effects/defer.rb +0 -2
  15. data/lib/dry/effects/effects/env.rb +0 -2
  16. data/lib/dry/effects/effects/fork.rb +0 -2
  17. data/lib/dry/effects/effects/implicit.rb +0 -2
  18. data/lib/dry/effects/effects/interrupt.rb +0 -2
  19. data/lib/dry/effects/effects/lock.rb +0 -2
  20. data/lib/dry/effects/effects/parallel.rb +1 -3
  21. data/lib/dry/effects/effects/random.rb +0 -2
  22. data/lib/dry/effects/effects/reader.rb +0 -2
  23. data/lib/dry/effects/effects/resolve.rb +2 -7
  24. data/lib/dry/effects/effects/retry.rb +0 -7
  25. data/lib/dry/effects/effects/state.rb +0 -11
  26. data/lib/dry/effects/effects/timeout.rb +0 -2
  27. data/lib/dry/effects/effects/timestamp.rb +0 -2
  28. data/lib/dry/effects/errors.rb +1 -1
  29. data/lib/dry/effects/extensions/auto_inject.rb +3 -4
  30. data/lib/dry/effects/extensions/system.rb +4 -4
  31. data/lib/dry/effects/extensions.rb +0 -2
  32. data/lib/dry/effects/frame.rb +3 -15
  33. data/lib/dry/effects/halt.rb +0 -2
  34. data/lib/dry/effects/handler.rb +2 -10
  35. data/lib/dry/effects/inflector.rb +0 -2
  36. data/lib/dry/effects/initializer.rb +2 -4
  37. data/lib/dry/effects/instruction.rb +1 -1
  38. data/lib/dry/effects/instructions/execute.rb +0 -6
  39. data/lib/dry/effects/instructions/raise.rb +0 -6
  40. data/lib/dry/effects/instructions.rb +15 -0
  41. data/lib/dry/effects/provider/class_interface.rb +1 -4
  42. data/lib/dry/effects/provider.rb +0 -3
  43. data/lib/dry/effects/providers/async.rb +0 -3
  44. data/lib/dry/effects/providers/cache.rb +0 -3
  45. data/lib/dry/effects/providers/cmp.rb +0 -2
  46. data/lib/dry/effects/providers/current_time/time_generators.rb +1 -3
  47. data/lib/dry/effects/providers/current_time.rb +1 -3
  48. data/lib/dry/effects/providers/defer.rb +1 -3
  49. data/lib/dry/effects/providers/env.rb +1 -4
  50. data/lib/dry/effects/providers/fork.rb +0 -3
  51. data/lib/dry/effects/providers/implicit.rb +0 -2
  52. data/lib/dry/effects/providers/interrupt.rb +0 -4
  53. data/lib/dry/effects/providers/lock.rb +1 -5
  54. data/lib/dry/effects/providers/parallel.rb +0 -2
  55. data/lib/dry/effects/providers/random.rb +0 -2
  56. data/lib/dry/effects/providers/reader.rb +0 -2
  57. data/lib/dry/effects/providers/resolve.rb +0 -3
  58. data/lib/dry/effects/providers/retry.rb +0 -3
  59. data/lib/dry/effects/providers/state.rb +0 -3
  60. data/lib/dry/effects/providers/timeout.rb +0 -2
  61. data/lib/dry/effects/providers/timestamp.rb +2 -5
  62. data/lib/dry/effects/stack.rb +3 -7
  63. data/lib/dry/effects/version.rb +1 -1
  64. data/lib/dry/effects.rb +32 -7
  65. data/lib/dry-effects.rb +1 -0
  66. metadata +10 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80f0e1405c5ca987eb7f24a1ae3c71371f83595380ad49d04a61980767dbe06e
4
- data.tar.gz: '028feb1018847ee3713b8a7cbad4572328d7b30f251889e5f58112fa7b25fa3e'
3
+ metadata.gz: abc06cbff85f6545a5b05ebeb778737a316fadf9222c9e98c015e05a91e16cdf
4
+ data.tar.gz: 7023b7bc8b4807c957f561706f9cd8215cc181cf37de06ae218ec48fac48f9da
5
5
  SHA512:
6
- metadata.gz: 9c37d67a9030142e310e0df86d06fbdd63d21a3f3b52ea4f9f7792f9561e9ba48a58d50caad469bcfa4c30ef500b1d5772ebe4153001b65efd2390acb080a3ae
7
- data.tar.gz: e4dc39c74bbb28a2ab0e79410752f0ceddff4bcd8d351b457c79dd608125c10709612ffb6c21c4b4b55714ad8a151a3c9d1ba93297931126f7c59f3e04d79d65
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
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2015-2021 dry-rb team
3
+ Copyright (c) 2015-2022 dry-rb team
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy of
6
6
  this software and associated documentation files (the "Software"), to deal in
data/README.md CHANGED
@@ -8,10 +8,10 @@
8
8
  # dry-effects [![Join the chat at https://dry-rb.zulipchat.com](https://img.shields.io/badge/dry--rb-join%20chat-%23346b7a.svg)][chat]
9
9
 
10
10
  [![Gem Version](https://badge.fury.io/rb/dry-effects.svg)][gem]
11
- [![CI Status](https://github.com/dry-rb/dry-effects/workflows/CI/badge.svg)][actions]
11
+ [![CI Status](https://github.com/dry-rb/dry-effects/workflows/ci/badge.svg)][actions]
12
12
  [![Codacy Badge](https://api.codacy.com/project/badge/Grade/158a8a584a3845eba4a67a71ad540210)][codacy]
13
13
  [![Codacy Badge](https://api.codacy.com/project/badge/Coverage/158a8a584a3845eba4a67a71ad540210)][codacy]
14
- [![Inline docs](http://inch-ci.org/github/dry-rb/dry-effects.svg?branch=master)][inchpages]
14
+ [![Inline docs](http://inch-ci.org/github/dry-rb/dry-effects.svg?branch=main)][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.6.0`
26
- * ~~jruby~~ `>= 9.3` (we are waiting for [2.6 support](https://github.com/jruby/jruby/issues/6161))
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/master/CHANGELOG.md"
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.6.0"
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.5", ">= 0.5"
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
 
@@ -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.send(:define_method, class_name) do |*args, **kwargs|
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
- def self.register(name, &block)
7
- define_method(name, &block)
8
- module_function name
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
@@ -1,11 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/container"
4
-
5
3
  module Dry
6
4
  module Effects
7
5
  class Container
8
- include Dry::Container::Mixin
6
+ include ::Dry::Container::Mixin
9
7
  end
10
8
  end
11
9
  end
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/equalizer"
4
- require "dry/effects/initializer"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  class Effect
@@ -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) { |task| ::Dry::Effects.yield(Await.(task)) }
16
+ define_method(:await) { ::Dry::Effects.yield(Await.(_1)) }
19
17
  end
20
18
  end
21
19
  end
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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) { |xs| ::Dry::Effects.yield(Join.payload(xs)) }
14
+ define_method(:join) { ::Dry::Effects.yield(Join.payload(_1)) }
17
15
  end
18
16
  end
19
17
  end
@@ -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
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/effects/state"
4
-
5
3
  module Dry
6
4
  module Effects
7
5
  module Effects
@@ -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 { |k| name_for(k) }.zip(keys)
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
 
@@ -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
@@ -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
@@ -20,7 +20,7 @@ module Dry
20
20
  super(
21
21
  Undefined.default(message) {
22
22
  "Effect #{effect.inspect} not handled. "\
23
- "Effects must be wrapped with corresponding handlers"
23
+ "Effects must be wrapped with corresponding handlers"
24
24
  }
25
25
  )
26
26
  end
@@ -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 = false) # rubocop:disable Style/OptionalBooleanParameter
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 = true) # rubocop:disable Style/OptionalBooleanParameter
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/container"
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
- components(component_dir).each do |component|
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
- config.auto_registrar = AutoRegistrar
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 { |key| resolve(key) }
38
+ each_key { resolve(_1) }
39
39
  self
40
40
  end
41
41
  end
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/extensions"
4
-
5
3
  Dry::Effects.extend(Dry::Core::Extensions)
6
4
 
7
5
  Dry::Effects.register_extension(:auto_inject) do
@@ -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
- if RUBY_VERSION >= "2.7"
66
- # @api private
67
- def raise_in_fiber(fiber, error)
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
 
@@ -1,8 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "concurrent/map"
4
- require "dry/core/class_attributes"
5
- require "dry/effects/inflector"
6
4
 
7
5
  module Dry
8
6
  module Effects
@@ -12,16 +12,8 @@ module Dry
12
12
  @frame = Frame.new(provider)
13
13
  end
14
14
 
15
- if RUBY_VERSION >= "2.7"
16
- class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
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/inflector"
4
-
5
3
  module Dry
6
4
  module Effects
7
5
  Inflector = ::Dry::Inflector.new
@@ -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 { |_, d| d.option }
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 { |_, d| d.option }
45
+ .reject { _2.option }
48
46
  .keys
49
47
  .join(", ")
50
48
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Dry
4
4
  module Effects
5
- class Instruction # rubocop:disable Lint/EmptyClass
5
+ class Instruction
6
6
  end
7
7
  end
8
8
  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
  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
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dry
4
+ module Effects
5
+ module Instructions
6
+ def self.Raise(error)
7
+ Raise.new(error)
8
+ end
9
+
10
+ def self.Execute(&block)
11
+ Execute.new(block)
12
+ end
13
+ end
14
+ end
15
+ 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
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/initializer"
4
- require "dry/effects/provider/class_interface"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  # Base class for effect providers
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/provider"
4
- require "dry/effects/frame"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  module Providers
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/provider"
4
- require "dry/effects/instructions/execute"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  module Providers
@@ -1,7 +1,5 @@
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
@@ -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 TimeGenetators
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 TimeGenetators
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 { |p| p.instance_variable_set(:@later_calls, EMPTY_ARRAY) }
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,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/provider"
4
- require "dry/effects/frame"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  module Providers
@@ -1,7 +1,5 @@
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
@@ -1,9 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/provider"
4
- require "dry/effects/instructions/raise"
5
- require "dry/effects/halt"
6
-
7
3
  module Dry
8
4
  module Effects
9
5
  module Providers
@@ -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 { |handle| unlock(handle) }
97
+ owned.each { unlock(_1) }
102
98
  end
103
99
  end
104
100
 
@@ -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
@@ -1,7 +1,5 @@
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
@@ -1,7 +1,5 @@
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
@@ -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
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/provider"
4
- require "dry/effects/halt"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  module Providers
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/effects/providers/reader"
4
- require "dry/effects/instructions/raise"
5
-
6
3
  module Dry
7
4
  module Effects
8
5
  module Providers
@@ -1,7 +1,5 @@
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
@@ -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::TimeGenetators
7
+ include ::Dry::Equalizer(:round)
8
+ include CurrentTime::TimeGenerators
12
9
 
13
10
  Locate = Effect.new(type: :timestamp, name: :locate)
14
11
 
@@ -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 { |p| p.provide?(effect) }
34
+ find { _1.provide?(effect) }
39
35
  end
40
36
 
41
37
  def each(&block)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Dry
4
4
  module Effects
5
- VERSION = "0.2.0"
5
+ VERSION = "0.3.1"
6
6
  end
7
7
  end
data/lib/dry/effects.rb CHANGED
@@ -1,21 +1,45 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "dry/core/constants"
4
- require "dry/effects/version"
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/instructions/raise"
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 [](*args)
66
- Handler.new(*args)
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"
@@ -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.2.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: 2021-09-12 00:00:00.000000000 Z
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.5'
53
+ version: '0.9'
54
54
  - - ">="
55
55
  - !ruby/object:Gem::Version
56
- version: '0.5'
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.5'
63
+ version: '0.9'
64
64
  - - ">="
65
65
  - !ruby/object:Gem::Version
66
- version: '0.5'
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/master/CHANGELOG.md
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.6.0
232
+ version: 2.7.0
231
233
  required_rubygems_version: !ruby/object:Gem::Requirement
232
234
  requirements:
233
235
  - - ">="