injectable 2.1.0 → 2.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/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/lib/injectable/dependency.rb +39 -7
- data/lib/injectable/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: 39e5192fdea17f097ed9a59e790d420cc57c948d634d62295cf1b4060423b57e
|
4
|
+
data.tar.gz: 03df6db3f7c4d49eed4333800a8d1f58a8621d030285327f0bc9b0fc46b12ba6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b68bf39f92aaccd38780cda67bddf53d3f95eecfcc9a00028787f56a9075d03356fa2533708827deeb5c12441bc007132e8934e6c353de1e109284923764a76f
|
7
|
+
data.tar.gz: c9a3fb6173b26269589bcea5ac45a02c86a81df8c6b956405067f7f483afbbf78f395a3678fe98b96b2d02582edad45c2a8d6444fd777e16cea25c33647c4c91
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -2,15 +2,34 @@ module Injectable
|
|
2
2
|
# Initialize a dependency based on the options or the block passed
|
3
3
|
Dependency = Struct.new(:name, :block, :class, :call, :with, :depends_on, keyword_init: true) do
|
4
4
|
def instance(args: [], namespace: nil)
|
5
|
-
|
6
|
-
|
5
|
+
positional_args, kwargs = split_args(args)
|
6
|
+
|
7
|
+
wrap_call build_instance(positional_args, kwargs, namespace: namespace)
|
7
8
|
end
|
8
9
|
|
9
10
|
private
|
10
11
|
|
11
|
-
def
|
12
|
+
def split_args(args)
|
13
|
+
args = preprocess_args(args)
|
14
|
+
|
15
|
+
return [[], {}] if args.empty?
|
16
|
+
|
17
|
+
kwargs = args.pop
|
18
|
+
|
19
|
+
if kwargs.is_a?(Hash) && kwargs.keys.all? { |key| key.is_a?(Symbol) }
|
20
|
+
[args, kwargs]
|
21
|
+
else
|
22
|
+
[args << kwargs, {}]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def preprocess_args(args)
|
12
27
|
args = with unless with.nil?
|
13
|
-
args
|
28
|
+
wrap_args(args)
|
29
|
+
end
|
30
|
+
|
31
|
+
def wrap_args(args)
|
32
|
+
args.is_a?(Array) ? args.clone : [args]
|
14
33
|
end
|
15
34
|
|
16
35
|
def wrap_call(the_instance)
|
@@ -23,10 +42,17 @@ module Injectable
|
|
23
42
|
the_instance.public_method(call)
|
24
43
|
end
|
25
44
|
|
26
|
-
def build_instance(args, namespace:)
|
27
|
-
return
|
45
|
+
def build_instance(args, kwargs, namespace:)
|
46
|
+
return build_instance_26(args, kwargs, namespace: namespace) if RUBY_VERSION < '2.7'
|
28
47
|
|
29
|
-
block.
|
48
|
+
instantiator = block || klass(namespace: namespace).method(:new)
|
49
|
+
if kwargs.empty?
|
50
|
+
# otherwise an empty hash will be added in ruby 2.7, which could be taken as
|
51
|
+
# positional argument instead.
|
52
|
+
instantiator.call(*args)
|
53
|
+
else
|
54
|
+
instantiator.call(*args, **kwargs)
|
55
|
+
end
|
30
56
|
end
|
31
57
|
|
32
58
|
def klass(namespace:)
|
@@ -40,5 +66,11 @@ module Injectable
|
|
40
66
|
def camelcased
|
41
67
|
@camelcased ||= name.to_s.split('_').map(&:capitalize).join
|
42
68
|
end
|
69
|
+
|
70
|
+
def build_instance_26(args, kwargs, namespace:)
|
71
|
+
args << kwargs if kwargs.any?
|
72
|
+
|
73
|
+
block.nil? ? klass(namespace: namespace).new(*args) : block.call(*args)
|
74
|
+
end
|
43
75
|
end
|
44
76
|
end
|
data/lib/injectable/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: injectable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.
|
4
|
+
version: 2.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Papipo
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: exe
|
14
14
|
cert_chain: []
|
15
|
-
date: 2021-
|
15
|
+
date: 2021-03-16 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: bundler
|