low_dependency 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0b07cb0ad79c444f05e484557efe18192268696b55fdfc8608da40a5d7b59b62
4
+ data.tar.gz: 68e7704f67b1e64db328c1bece3a68381cdb83e281f400070bb3fdb74a9f77aa
5
+ SHA512:
6
+ metadata.gz: a2d203c58aeb11c546d203a222f6ad31a475bb01f6bb2a73beaaf9e960e60522f110ce13efb0a7326b8bc880322ab872c83212583bd1f686181094d43ea7fd39
7
+ data.tar.gz: e145fb29b3b1170fcb23cb54d4179a3d8169296605459bfeaa23a9ecc1fa4bbaee706c7deca873fbd68037a2849c4e95f270c7fff548d844ced470dc5debdbba
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'expressions'
4
+
5
+ module Low
6
+ class Dependency < Expressions::Expression
7
+ attr_reader :key, :var
8
+
9
+ def initialize(var:)
10
+ super()
11
+
12
+ @key = var
13
+ @var = var
14
+ end
15
+
16
+ private
17
+
18
+ def receive_value(value)
19
+ @key = value
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'expressions/dependency'
4
+ require_relative 'providers'
5
+
6
+ class LowDependency
7
+ class << self
8
+ def provide(key, &block)
9
+ Low::Providers.provide(key:, &block)
10
+ end
11
+
12
+ def providers
13
+ Low::Providers.providers
14
+ end
15
+
16
+ def stack
17
+ @stack ||= []
18
+ @stack
19
+ end
20
+ end
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)
36
+ end
37
+
38
+ LowDependency.stack << item
39
+
40
+ Module.new do
41
+ def self.included(klass)
42
+ klass.class_eval do
43
+ @low_dependencies = LowDependency.stack.pop
44
+
45
+ def self.low_dependencies
46
+ @low_dependencies
47
+ end
48
+
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)
54
+ end
55
+ end
56
+
57
+ @low_dependencies.each do |dependency|
58
+ define_method(dependency.var) do
59
+ instance_variable_get("@#{dependency.var}")
60
+ end
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Low
4
+ class Provider
5
+ attr_reader :key
6
+
7
+ def initialize(key:, &block)
8
+ @key = key
9
+ @proc = block
10
+ @result = nil
11
+ end
12
+
13
+ def result
14
+ @result ||= @proc.call
15
+ end
16
+ end
17
+ end
data/lib/providers.rb ADDED
@@ -0,0 +1,22 @@
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
data/lib/version.rb ADDED
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Low
4
+ DEPENDENCY_VERSION = '0.1.0'
5
+ end
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: low_dependency
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - maedi
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: expressions
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '0'
26
+ description: Automatic Dependency Injection where you get to see and keep control
27
+ of the constructor
28
+ email:
29
+ - maediprichard@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/expressions/dependency.rb
35
+ - lib/low_dependency.rb
36
+ - lib/models/provider.rb
37
+ - lib/providers.rb
38
+ - lib/version.rb
39
+ homepage: https://github.com/low-rb/low_dependency
40
+ licenses: []
41
+ metadata:
42
+ homepage_uri: https://github.com/low-rb/low_dependency
43
+ source_code_uri: https://github.com/low-rb/low_dependency/src/branch/main
44
+ rdoc_options: []
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 3.3.0
52
+ required_rubygems_version: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirements: []
58
+ rubygems_version: 3.7.2
59
+ specification_version: 4
60
+ summary: Dependency Injection in crisp and clear syntax
61
+ test_files: []