helium-dependency 0.1.0 → 0.1.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 +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +29 -4
- data/lib/helium/dependency.rb +22 -20
- data/lib/helium/dependency/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4bd58694ef42a91e52faa8df95f2e5a07ec62d243810dbb838119c4565dacc6
|
4
|
+
data.tar.gz: 6aa2e549751835d4e9da275724003657c49f96124e34f3ca565e39a6d62fc1be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94ec932a3e80a1114a5a95460a059ed2dbb35d6676ce5c19c0d08ab7470b74a805989be6c02c79cd315f8cdad36594f0b65cd8b9debf9f094b3575f9f321d0d0
|
7
|
+
data.tar.gz: 29e6060e937216a3985be5a8400ac9a9aed828bc1dfe9825eee6aff198ce06e3eaa24ae5db5eca968e5c721fad49add9952168613876797881972eaf33cbabfb
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
# Helium::Dependency
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
3
|
+
Simple dependency inkjection for Ruby object.
|
6
4
|
|
7
5
|
## Installation
|
8
6
|
|
@@ -22,7 +20,34 @@ Or install it yourself as:
|
|
22
20
|
|
23
21
|
## Usage
|
24
22
|
|
25
|
-
|
23
|
+
Simply include `Helium::Dependency` and then define the list of dependencies, together with a block to create default injection.
|
24
|
+
Injected value are already available when the default block is evaluated, so dependencies can reference each other.
|
25
|
+
|
26
|
+
```
|
27
|
+
class Bike
|
28
|
+
include Helium::Dependency
|
29
|
+
|
30
|
+
dependency(:wheel_size) { 26 }
|
31
|
+
dependency(:wheels, public: true) { Array.new(2) { Wheel.new(size: wheel_size) } }
|
32
|
+
end
|
33
|
+
|
34
|
+
Bike.new(wheel_size: 20).wheels #=> [#Wheel(@size: 20), #Wheel(@size: 20)]
|
35
|
+
```
|
36
|
+
|
37
|
+
Injection happens in the class `new` method before `initialize` is called, so you can define your own initialization and use dependencies inside it.
|
38
|
+
|
39
|
+
```
|
40
|
+
class NamedBike < Bike
|
41
|
+
def initialize(name)
|
42
|
+
@name = "#{name} (#{wheels.map(&:size).join(', ')})"
|
43
|
+
end
|
44
|
+
|
45
|
+
attr_reader :name
|
46
|
+
end
|
47
|
+
|
48
|
+
NamedBike.new("Steven").name #=> "Steven (26, 26)"
|
49
|
+
NamedBike.new("Lil Steven", wheel_size: 16).name #=> "Lil Steven (16, 16)"
|
50
|
+
```
|
26
51
|
|
27
52
|
## Development
|
28
53
|
|
data/lib/helium/dependency.rb
CHANGED
@@ -6,18 +6,37 @@ module Helium
|
|
6
6
|
|
7
7
|
def self.included(mod)
|
8
8
|
mod.extend ClassMethods
|
9
|
-
mod.prepend Initialization
|
10
9
|
end
|
11
10
|
|
12
11
|
module ClassMethods
|
13
|
-
def
|
12
|
+
def new(*args, **kwargs, &block)
|
13
|
+
instance = allocate
|
14
|
+
|
15
|
+
deps = {}
|
16
|
+
dependencies.each do |dep|
|
17
|
+
next unless kwargs.key?(dep)
|
18
|
+
deps[dep] = kwargs.delete(dep)
|
19
|
+
end
|
20
|
+
|
21
|
+
instance.instance_variable_set(:@deps, deps)
|
22
|
+
|
23
|
+
if kwargs.any?
|
24
|
+
instance.send :initialize, *args, **kwargs, &block
|
25
|
+
else
|
26
|
+
instance.send :initialize, *args, &block
|
27
|
+
end
|
28
|
+
|
29
|
+
instance
|
30
|
+
end
|
31
|
+
|
32
|
+
def dependency(name, public: false, &default_block)
|
14
33
|
dependencies << name
|
15
34
|
|
16
35
|
define_method(name) do
|
17
36
|
@deps[name] ||= instance_exec(&default_block)
|
18
37
|
end
|
19
38
|
|
20
|
-
private
|
39
|
+
private(name) unless public
|
21
40
|
end
|
22
41
|
|
23
42
|
def dependencies
|
@@ -25,22 +44,5 @@ module Helium
|
|
25
44
|
end
|
26
45
|
end
|
27
46
|
|
28
|
-
module Initialization
|
29
|
-
def initialize(*args, **kwargs, &block)
|
30
|
-
@deps = {}
|
31
|
-
|
32
|
-
self.class.dependencies.each do |dep|
|
33
|
-
next unless kwargs.key?(dep)
|
34
|
-
|
35
|
-
@deps[dep] = kwargs.delete(dep)
|
36
|
-
end
|
37
|
-
|
38
|
-
if kwargs.any?
|
39
|
-
super *args, **kwargs, &block
|
40
|
-
else
|
41
|
-
super *args, &block
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
47
|
end
|
46
48
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: helium-dependency
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stanislaw Klajn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|