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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0b07cb0ad79c444f05e484557efe18192268696b55fdfc8608da40a5d7b59b62
4
- data.tar.gz: 68e7704f67b1e64db328c1bece3a68381cdb83e281f400070bb3fdb74a9f77aa
3
+ metadata.gz: cb969f9e394ddc2e6e0b4669e58736b14ea78b7539495035c51a11765d8c365b
4
+ data.tar.gz: 19144722e967c2d936a039d1667701b552cb0db4f78aa737c8ac6a24aef137d7
5
5
  SHA512:
6
- metadata.gz: a2d203c58aeb11c546d203a222f6ad31a475bb01f6bb2a73beaaf9e960e60522f110ce13efb0a7326b8bc880322ab872c83212583bd1f686181094d43ea7fd39
7
- data.tar.gz: e145fb29b3b1170fcb23cb54d4179a3d8169296605459bfeaa23a9ecc1fa4bbaee706c7deca873fbd68037a2849c4e95f270c7fff548d844ced470dc5debdbba
6
+ metadata.gz: b3fd43c0ded0f0c9e5b6390c45c2638395fc3fc75ef085038fdd70749ff8fba83435ffa33862e289d50f8b99bc4368179d5922287a0dc977e6aa810f52f1a176
7
+ data.tar.gz: da84dd6d96730943ae4d23228108e1186f2657d53bcf4387ae15cddcefbecbdba1716c48149a8ddd82834308f910d3354281926a1a2360c9c910597eb734f0cf
@@ -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,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
@@ -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 'providers'
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
- def providers
13
- Low::Providers.providers
14
- end
16
+ # "include LowDependency[:dependency]"
17
+ def [](*dependencies)
18
+ class_dependencies = Low::DependencyFactory.parse([*dependencies])
15
19
 
16
- def stack
17
- @stack ||= []
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
- # "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)
23
+ included_hook
36
24
  end
37
25
 
38
- LowDependency.stack << item
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
- Module.new do
41
- def self.included(klass)
42
- klass.class_eval do
43
- @low_dependencies = LowDependency.stack.pop
33
+ class << self
34
+ attr_reader :low_dependencies
35
+ end
44
36
 
45
- def self.low_dependencies
46
- @low_dependencies
47
- end
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
- 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)
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
- @low_dependencies.each do |dependency|
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
@@ -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.0'
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.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/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: []