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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ec59b943de91947c9572d9bba1473f94392e5d2629b702e10dd03e98c6bb7a3a
4
- data.tar.gz: e7e6dc95644f502e5100c3ee2f4e23c06bc40ac453e69ae1cc66bf3d6f2de329
3
+ metadata.gz: 39e5192fdea17f097ed9a59e790d420cc57c948d634d62295cf1b4060423b57e
4
+ data.tar.gz: 03df6db3f7c4d49eed4333800a8d1f58a8621d030285327f0bc9b0fc46b12ba6
5
5
  SHA512:
6
- metadata.gz: 85852a19057697f19140004c32eeadc49bc0cc9276bceccfe2b98a0d0a65ecbcf7e3a7ae8f9ac34267fdc0d10aacf34d163202ed6bc6cfa35baa05fbc52db150
7
- data.tar.gz: db94ab469130da0d7c54dd6debb3c2ad0064b4cae0654fe2038bfb2bcb1e592efbf4c5ec0ccac2ff5bf6c8b3605f6331207b80c1d8c2b58d27c9f7662a72106e
6
+ metadata.gz: b68bf39f92aaccd38780cda67bddf53d3f95eecfcc9a00028787f56a9075d03356fa2533708827deeb5c12441bc007132e8934e6c353de1e109284923764a76f
7
+ data.tar.gz: c9a3fb6173b26269589bcea5ac45a02c86a81df8c6b956405067f7f483afbbf78f395a3678fe98b96b2d02582edad45c2a8d6444fd777e16cea25c33647c4c91
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  ### Unreleased
2
2
 
3
+ ### 2.1.1 - 2021-03-15
4
+
5
+ * bug fixes
6
+ * Address final Ruby 2.7 warnings (#24)
7
+
3
8
  ### 2.1.0 - 2021-01-05
4
9
 
5
10
  * enhancements
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- injectable (2.1.0)
4
+ injectable (2.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -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
- args = wrap_args(args)
6
- wrap_call build_instance(args, namespace: namespace)
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 wrap_args(args)
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.is_a?(Array) ? args : [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 klass(namespace: namespace).new(*args) if block.nil?
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.call(*args)
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
@@ -1,3 +1,3 @@
1
1
  module Injectable
2
- VERSION = '2.1.0'.freeze
2
+ VERSION = '2.1.1'.freeze
3
3
  end
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.0
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-01-05 00:00:00.000000000 Z
15
+ date: 2021-03-16 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: bundler