low_dependency 0.1.0 → 0.2.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/config/config.rb +7 -0
- data/lib/factories/dependency_factory.rb +29 -0
- data/lib/low_dependency.rb +44 -41
- data/lib/repositories/dependencies.rb +20 -0
- data/lib/{providers.rb → repositories/providers.rb} +11 -3
- data/lib/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cb969f9e394ddc2e6e0b4669e58736b14ea78b7539495035c51a11765d8c365b
|
|
4
|
+
data.tar.gz: 19144722e967c2d936a039d1667701b552cb0db4f78aa737c8ac6a24aef137d7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b3fd43c0ded0f0c9e5b6390c45c2638395fc3fc75ef085038fdd70749ff8fba83435ffa33862e289d50f8b99bc4368179d5922287a0dc977e6aa810f52f1a176
|
|
7
|
+
data.tar.gz: da84dd6d96730943ae4d23228108e1186f2657d53bcf4387ae15cddcefbecbdba1716c48149a8ddd82834308f910d3354281926a1a2360c9c910597eb734f0cf
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative '../expressions/dependency'
|
|
4
|
+
|
|
5
|
+
module Low
|
|
6
|
+
class DependencyFactory
|
|
7
|
+
include LowType
|
|
8
|
+
|
|
9
|
+
class << self
|
|
10
|
+
def parse(dependencies = Array)
|
|
11
|
+
class_dependencies = []
|
|
12
|
+
|
|
13
|
+
dependencies.each do |dependency|
|
|
14
|
+
case dependency
|
|
15
|
+
when Hash
|
|
16
|
+
key = dependency.keys.first
|
|
17
|
+
dependency = dependency[key]
|
|
18
|
+
else
|
|
19
|
+
key = dependency
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class_dependencies << (Dependency.new(var: dependency) | key)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class_dependencies
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
data/lib/low_dependency.rb
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'low_type'
|
|
4
|
+
require_relative 'config/config'
|
|
3
5
|
require_relative 'expressions/dependency'
|
|
4
|
-
require_relative '
|
|
6
|
+
require_relative 'factories/dependency_factory'
|
|
7
|
+
require_relative 'repositories/dependencies'
|
|
8
|
+
require_relative 'repositories/providers'
|
|
5
9
|
|
|
6
10
|
class LowDependency
|
|
7
11
|
class << self
|
|
@@ -9,58 +13,57 @@ class LowDependency
|
|
|
9
13
|
Low::Providers.provide(key:, &block)
|
|
10
14
|
end
|
|
11
15
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
# "include LowDependency[:dependency]"
|
|
17
|
+
def [](*dependencies)
|
|
18
|
+
class_dependencies = Low::DependencyFactory.parse([*dependencies])
|
|
15
19
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@stack
|
|
19
|
-
end
|
|
20
|
-
end
|
|
20
|
+
# "include" doesn't know the class that did the include, however "included" happens immediately after.
|
|
21
|
+
Low::Dependencies.push(class_dependencies:)
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
def self.[](*dependencies)
|
|
24
|
-
item = []
|
|
25
|
-
|
|
26
|
-
[*dependencies].each do |dependency|
|
|
27
|
-
case dependency
|
|
28
|
-
when Hash
|
|
29
|
-
key = dependency.keys.first
|
|
30
|
-
dependency = dependency[key]
|
|
31
|
-
else
|
|
32
|
-
key = dependency
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
item << (Low::Dependency.new(var: dependency) | key)
|
|
23
|
+
included_hook
|
|
36
24
|
end
|
|
37
25
|
|
|
38
|
-
|
|
26
|
+
def included_hook
|
|
27
|
+
Module.new do
|
|
28
|
+
def self.included(klass)
|
|
29
|
+
klass.class_eval do
|
|
30
|
+
# "include" doesn't know the class that did the include, however "included" happens immediately after.
|
|
31
|
+
@low_dependencies = Low::Dependencies.pop
|
|
39
32
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
@low_dependencies = LowDependency.stack.pop
|
|
33
|
+
class << self
|
|
34
|
+
attr_reader :low_dependencies
|
|
35
|
+
end
|
|
44
36
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
37
|
+
def initialize
|
|
38
|
+
self.class.low_dependencies.each do |dependency|
|
|
39
|
+
provider = Low::Providers.find(dependency.key)
|
|
40
|
+
raise StandardError, "Provider #{dependency.key} not found" if provider.nil?
|
|
48
41
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
raise StandardError, "Provider #{dependency.key} not found" if provider.nil?
|
|
53
|
-
instance_variable_set("@#{dependency.var}", provider.result)
|
|
42
|
+
var = LowDependency.provider_from_namespace(dependency.var)
|
|
43
|
+
instance_variable_set("@#{var}", provider.result)
|
|
44
|
+
end
|
|
54
45
|
end
|
|
55
|
-
end
|
|
56
46
|
|
|
57
|
-
|
|
58
|
-
define_method(dependency.var) do
|
|
59
|
-
instance_variable_get("@#{dependency.var}")
|
|
60
|
-
end
|
|
47
|
+
LowDependency.define_readers(@low_dependencies, self)
|
|
61
48
|
end
|
|
62
49
|
end
|
|
63
50
|
end
|
|
64
51
|
end
|
|
52
|
+
|
|
53
|
+
def define_readers(dependencies, klass)
|
|
54
|
+
dependencies.each do |dependency|
|
|
55
|
+
var = provider_from_namespace(dependency.var)
|
|
56
|
+
|
|
57
|
+
klass.define_method(var) do
|
|
58
|
+
instance_variable_get("@#{var}")
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def provider_from_namespace(namespace)
|
|
64
|
+
return namespace.split('.').last if namespace.is_a?(String)
|
|
65
|
+
|
|
66
|
+
namespace
|
|
67
|
+
end
|
|
65
68
|
end
|
|
66
69
|
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Low
|
|
4
|
+
class Dependencies
|
|
5
|
+
class << self
|
|
6
|
+
def stack
|
|
7
|
+
@stack ||= []
|
|
8
|
+
@stack
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def push(class_dependencies:)
|
|
12
|
+
stack << class_dependencies
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def pop
|
|
16
|
+
stack.pop
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -1,19 +1,27 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
require_relative 'models/provider'
|
|
3
|
+
require_relative '../models/provider'
|
|
4
4
|
|
|
5
5
|
module Low
|
|
6
6
|
class Providers
|
|
7
|
-
class << self
|
|
7
|
+
class << self
|
|
8
8
|
def provide(key:, &block)
|
|
9
9
|
providers[key] = Provider.new(key:, &block)
|
|
10
10
|
end
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
def providers
|
|
13
13
|
@providers ||= {}
|
|
14
14
|
@providers
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
def find(provider_key)
|
|
18
|
+
providers[provider_key]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def all
|
|
22
|
+
providers
|
|
23
|
+
end
|
|
24
|
+
|
|
17
25
|
def clear
|
|
18
26
|
@providers = {}
|
|
19
27
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: low_dependency
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- maedi
|
|
@@ -31,10 +31,13 @@ executables: []
|
|
|
31
31
|
extensions: []
|
|
32
32
|
extra_rdoc_files: []
|
|
33
33
|
files:
|
|
34
|
+
- lib/config/config.rb
|
|
34
35
|
- lib/expressions/dependency.rb
|
|
36
|
+
- lib/factories/dependency_factory.rb
|
|
35
37
|
- lib/low_dependency.rb
|
|
36
38
|
- lib/models/provider.rb
|
|
37
|
-
- lib/
|
|
39
|
+
- lib/repositories/dependencies.rb
|
|
40
|
+
- lib/repositories/providers.rb
|
|
38
41
|
- lib/version.rb
|
|
39
42
|
homepage: https://github.com/low-rb/low_dependency
|
|
40
43
|
licenses: []
|