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 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