providers 0.4.0 → 0.6.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ae6e1bb3fca5b395d2e28d8e4844dbdbb84817cff3d5cd38a6f144d1318ef9b0
4
- data.tar.gz: 6f00911d21891db4a2c4bdaf9186b9cfe9b2b045f4fe5e308f5381b6572f22e9
3
+ metadata.gz: 9ceb15bee535ec5e0935537502a99b985e2c1562021a389e7a44bf9d7b36d72c
4
+ data.tar.gz: 91816b9dd7e12215b5d72462078d7244bd3ed9faaef8011da526570b2770270c
5
5
  SHA512:
6
- metadata.gz: 8c7122adaae197ea905c768a892cc8a2f71296b403b4d7d6b2061c90ca8e9d92da13dbddc124483563be12264dd91a5b314495184326fea8072113c50ae36061
7
- data.tar.gz: 1fd20a67479d3b196f96ec1ac068874573f0ff83ca7c931d872ea161dfe3b18233d0bd8ec7d797f607176ef59a4717b88f3c172970ec5baee993237de86c071f
6
+ metadata.gz: c4423a7d88645d178761c0180ddc3b75b3d4f2f15c28d5c2a512c226b896c229b0eade4e6d5c64a66fd21849c61e792c4e4d0236dfa5a7db35513782c797c42f
7
+ data.tar.gz: e1874197801ffef062700b17263abad5441d9b3bdfdea0487fa4789e5a7f5d1de1dc3a9931b1b2ea2612a13f3988ea0b8cd14f0e80387e6014c3ea6cd51c58af
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../dependencies/dependency'
3
+ require_relative '../low/dependency'
4
4
 
5
5
  module Dependencies
6
6
  class Factory
@@ -17,7 +17,7 @@ module Dependencies
17
17
  provider_key = dependency
18
18
  end
19
19
 
20
- class_dependencies << (Dependency.new(var_name: dependency) | provider_key)
20
+ class_dependencies << (::Low::Dependency.new(var_name: dependency) | provider_key)
21
21
  end
22
22
 
23
23
  class_dependencies
data/lib/dependencies.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'config/config'
4
- require_relative 'dependencies/dependency'
5
4
  require_relative 'dependencies/factory'
6
5
  require_relative 'dependencies/repository'
7
6
  require_relative 'providers'
@@ -46,12 +45,8 @@ module Dependencies
46
45
  end
47
46
 
48
47
  def define_readers(dependencies, klass)
49
- dependencies.each do |dependency|
50
- var_name = name_from_namespace(dependency.var_name)
51
-
52
- klass.define_method(var_name) do
53
- instance_variable_get("@#{var_name}")
54
- end
48
+ klass.class_eval do
49
+ attr_reader(*dependencies.map { |d| Dependencies.name_from_namespace(d.var_name).to_sym })
55
50
  end
56
51
  end
57
52
 
@@ -2,8 +2,9 @@
2
2
 
3
3
  require 'expressions'
4
4
 
5
- module Dependencies
6
- # A Dependency Expression requires LowType in order to be injected via a constructor.
5
+ # Used within LowType's namespace.
6
+ module Low
7
+ # Placed as a default value in a constructor param.
7
8
  class Dependency < ::Expressions::Expression
8
9
  attr_reader :provider_key, :var_name
9
10
 
@@ -23,7 +24,7 @@ module Dependencies
23
24
  Providers[@provider_key]
24
25
  end
25
26
 
26
- # Ignore LowType's validation on arguments of type Dependency.
27
+ # Ignore LowType's validation on arguments of this type.
27
28
  def validate!(value:, proxy:); end
28
29
 
29
30
  private
data/lib/providers.rb CHANGED
@@ -1,13 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'low/dependency'
3
4
  require_relative 'providers/provider'
5
+ require_relative 'dependencies'
4
6
 
5
7
  module Providers
6
8
  class MissingProviderError < StandardError; end
7
9
 
8
10
  class << self
9
- def define(key, &block)
10
- providers[key] = Provider.new(key:, &block)
11
+ def define(key, eager: false, receiver: self, &block)
12
+ provider = Provider.new(key:, &block)
13
+ provider.result if eager
14
+ providers[key] = provider
11
15
  end
12
16
 
13
17
  def providers
@@ -17,11 +21,18 @@ module Providers
17
21
 
18
22
  # Providers[] are hard to stub in tests and should only be used when dependency injection isn't possible.
19
23
  # TODO: Make Providers[] easy to stub in tests and look into feature where we get providers from another Ecosystem.
20
- def [](provider_key)
21
- provider = providers[provider_key]
22
- raise(MissingProviderError, "Provider #{provider_key.inspect} not found") if provider.nil?
23
-
24
- provider.result
24
+ def [](*provider_keys)
25
+ provider_keys = [*provider_keys]
26
+
27
+ raise(MissingProviderError, 'Pass one more provider keys') if provider_keys.empty?
28
+
29
+ if provider_keys.count == 1
30
+ result(provider_keys.first)
31
+ else
32
+ provider_keys.map do |provider_key|
33
+ result(provider_key)
34
+ end
35
+ end
25
36
  end
26
37
 
27
38
  def all
@@ -31,5 +42,15 @@ module Providers
31
42
  def clear
32
43
  @providers = {}
33
44
  end
45
+
46
+ private
47
+
48
+ def result(provider_key)
49
+ provider = providers[provider_key]
50
+
51
+ raise(MissingProviderError, "Provider #{provider_key.inspect} not found") if provider.nil?
52
+
53
+ provider.result
54
+ end
34
55
  end
35
56
  end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Providers
4
- VERSION = '0.4.0'
4
+ VERSION = '0.6.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: providers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - maedi
@@ -33,9 +33,9 @@ extra_rdoc_files: []
33
33
  files:
34
34
  - lib/config/config.rb
35
35
  - lib/dependencies.rb
36
- - lib/dependencies/dependency.rb
37
36
  - lib/dependencies/factory.rb
38
37
  - lib/dependencies/repository.rb
38
+ - lib/low/dependency.rb
39
39
  - lib/providers.rb
40
40
  - lib/providers/provider.rb
41
41
  - lib/version.rb