forwardable 1.3.2 → 1.4.0

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: 8729830e9c34626b9912c4ea6424e9edadd6c86d6dc6816ee4c2b1defc5923a1
4
- data.tar.gz: 69b7122793c8d0b6dac6a4f03b20c70481f1c1ec3ac4f8641639249d5c7f9024
3
+ metadata.gz: 6f67b8d19bf47af7db2c6fa95434a20fac51dbff63ba5d6366de98f7c4dd8170
4
+ data.tar.gz: b946e9f5faaf788fe9cc39bc5782846b77e12e1e82e51fa4a975d91c893f651a
5
5
  SHA512:
6
- metadata.gz: 67bb1876e2ac2da9367b3744332ee376de7ffebeaaf20d7bbc01a5af537d087c4bcbed6eebaad140a4c20cd1f8dafa46f1250a14c8617e22ee20eda688683045
7
- data.tar.gz: 1a244c0a3ce5227258862e7632fd28d224cf1b2d65f9ec67eabb93e2c6369c177a199ea465f366bc5a15d53177ba1b565b591eb6a1c940a4454bb74cc6488d24
6
+ metadata.gz: 8901d57fed19e8955b8557b1a0a0f50cb97c6edb430aa3f3c5704953d683b2ef6f339648167c6982def47cf8aa8e89431998a0fea4125b1a90b7a3b7f3a8b296
7
+ data.tar.gz: d01d6e8d55e884802f54240d98d91938cea740540f724821bcccd80e0e08c5dbb5b047ec5a87e547256093ab2f18eb0b66d7b1ae974ec3fa9cac951c1d66b150
data/forwardable.gemspec CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.licenses = ["Ruby", "BSD-2-Clause"]
20
20
 
21
21
  spec.required_ruby_version = '>= 2.4.0'
22
- spec.files = ["forwardable.gemspec", "lib/forwardable.rb", "lib/forwardable/impl.rb"]
22
+ spec.files = ["forwardable.gemspec", "lib/forwardable.rb"]
23
23
  spec.bindir = "exe"
24
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
+ spec.executables = []
25
25
  spec.require_paths = ["lib"]
26
26
  end
data/lib/forwardable.rb CHANGED
@@ -76,7 +76,7 @@
76
76
  # def_delegators :@q, :clear, :first, :push, :shift, :size
77
77
  # end
78
78
  #
79
- # q = Queue.new
79
+ # q = Thread::Queue.new
80
80
  # q.enq 1, 2, 3, 4, 5
81
81
  # q.push 6
82
82
  #
@@ -109,11 +109,13 @@
109
109
  # +delegate.rb+.
110
110
  #
111
111
  module Forwardable
112
- require 'forwardable/impl'
113
-
114
112
  # Version of +forwardable.rb+
115
- VERSION = "1.3.2"
113
+ VERSION = "1.4.0"
114
+ VERSION.freeze
115
+
116
+ # Version for backward compatibility
116
117
  FORWARDABLE_VERSION = VERSION
118
+ FORWARDABLE_VERSION.freeze
117
119
 
118
120
  @debug = nil
119
121
  class << self
@@ -188,9 +190,7 @@ module Forwardable
188
190
 
189
191
  # If it's not a class or module, it's an instance
190
192
  mod = Module === self ? self : singleton_class
191
- ret = mod.module_eval(&gen)
192
- mod.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
193
- ret
193
+ mod.module_eval(&gen)
194
194
  end
195
195
 
196
196
  alias delegate instance_delegate
@@ -204,36 +204,33 @@ module Forwardable
204
204
  if Module === obj ?
205
205
  obj.method_defined?(accessor) || obj.private_method_defined?(accessor) :
206
206
  obj.respond_to?(accessor, true)
207
- accessor = "#{accessor}()"
207
+ accessor = "(#{accessor}())"
208
208
  end
209
209
 
210
- method_call = ".__send__(:#{method}, *args, &block)"
211
- if _valid_method?(method)
210
+ args = RUBY_VERSION >= '2.7' ? '...' : '*args, &block'
211
+ method_call = ".__send__(:#{method}, #{args})"
212
+ if method.match?(/\A[_a-zA-Z]\w*[?!]?\z/)
212
213
  loc, = caller_locations(2,1)
213
214
  pre = "_ ="
214
215
  mesg = "#{Module === obj ? obj : obj.class}\##{ali} at #{loc.path}:#{loc.lineno} forwarding to private method "
215
- method_call = "#{<<-"begin;"}\n#{<<-"end;".chomp}"
216
- begin;
217
- unless defined? _.#{method}
218
- ::Kernel.warn #{mesg.dump}"\#{_.class}"'##{method}', uplevel: 1
219
- _#{method_call}
220
- else
221
- _.#{method}(*args, &block)
222
- end
223
- end;
216
+ method_call = <<~RUBY.chomp
217
+ if defined?(_.#{method})
218
+ _.#{method}(#{args})
219
+ else
220
+ ::Kernel.warn #{mesg.dump}"\#{_.class}"'##{method}', uplevel: 1
221
+ _#{method_call}
222
+ end
223
+ RUBY
224
224
  end
225
225
 
226
- _compile_method("#{<<-"begin;"}\n#{<<-"end;"}", __FILE__, __LINE__+1)
227
- begin;
226
+ eval(<<~RUBY, nil, __FILE__, __LINE__ + 1)
228
227
  proc do
229
- def #{ali}(*args, &block)
230
- #{pre}
231
- begin
232
- #{accessor}
233
- end#{method_call}
228
+ def #{ali}(#{args})
229
+ #{pre}#{accessor}
230
+ #{method_call}
234
231
  end
235
232
  end
236
- end;
233
+ RUBY
237
234
  end
238
235
  end
239
236
 
@@ -308,9 +305,7 @@ module SingleForwardable
308
305
  def def_single_delegator(accessor, method, ali = method)
309
306
  gen = Forwardable._delegator_method(self, accessor, method, ali)
310
307
 
311
- ret = instance_eval(&gen)
312
- singleton_class.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
313
- ret
308
+ instance_eval(&gen)
314
309
  end
315
310
 
316
311
  alias delegate single_delegate
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forwardable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.2
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keiju ISHITSUKA
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2020-12-22 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies: []
13
12
  description: Provides delegation of specified methods to a designated object.
14
13
  email:
@@ -19,13 +18,11 @@ extra_rdoc_files: []
19
18
  files:
20
19
  - forwardable.gemspec
21
20
  - lib/forwardable.rb
22
- - lib/forwardable/impl.rb
23
21
  homepage: https://github.com/ruby/forwardable
24
22
  licenses:
25
23
  - Ruby
26
24
  - BSD-2-Clause
27
25
  metadata: {}
28
- post_install_message:
29
26
  rdoc_options: []
30
27
  require_paths:
31
28
  - lib
@@ -40,8 +37,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
40
37
  - !ruby/object:Gem::Version
41
38
  version: '0'
42
39
  requirements: []
43
- rubygems_version: 3.2.2
44
- signing_key:
40
+ rubygems_version: 3.6.9
45
41
  specification_version: 4
46
42
  summary: Provides delegation of specified methods to a designated object.
47
43
  test_files: []
@@ -1,16 +0,0 @@
1
- # :stopdoc:
2
- module Forwardable
3
- def self._valid_method?(method)
4
- catch {|tag|
5
- eval("BEGIN{throw tag}; ().#{method}", binding, __FILE__, __LINE__)
6
- }
7
- rescue SyntaxError
8
- false
9
- else
10
- true
11
- end
12
-
13
- def self._compile_method(src, file, line)
14
- eval(src, nil, file, line)
15
- end
16
- end