providers 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/{expressions → dependencies}/dependency.rb +3 -4
- data/lib/{factories/dependency_factory.rb → dependencies/factory.rb} +3 -3
- data/lib/{repositories/dependencies.rb → dependencies/repository.rb} +2 -2
- data/lib/dependencies.rb +16 -20
- data/lib/{models → providers}/provider.rb +1 -1
- data/lib/providers.rb +3 -7
- data/lib/version.rb +2 -2
- metadata +6 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ae6e1bb3fca5b395d2e28d8e4844dbdbb84817cff3d5cd38a6f144d1318ef9b0
|
|
4
|
+
data.tar.gz: 6f00911d21891db4a2c4bdaf9186b9cfe9b2b045f4fe5e308f5381b6572f22e9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8c7122adaae197ea905c768a892cc8a2f71296b403b4d7d6b2061c90ca8e9d92da13dbddc124483563be12264dd91a5b314495184326fea8072113c50ae36061
|
|
7
|
+
data.tar.gz: 1fd20a67479d3b196f96ec1ac068874573f0ff83ca7c931d872ea161dfe3b18233d0bd8ec7d797f607176ef59a4717b88f3c172970ec5baee993237de86c071f
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
require 'expressions'
|
|
4
4
|
|
|
5
|
-
module
|
|
5
|
+
module Dependencies
|
|
6
6
|
# A Dependency Expression requires LowType in order to be injected via a constructor.
|
|
7
|
-
# See "Dependencies[:dependency]" for traditional dependency injection without LowType.
|
|
8
7
|
class Dependency < ::Expressions::Expression
|
|
9
8
|
attr_reader :provider_key, :var_name
|
|
10
9
|
|
|
@@ -24,14 +23,14 @@ module Low
|
|
|
24
23
|
Providers[@provider_key]
|
|
25
24
|
end
|
|
26
25
|
|
|
27
|
-
# Ignore LowType's validation
|
|
26
|
+
# Ignore LowType's validation on arguments of type Dependency.
|
|
28
27
|
def validate!(value:, proxy:); end
|
|
29
28
|
|
|
30
29
|
private
|
|
31
30
|
|
|
32
31
|
def union_value(value)
|
|
33
32
|
@provider_key = value
|
|
34
|
-
@var_name = Dependencies.
|
|
33
|
+
@var_name = Dependencies.name_from_namespace(value)
|
|
35
34
|
end
|
|
36
35
|
end
|
|
37
36
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '../
|
|
3
|
+
require_relative '../dependencies/dependency'
|
|
4
4
|
|
|
5
|
-
module
|
|
6
|
-
class
|
|
5
|
+
module Dependencies
|
|
6
|
+
class Factory
|
|
7
7
|
class << self
|
|
8
8
|
def parse(dependencies)
|
|
9
9
|
class_dependencies = []
|
data/lib/dependencies.rb
CHANGED
|
@@ -1,23 +1,19 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative 'config/config'
|
|
4
|
-
require_relative '
|
|
5
|
-
require_relative '
|
|
6
|
-
require_relative '
|
|
4
|
+
require_relative 'dependencies/dependency'
|
|
5
|
+
require_relative 'dependencies/factory'
|
|
6
|
+
require_relative 'dependencies/repository'
|
|
7
7
|
require_relative 'providers'
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
module Dependencies
|
|
10
10
|
class << self
|
|
11
|
-
def provide(key, &block)
|
|
12
|
-
Low::Dependencies.provide(key:, &block)
|
|
13
|
-
end
|
|
14
|
-
|
|
15
11
|
# Usage: "include Dependencies[:dependency]"
|
|
16
12
|
def [](*dependencies)
|
|
17
|
-
class_dependencies =
|
|
13
|
+
class_dependencies = Factory.parse([*dependencies])
|
|
18
14
|
|
|
19
15
|
# "include" doesn't know the class that did the include, however "included" happens immediately after.
|
|
20
|
-
|
|
16
|
+
Repository.push(class_dependencies:)
|
|
21
17
|
|
|
22
18
|
included_hook
|
|
23
19
|
end
|
|
@@ -27,23 +23,23 @@ class Dependencies
|
|
|
27
23
|
def self.included(klass)
|
|
28
24
|
klass.class_eval do
|
|
29
25
|
# "include" doesn't know the class that did the include, however "included" happens immediately after.
|
|
30
|
-
@
|
|
26
|
+
@dependencies = Repository.pop
|
|
31
27
|
|
|
32
28
|
class << self
|
|
33
|
-
attr_reader :
|
|
29
|
+
attr_reader :dependencies
|
|
34
30
|
end
|
|
35
31
|
|
|
36
32
|
def initialize
|
|
37
|
-
self.class.
|
|
38
|
-
provider =
|
|
39
|
-
raise StandardError, "Provider #{dependency.provider_key}
|
|
33
|
+
self.class.dependencies.each do |dependency|
|
|
34
|
+
provider = Providers[dependency.provider_key]
|
|
35
|
+
raise StandardError, "Provider #{dependency.provider_key} is missing or returning nil" if provider.nil?
|
|
40
36
|
|
|
41
|
-
var_name =
|
|
42
|
-
instance_variable_set("@#{var_name}", provider
|
|
37
|
+
var_name = Dependencies.name_from_namespace(dependency.var_name)
|
|
38
|
+
instance_variable_set("@#{var_name}", provider)
|
|
43
39
|
end
|
|
44
40
|
end
|
|
45
41
|
|
|
46
|
-
|
|
42
|
+
Dependencies.define_readers(@dependencies, self)
|
|
47
43
|
end
|
|
48
44
|
end
|
|
49
45
|
end
|
|
@@ -51,7 +47,7 @@ class Dependencies
|
|
|
51
47
|
|
|
52
48
|
def define_readers(dependencies, klass)
|
|
53
49
|
dependencies.each do |dependency|
|
|
54
|
-
var_name =
|
|
50
|
+
var_name = name_from_namespace(dependency.var_name)
|
|
55
51
|
|
|
56
52
|
klass.define_method(var_name) do
|
|
57
53
|
instance_variable_get("@#{var_name}")
|
|
@@ -59,7 +55,7 @@ class Dependencies
|
|
|
59
55
|
end
|
|
60
56
|
end
|
|
61
57
|
|
|
62
|
-
def
|
|
58
|
+
def name_from_namespace(namespace)
|
|
63
59
|
return namespace.split('.').last if namespace.is_a?(String)
|
|
64
60
|
|
|
65
61
|
namespace
|
data/lib/providers.rb
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative '
|
|
3
|
+
require_relative 'providers/provider'
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
module Providers
|
|
6
6
|
class MissingProviderError < StandardError; end
|
|
7
7
|
|
|
8
8
|
class << self
|
|
9
|
-
def
|
|
9
|
+
def define(key, &block)
|
|
10
10
|
providers[key] = Provider.new(key:, &block)
|
|
11
11
|
end
|
|
12
12
|
|
|
@@ -15,10 +15,6 @@ class Providers
|
|
|
15
15
|
@providers
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
def find(provider_key)
|
|
19
|
-
providers[provider_key]
|
|
20
|
-
end
|
|
21
|
-
|
|
22
18
|
# Providers[] are hard to stub in tests and should only be used when dependency injection isn't possible.
|
|
23
19
|
# TODO: Make Providers[] easy to stub in tests and look into feature where we get providers from another Ecosystem.
|
|
24
20
|
def [](provider_key)
|
data/lib/version.rb
CHANGED
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
|
+
version: 0.4.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -33,11 +33,11 @@ extra_rdoc_files: []
|
|
|
33
33
|
files:
|
|
34
34
|
- lib/config/config.rb
|
|
35
35
|
- lib/dependencies.rb
|
|
36
|
-
- lib/
|
|
37
|
-
- lib/
|
|
38
|
-
- lib/
|
|
36
|
+
- lib/dependencies/dependency.rb
|
|
37
|
+
- lib/dependencies/factory.rb
|
|
38
|
+
- lib/dependencies/repository.rb
|
|
39
39
|
- lib/providers.rb
|
|
40
|
-
- lib/
|
|
40
|
+
- lib/providers/provider.rb
|
|
41
41
|
- lib/version.rb
|
|
42
42
|
homepage: https://github.com/raindeer-rb/providers
|
|
43
43
|
licenses: []
|
|
@@ -58,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
59
|
version: '0'
|
|
60
60
|
requirements: []
|
|
61
|
-
rubygems_version:
|
|
61
|
+
rubygems_version: 4.0.6
|
|
62
62
|
specification_version: 4
|
|
63
63
|
summary: Dependency Injection in crisp and clear syntax
|
|
64
64
|
test_files: []
|