low_dependency 0.1.0 → 0.2.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: 0b07cb0ad79c444f05e484557efe18192268696b55fdfc8608da40a5d7b59b62
4
- data.tar.gz: 68e7704f67b1e64db328c1bece3a68381cdb83e281f400070bb3fdb74a9f77aa
3
+ metadata.gz: 075ac4a80826125fc91b875a75713e886b1e97a61df624e3a627c00fad361869
4
+ data.tar.gz: b6cff0dfb63fb8dac55f017fb0c69a2fc38282cebf7daee3d6b320f5f285c096
5
5
  SHA512:
6
- metadata.gz: a2d203c58aeb11c546d203a222f6ad31a475bb01f6bb2a73beaaf9e960e60522f110ce13efb0a7326b8bc880322ab872c83212583bd1f686181094d43ea7fd39
7
- data.tar.gz: e145fb29b3b1170fcb23cb54d4179a3d8169296605459bfeaa23a9ecc1fa4bbaee706c7deca873fbd68037a2849c4e95f270c7fff548d844ced470dc5debdbba
6
+ metadata.gz: 752c6eeb2d63d3986cb9515a016ef70dcf48beb31318c7b43c28fa042404019b70901fe88e881401796b2dd7707f6547f05131deafcbb8ccca9862a51239422f
7
+ data.tar.gz: 4802aad346e2e897e7e4678b7ead34fbed27e01c229dde55859937e9794c5d852eb24320a05358693439e84130d241a7bd4d7dd8c629678cfdb8a0a52e2bfcc9
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ if ENV['DEV_MODE'] == '1'
4
+ LowType.configure do |config|
5
+ config.output_mode = :value
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../expressions/dependency'
4
+
5
+ module Low
6
+ class DependencyFactory
7
+ class << self
8
+ def parse(dependencies)
9
+ class_dependencies = []
10
+
11
+ dependencies.each do |dependency|
12
+ case dependency
13
+ when Hash
14
+ key = dependency.keys.first
15
+ dependency = dependency[key]
16
+ else
17
+ key = dependency
18
+ end
19
+
20
+ class_dependencies << (Dependency.new(var: dependency) | key)
21
+ end
22
+
23
+ class_dependencies
24
+ end
25
+ end
26
+ end
27
+ end
@@ -1,7 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'config/config'
3
4
  require_relative 'expressions/dependency'
4
- require_relative 'providers'
5
+ require_relative 'factories/dependency_factory'
6
+ require_relative 'repositories/dependencies'
7
+ require_relative 'repositories/providers'
5
8
 
6
9
  class LowDependency
7
10
  class << self
@@ -9,58 +12,57 @@ class LowDependency
9
12
  Low::Providers.provide(key:, &block)
10
13
  end
11
14
 
12
- def providers
13
- Low::Providers.providers
14
- end
15
+ # "include LowDependency[:dependency]"
16
+ def [](*dependencies)
17
+ class_dependencies = Low::DependencyFactory.parse([*dependencies])
15
18
 
16
- def stack
17
- @stack ||= []
18
- @stack
19
- end
20
- end
19
+ # "include" doesn't know the class that did the include, however "included" happens immediately after.
20
+ Low::Dependencies.push(class_dependencies:)
21
21
 
22
- # "include LowDependency[:dependency]"
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)
22
+ included_hook
36
23
  end
37
24
 
38
- LowDependency.stack << item
25
+ def included_hook
26
+ Module.new do
27
+ def self.included(klass)
28
+ klass.class_eval do
29
+ # "include" doesn't know the class that did the include, however "included" happens immediately after.
30
+ @low_dependencies = Low::Dependencies.pop
39
31
 
40
- Module.new do
41
- def self.included(klass)
42
- klass.class_eval do
43
- @low_dependencies = LowDependency.stack.pop
32
+ class << self
33
+ attr_reader :low_dependencies
34
+ end
44
35
 
45
- def self.low_dependencies
46
- @low_dependencies
47
- end
36
+ def initialize
37
+ self.class.low_dependencies.each do |dependency|
38
+ provider = Low::Providers.find(dependency.key)
39
+ raise StandardError, "Provider #{dependency.key} not found" if provider.nil?
48
40
 
49
- def initialize
50
- self.class.low_dependencies.each do |dependency|
51
- provider = LowDependency.providers[dependency.key]
52
- raise StandardError, "Provider #{dependency.key} not found" if provider.nil?
53
- instance_variable_set("@#{dependency.var}", provider.result)
41
+ var = LowDependency.provider_from_namespace(dependency.var)
42
+ instance_variable_set("@#{var}", provider.result)
43
+ end
54
44
  end
55
- end
56
45
 
57
- @low_dependencies.each do |dependency|
58
- define_method(dependency.var) do
59
- instance_variable_get("@#{dependency.var}")
60
- end
46
+ LowDependency.define_readers(@low_dependencies, self)
61
47
  end
62
48
  end
63
49
  end
64
50
  end
51
+
52
+ def define_readers(dependencies, klass)
53
+ dependencies.each do |dependency|
54
+ var = provider_from_namespace(dependency.var)
55
+
56
+ klass.define_method(var) do
57
+ instance_variable_get("@#{var}")
58
+ end
59
+ end
60
+ end
61
+
62
+ def provider_from_namespace(namespace)
63
+ return namespace.split('.').last if namespace.is_a?(String)
64
+
65
+ namespace
66
+ end
65
67
  end
66
68
  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
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../models/provider'
4
+
5
+ module Low
6
+ # Private API. Public methods exposed via LowDependency.
7
+ class Providers
8
+ class << self
9
+ def provide(key:, &block)
10
+ providers[key] = Provider.new(key:, &block)
11
+ end
12
+
13
+ def providers
14
+ @providers ||= {}
15
+ @providers
16
+ end
17
+
18
+ def find(provider_key)
19
+ providers[provider_key]
20
+ end
21
+
22
+ # Usage: def initialize(dependency: Low::Providers[:dependency])
23
+ def [](provider_key)
24
+ providers[provider_key].result
25
+ end
26
+
27
+ def all
28
+ providers
29
+ end
30
+
31
+ def clear
32
+ @providers = {}
33
+ end
34
+ end
35
+ end
36
+ end
data/lib/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Low
4
- DEPENDENCY_VERSION = '0.1.0'
4
+ DEPENDENCY_VERSION = '0.2.1'
5
5
  end
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.1.0
4
+ version: 0.2.1
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/providers.rb
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: []
data/lib/providers.rb DELETED
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'models/provider'
4
-
5
- module Low
6
- class Providers
7
- class << self
8
- def provide(key:, &block)
9
- providers[key] = Provider.new(key:, &block)
10
- end
11
-
12
- def providers
13
- @providers ||= {}
14
- @providers
15
- end
16
-
17
- def clear
18
- @providers = {}
19
- end
20
- end
21
- end
22
- end