forwardable 1.2.0 → 1.3.0

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: c08b5a019cfdbf0cfcf51bfb66d6500065d8f6492fc50a8e481d1e427a6d2df8
4
- data.tar.gz: 9a25242aae4c2214ffffc7027eb680a9e09f0fda47f1bcf35cd15cea06c35ac9
3
+ metadata.gz: 8b280e81b85cc1b7991cae97589999483f7e7e8fcf0296f4c40328504a9da9a3
4
+ data.tar.gz: b96bcbf1ee2f712336e260ce5ad71f6d54c65e6133278feb10c93e8cb4b0a373
5
5
  SHA512:
6
- metadata.gz: a23ba5a69ad8fe490e81bb01815fda286e97259c7010e48c3491c9e2537a1a7cbf78da7805f07c6ac302cab8458152c9343e0f19d3669269afc33c94a11d7b42
7
- data.tar.gz: 1e809b3fd7e1ff732cbd9abb384e1ad914d1bf53b4ce23973989741414cfe3015ce7cb744222dd4694b58ee1b17ec0e722406770b908ea6cafc1c19387111c3e
6
+ metadata.gz: 5d6487cca72bb5f315d638733a34f4ff553c53cb1caa84938ca639d746b9defe76bdc37381afce3dacb43331a6cd69f7cb6fa489170167c1b4777f8c9d90443a
7
+ data.tar.gz: f65f9418fd7c1c9c3b27adb398768f41bd5c04479b8306f2ec454a4c9c98e10eaf933d92db64b279e4c433e19fea4d5b7ae4a5da6f2ac9a342e50c175bebdb9f
@@ -1,8 +1,8 @@
1
1
  begin
2
- require_relative "lib/forwardable"
2
+ require_relative "lib/forwardable/version"
3
3
  rescue LoadError
4
4
  # for Ruby core repository
5
- require_relative "../forwardable"
5
+ require_relative "version"
6
6
  end
7
7
 
8
8
  Gem::Specification.new do |spec|
@@ -16,11 +16,8 @@ Gem::Specification.new do |spec|
16
16
  spec.homepage = "https://github.com/ruby/forwardable"
17
17
  spec.license = "BSD-2-Clause"
18
18
 
19
- spec.files = [".gitignore", ".travis.yml", "Gemfile", "LICENSE.txt", "README.md", "Rakefile", "bin/console", "bin/setup", "forwardable.gemspec", "lib/forwardable.rb", "lib/forwardable/impl.rb"]
19
+ spec.files = ["forwardable.gemspec", "lib/forwardable.rb", "lib/forwardable/impl.rb", "lib/forwardable/version.rb"]
20
20
  spec.bindir = "exe"
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
-
24
- spec.add_development_dependency "bundler"
25
- spec.add_development_dependency "rake"
26
23
  end
@@ -57,10 +57,9 @@
57
57
  #
58
58
  # == Another example
59
59
  #
60
- # We want to rely on what has come before obviously, but with delegation we can
61
- # take just the methods we need and even rename them as appropriate. In many
62
- # cases this is preferable to inheritance, which gives us the entire old
63
- # interface, even if much of it isn't needed.
60
+ # You could use Forwardable as an alternative to inheritance, when you don't want
61
+ # to inherit all methods from the superclass. For instance, here is how you might
62
+ # add a range of +Array+ instance methods to a new class +Queue+:
64
63
  #
65
64
  # class Queue
66
65
  # extend Forwardable
@@ -111,10 +110,7 @@
111
110
  #
112
111
  module Forwardable
113
112
  require 'forwardable/impl'
114
-
115
- # Version of +forwardable.rb+
116
- VERSION = "1.2.0"
117
- FORWARDABLE_VERSION = VERSION
113
+ require "forwardable/version"
118
114
 
119
115
  @debug = nil
120
116
  class << self
@@ -123,7 +119,8 @@ module Forwardable
123
119
  end
124
120
 
125
121
  # Takes a hash as its argument. The key is a symbol or an array of
126
- # symbols. These symbols correspond to method names. The value is
122
+ # symbols. These symbols correspond to method names, instance variable
123
+ # names, or constant names (see def_delegator). The value is
127
124
  # the accessor to which the methods will be delegated.
128
125
  #
129
126
  # :call-seq:
@@ -152,18 +149,20 @@ module Forwardable
152
149
  # def_delegator :@records, :map
153
150
  #
154
151
  def def_instance_delegators(accessor, *methods)
155
- methods.delete("__send__")
156
- methods.delete("__id__")
157
- for method in methods
152
+ methods.each do |method|
153
+ next if /\A__(?:send|id)__\z/ =~ method
158
154
  def_instance_delegator(accessor, method)
159
155
  end
160
156
  end
161
157
 
162
158
  # Define +method+ as delegator instance method with an optional
163
159
  # alias name +ali+. Method calls to +ali+ will be delegated to
164
- # +accessor.method+.
160
+ # +accessor.method+. +accessor+ should be a method name, instance
161
+ # variable name, or constant name. Use the full path to the
162
+ # constant if providing the constant name.
165
163
  #
166
164
  # class MyQueue
165
+ # CONST = 1
167
166
  # extend Forwardable
168
167
  # attr_reader :queue
169
168
  # def initialize
@@ -171,18 +170,22 @@ module Forwardable
171
170
  # end
172
171
  #
173
172
  # def_delegator :@queue, :push, :mypush
173
+ # def_delegator 'MyQueue::CONST', :to_i
174
174
  # end
175
175
  #
176
176
  # q = MyQueue.new
177
177
  # q.mypush 42
178
178
  # q.queue #=> [42]
179
179
  # q.push 23 #=> NoMethodError
180
+ # q.to_i #=> 1
180
181
  #
181
182
  def def_instance_delegator(accessor, method, ali = method)
182
183
  gen = Forwardable._delegator_method(self, accessor, method, ali)
183
184
 
184
185
  # If it's not a class or module, it's an instance
185
- (Module === self ? self : singleton_class).module_eval(&gen)
186
+ mod = Module === self ? self : singleton_class
187
+ mod.module_eval(&gen)
188
+ mod.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
186
189
  end
187
190
 
188
191
  alias delegate instance_delegate
@@ -222,7 +225,7 @@ module Forwardable
222
225
  #{pre}
223
226
  begin
224
227
  #{accessor}
225
- end#{method_call}#{FILTER_EXCEPTION}
228
+ end#{method_call}
226
229
  end
227
230
  end
228
231
  end;
@@ -284,9 +287,8 @@ module SingleForwardable
284
287
  # def_delegator :@records, :map
285
288
  #
286
289
  def def_single_delegators(accessor, *methods)
287
- methods.delete("__send__")
288
- methods.delete("__id__")
289
- for method in methods
290
+ methods.each do |method|
291
+ next if /\A__(?:send|id)__\z/ =~ method
290
292
  def_single_delegator(accessor, method)
291
293
  end
292
294
  end
@@ -301,6 +303,7 @@ module SingleForwardable
301
303
  gen = Forwardable._delegator_method(self, accessor, method, ali)
302
304
 
303
305
  instance_eval(&gen)
306
+ singleton_class.send(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7'
304
307
  end
305
308
 
306
309
  alias delegate single_delegate
@@ -1,13 +1,5 @@
1
1
  # :stopdoc:
2
2
  module Forwardable
3
- FILE_REGEXP = %r"#{Regexp.quote(File.dirname(__FILE__))}"
4
- FILTER_EXCEPTION = <<-'END'
5
-
6
- rescue ::Exception
7
- $@.delete_if {|s| ::Forwardable::FILE_REGEXP =~ s} unless ::Forwardable::debug
8
- ::Kernel::raise
9
- END
10
-
11
3
  def self._valid_method?(method)
12
4
  catch {|tag|
13
5
  eval("BEGIN{throw tag}; ().#{method}", binding, __FILE__, __LINE__)
@@ -0,0 +1,5 @@
1
+ module Forwardable
2
+ # Version of +forwardable.rb+
3
+ VERSION = "1.3.0"
4
+ FORWARDABLE_VERSION = VERSION
5
+ end
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forwardable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keiju ISHITSUKA
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-12-04 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: bundler
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
11
+ date: 2019-11-30 00:00:00.000000000 Z
12
+ dependencies: []
41
13
  description: Provides delegation of specified methods to a designated object.
42
14
  email:
43
15
  - keiju@ruby-lang.org
@@ -45,17 +17,10 @@ executables: []
45
17
  extensions: []
46
18
  extra_rdoc_files: []
47
19
  files:
48
- - ".gitignore"
49
- - ".travis.yml"
50
- - Gemfile
51
- - LICENSE.txt
52
- - README.md
53
- - Rakefile
54
- - bin/console
55
- - bin/setup
56
20
  - forwardable.gemspec
57
21
  - lib/forwardable.rb
58
22
  - lib/forwardable/impl.rb
23
+ - lib/forwardable/version.rb
59
24
  homepage: https://github.com/ruby/forwardable
60
25
  licenses:
61
26
  - BSD-2-Clause
@@ -75,8 +40,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
40
  - !ruby/object:Gem::Version
76
41
  version: '0'
77
42
  requirements: []
78
- rubyforge_project:
79
- rubygems_version: 2.7.6
43
+ rubygems_version: 3.0.3
80
44
  signing_key:
81
45
  specification_version: 4
82
46
  summary: Provides delegation of specified methods to a designated object.
data/.gitignore DELETED
@@ -1,8 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
@@ -1,6 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.5.1
5
- - ruby-head
6
- before_install: gem install bundler -v 1.16.2
data/Gemfile DELETED
@@ -1,5 +0,0 @@
1
- source "https://rubygems.org"
2
-
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
-
5
- gemspec
@@ -1,22 +0,0 @@
1
- Copyright (C) 1993-2013 Yukihiro Matsumoto. All rights reserved.
2
-
3
- Redistribution and use in source and binary forms, with or without
4
- modification, are permitted provided that the following conditions
5
- are met:
6
- 1. Redistributions of source code must retain the above copyright
7
- notice, this list of conditions and the following disclaimer.
8
- 2. Redistributions in binary form must reproduce the above copyright
9
- notice, this list of conditions and the following disclaimer in the
10
- documentation and/or other materials provided with the distribution.
11
-
12
- THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
13
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
14
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
15
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
16
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
17
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
18
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
19
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
21
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
22
- SUCH DAMAGE.
data/README.md DELETED
@@ -1,79 +0,0 @@
1
- # Forwardable
2
-
3
- The Forwardable module provides delegation of specified methods to a designated object, using the methods #def_delegator and #def_delegators.
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- ```ruby
10
- gem 'forwardable'
11
- ```
12
-
13
- And then execute:
14
-
15
- $ bundle
16
-
17
- Or install it yourself as:
18
-
19
- $ gem install forwardable
20
-
21
- ## Usage
22
-
23
- For example, say you have a class RecordCollection which contains an array <tt>@records</tt>. You could provide the lookup ethod `#record_number()`, which simply calls #[] on the <tt>@records</tt> array, like this:
24
-
25
- ```
26
- require 'forwardable'
27
-
28
- class RecordCollection
29
- attr_accessor :records
30
- extend Forwardable
31
- def_delegator :@records, :[], :record_number
32
- end
33
- ```
34
-
35
- We can use the lookup method like so:
36
-
37
- ```
38
- r = RecordCollection.new
39
- r.records = [4,5,6]
40
- r.record_number(0) # => 4
41
- ```
42
-
43
- Further, if you wish to provide the methods #size, #<<, and #map, all of which delegate to @records, this is how you can do it:
44
-
45
- ```
46
- class RecordCollection # re-open RecordCollection class
47
- def_delegators :@records, :size, :<<, :map
48
- end
49
-
50
- r = RecordCollection.new
51
- r.records = [1,2,3]
52
- r.record_number(0) # => 1
53
- r.size # => 3
54
- r << 4 # => [1, 2, 3, 4]
55
- r.map { |x| x * 2 } # => [2, 4, 6, 8]
56
- ```
57
-
58
- You can even extend regular objects with Forwardable.
59
-
60
- ```
61
- my_hash = Hash.new
62
- my_hash.extend Forwardable # prepare object for delegation
63
- my_hash.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts()
64
- my_hash.puts "Howdy!"
65
- ```
66
-
67
- ## Development
68
-
69
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
70
-
71
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
72
-
73
- ## Contributing
74
-
75
- Bug reports and pull requests are welcome on GitHub at https://github.com/ruby/forwardable.
76
-
77
- ## License
78
-
79
- The gem is available as open source under the terms of the [2-Clause BSD License](https://opensource.org/licenses/BSD-2-Clause).
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test" << "test/lib"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/test_*.rb"]
8
- end
9
-
10
- task :default => :test
@@ -1,7 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require_relative "../lib/forwardable"
5
-
6
- require "irb"
7
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install