rr 3.0.2 → 3.0.3

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: 2b7ca60f4fec0c9f87e1710f6b7faf5ed8a1d52d6c8dd7a8ba82667c1ba920d7
4
- data.tar.gz: 8c80f469725cc6875ea30384439dc6347e2c998f042c9522eb2c8964a9f7f316
3
+ metadata.gz: 4ae999de4b35d2e97dd9805d858a1b573cf8201e8bc4a72c57ab2277ba30400e
4
+ data.tar.gz: 807039ad92e52e43aaad160042ef82e4513ef79d4eb6724c0c4a6c29ffc22b93
5
5
  SHA512:
6
- metadata.gz: '07490a4037a941546b5b8c2139520d3c0d91d752a73e59cc52ef1bdae2ba2b0579deb57cd202db69eb96b67f89a5c5533699a0f6d439a787f8c999cf10f5bf7d'
7
- data.tar.gz: '094e48f18e353e818ed21492f95fdc9fb15c23d01ae17689e0c044f86e6282736a73622451633daf88b04602f31b2848a84996cdd62965be717187dcc1f36b08'
6
+ metadata.gz: 20c952e868437e27e4904e8e1297844e7f6c301f30ae5b8e8ed22915c5eca4817dec14dd2a8185ed3e154a83b89f3f0789baba6edd38d42a3889bfb2f45bd46c
7
+ data.tar.gz: f8750bae03dd96e49c7b0d129685ea9c2be4a35d4dee7cdebf6054c6ba99917eed9ba93fe504c2c0241d37c4b8eb2fd37d91afe76d2b3cd9290868f8ee58b9db
data/CHANGES.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## 3.0.3 - 2021-06-22
4
+
5
+ ### Improvements
6
+
7
+ * Improved keyword arguments support.
8
+ [GitHub#83][Patch by akira yamada]
9
+
10
+ ### Thanks
11
+
12
+ * akira yamada
13
+
3
14
  ## 3.0.2 - 2021-06-18
4
15
 
5
16
  ### Improvements
@@ -36,6 +36,8 @@ module RR
36
36
  def permissive_argument
37
37
  if args.empty? and kwargs.empty?
38
38
  definition.with_any_args
39
+ elsif kwargs.empty?
40
+ definition.with(*args)
39
41
  else
40
42
  definition.with(*args, **kwargs)
41
43
  end
@@ -137,7 +137,7 @@ module RR
137
137
  id = BoundObjects.size
138
138
  BoundObjects[id] = subject_class
139
139
 
140
- if KeywordArguments.fully_supported?
140
+ if KeywordArguments.fully_supported? && KeywordArguments.accept_kwargs?(subject_class, method_name)
141
141
  subject_class.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
142
142
  def #{method_name}(*args, **kwargs, &block)
143
143
  ::RR::Injections::DoubleInjection::BoundObjects[#{id}].class_eval do
@@ -163,7 +163,7 @@ module RR
163
163
  id = BoundObjects.size
164
164
  BoundObjects[id] = subject_class
165
165
 
166
- if KeywordArguments.fully_supported?
166
+ if KeywordArguments.fully_supported? && KeywordArguments.accept_kwargs?(subject_class, method_name)
167
167
  subject_class.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
168
168
  def #{method_name}(*args, **kwargs, &block)
169
169
  arguments = MethodArguments.new(args, kwargs, block)
@@ -10,6 +10,12 @@ module RR
10
10
  false
11
11
  end
12
12
  end
13
+
14
+ def accept_kwargs?(subject_class, method_name)
15
+ subject_class.instance_method(method_name).parameters.any? { |t, _| t == :key || t == :keyrest }
16
+ rescue NameError
17
+ true
18
+ end
13
19
  end
14
20
  end
15
21
  end
@@ -31,7 +31,7 @@ module RR
31
31
 
32
32
  def call_original_method
33
33
  if subject_has_original_method?
34
- if KeywordArguments.fully_supported?
34
+ if KeywordArguments.fully_supported? && !kwargs.empty?
35
35
  subject.__send__(original_method_alias_name, *args, **kwargs, &block)
36
36
  else
37
37
  subject.__send__(original_method_alias_name, *args, &block)
@@ -53,7 +53,7 @@ module RR
53
53
  call_original_method
54
54
  else
55
55
  if implementation
56
- if KeywordArguments.fully_supported?
56
+ if KeywordArguments.fully_supported? && kwargs.empty?
57
57
  implementation.call(*args, **kwargs, &block)
58
58
  else
59
59
  implementation.call(*args, &block)
@@ -52,7 +52,7 @@ module RR
52
52
  if double_injection = Injections::DoubleInjection.find(subject_class, method_name)
53
53
  double_injection.bind_method
54
54
  # The DoubleInjection takes care of calling double.method_call
55
- if KeywordArguments.fully_supported?
55
+ if KeywordArguments.fully_supported? && !kwargs.empty?
56
56
  subject.__send__(method_name, *args, **kwargs, &block)
57
57
  else
58
58
  subject.__send__(method_name, *args, &block)
data/lib/rr/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  module RR
2
- VERSION = '3.0.2'.freeze
2
+ VERSION = '3.0.3'.freeze
3
3
  def self.version; VERSION; end
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rr
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.2
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2021-06-18 00:00:00.000000000 Z
13
+ date: 2021-06-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler