dry-effects 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
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
  - - ">="