injectable 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|