rubysl-forwardable 2.0.0 → 2.0.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
  SHA1:
3
- metadata.gz: 62ca4e7f89156c2691cd34cefde13fa0c6ad7d84
4
- data.tar.gz: df4d7a3df9c54e3855c610f4691535d83eb6b7f4
3
+ metadata.gz: 1716ce3c82dd24107c6676b126a1cf852e630791
4
+ data.tar.gz: 7044d2cc7f42591cb6ce97f3b9b4b135de895ea5
5
5
  SHA512:
6
- metadata.gz: 2d9d5fdc5ff98d24a346a1be08fe93dcb9f81479512037a1fda56392586a0886d09bacc5feb2dd5092cf89aae2396daf6dab0247e33155b0839bae92481a42a5
7
- data.tar.gz: 1dfb2806a207e15079b467cd8d4a822a29a2e6e39487bf74e632cd15e4b73f875d3153ae7428f46973bd9095cbe7cb5dea032838c9bd49d9b54572c2425e480f
6
+ metadata.gz: e68085a41e419c75c5feb9e6c7bf36007f647782fa26eaa1b5cc65ec88e6db765ae717c1074dbd3b4effad4df6810e87bbd10239dad3eb2c5144c21f7ee12835
7
+ data.tar.gz: 2276f86a3bc797e239b5bfdbf84c4a8a5fbe6865f8d39ae3f73d375dc134b416c1b9d4cf1cff5e0b5f60eb8438994cf0d81f77300cee3bdfdd14a1a530ce47e6
@@ -1,7 +1,14 @@
1
1
  language: ruby
2
2
  env:
3
3
  - RUBYLIB=lib
4
- script: bundle exec mspec
4
+ - RUBYLIB=
5
+ script: mspec spec
5
6
  rvm:
6
- - 1.9.3
7
- - rbx-nightly-19mode
7
+ - 2.0.0
8
+ - rbx-2.1.1
9
+ matrix:
10
+ exclude:
11
+ - rvm: 2.0.0
12
+ env: RUBYLIB=lib
13
+ - rvm: rbx-2.1.1
14
+ env: RUBYLIB=
@@ -1,35 +1,65 @@
1
1
  #
2
2
  # forwardable.rb -
3
- # $Release Version: 1.1$
4
- # $Revision: 31833 $
5
- # by Keiju ISHITSUKA(keiju@ishitsuka.com)
6
- # original definition by delegator.rb
3
+ # $Release Version: 1.1$
4
+ # $Revision: 40906 $
5
+ # by Keiju ISHITSUKA(keiju@ishitsuka.com)
6
+ # original definition by delegator.rb
7
7
  # Revised by Daniel J. Berger with suggestions from Florian Gross.
8
8
  #
9
9
  # Documentation by James Edward Gray II and Gavin Sinclair
10
+
11
+
12
+
13
+ # The Forwardable module provides delegation of specified
14
+ # methods to a designated object, using the methods #def_delegator
15
+ # and #def_delegators.
10
16
  #
11
- # == Introduction
17
+ # For example, say you have a class RecordCollection which
18
+ # contains an array <tt>@records</tt>. You could provide the lookup method
19
+ # #record_number(), which simply calls #[] on the <tt>@records</tt>
20
+ # array, like this:
12
21
  #
13
- # This library allows you delegate method calls to an object, on a method by
14
- # method basis.
22
+ # require 'forwardable'
15
23
  #
16
- # == Notes
24
+ # class RecordCollection
25
+ # attr_accessor :records
26
+ # extend Forwardable
27
+ # def_delegator :@records, :[], :record_number
28
+ # end
17
29
  #
18
- # Be advised, RDoc will not detect delegated methods.
30
+ # We can use the lookup method like so:
31
+ #
32
+ # r = RecordCollection.new
33
+ # r.records = [4,5,6]
34
+ # r.record_number(0) # => 4
35
+ #
36
+ # Further, if you wish to provide the methods #size, #<<, and #map,
37
+ # all of which delegate to @records, this is how you can do it:
38
+ #
39
+ # class RecordCollection # re-open RecordCollection class
40
+ # def_delegators :@records, :size, :<<, :map
41
+ # end
19
42
  #
20
- # <b>forwardable.rb provides single-method delegation via the
21
- # def_delegator() and def_delegators() methods. For full-class
22
- # delegation via DelegateClass(), see delegate.rb.</b>
43
+ # r = RecordCollection.new
44
+ # r.records = [1,2,3]
45
+ # r.record_number(0) # => 1
46
+ # r.size # => 3
47
+ # r << 4 # => [1, 2, 3, 4]
48
+ # r.map { |x| x * 2 } # => [2, 4, 6, 8]
23
49
  #
24
- # == Examples
50
+ # You can even extend regular objects with Forwardable.
25
51
  #
26
- # === Forwardable
52
+ # my_hash = Hash.new
53
+ # my_hash.extend Forwardable # prepare object for delegation
54
+ # my_hash.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts()
55
+ # my_hash.puts "Howdy!"
27
56
  #
28
- # Forwardable makes building a new class based on existing work, with a proper
29
- # interface, almost trivial. We want to rely on what has come before obviously,
30
- # but with delegation we can take just the methods we need and even rename them
31
- # as appropriate. In many cases this is preferable to inheritance, which gives
32
- # us the entire old interface, even if much of it isn't needed.
57
+ # == Another example
58
+ #
59
+ # We want to rely on what has come before obviously, but with delegation we can
60
+ # take just the methods we need and even rename them as appropriate. In many
61
+ # cases this is preferable to inheritance, which gives us the entire old
62
+ # interface, even if much of it isn't needed.
33
63
  #
34
64
  # class Queue
35
65
  # extend Forwardable
@@ -60,7 +90,7 @@
60
90
  # q.clear
61
91
  # puts q.first
62
92
  #
63
- # <i>Prints:</i>
93
+ # This should output:
64
94
  #
65
95
  # 2
66
96
  # 3
@@ -70,72 +100,24 @@
70
100
  # Ruby
71
101
  # nil
72
102
  #
73
- # SingleForwardable can be used to setup delegation at the object level as well.
74
- #
75
- # printer = String.new
76
- # printer.extend SingleForwardable # prepare object for delegation
77
- # printer.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts()
78
- # printer.puts "Howdy!"
79
- #
80
- # Also, SingleForwardable can be use to Class or Module.
81
- #
82
- # module Facade
83
- # extend SingleForwardable
84
- # def_delegator :Implementation, :service
85
- #
86
- # class Implementation
87
- # def service...
88
- # end
89
- # end
90
- #
91
- # If you want to use both Forwardable and SingleForwardable, you can
92
- # use methods def_instance_delegator and def_single_delegator, etc.
93
- #
94
- # If the object isn't a Module and Class, You can too extend
95
- # Forwardable module.
96
- # printer = String.new
97
- # printer.extend Forwardable # prepare object for delegation
98
- # printer.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts()
99
- # printer.puts "Howdy!"
100
- #
101
- # <i>Prints:</i>
102
- #
103
- # Howdy!
104
-
105
- #
106
- # The Forwardable module provides delegation of specified
107
- # methods to a designated object, using the methods #def_delegator
108
- # and #def_delegators.
109
- #
110
- # For example, say you have a class RecordCollection which
111
- # contains an array <tt>@records</tt>. You could provide the lookup method
112
- # #record_number(), which simply calls #[] on the <tt>@records</tt>
113
- # array, like this:
114
- #
115
- # class RecordCollection
116
- # extend Forwardable
117
- # def_delegator :@records, :[], :record_number
118
- # end
103
+ # == Notes
119
104
  #
120
- # Further, if you wish to provide the methods #size, #<<, and #map,
121
- # all of which delegate to @records, this is how you can do it:
105
+ # Be advised, RDoc will not detect delegated methods.
122
106
  #
123
- # class RecordCollection
124
- # # extend Forwardable, but we did that above
125
- # def_delegators :@records, :size, :<<, :map
126
- # end
127
- # f = Foo.new
128
- # f.printf ...
129
- # f.gets
130
- # f.content_at(1)
107
+ # +forwardable.rb+ provides single-method delegation via the def_delegator and
108
+ # def_delegators methods. For full-class delegation via DelegateClass, see
109
+ # +delegate.rb+.
131
110
  #
132
- # Also see the example at forwardable.rb.
133
-
134
111
  module Forwardable
112
+ # Version of +forwardable.rb+
135
113
  FORWARDABLE_VERSION = "1.1.0"
136
114
 
115
+ FILE_REGEXP = %r"#{Regexp.quote(__FILE__)}"
116
+
137
117
  @debug = nil
138
118
  class << self
119
+ # If true, <tt>__FILE__</tt> will remain in the backtrace in the event an
120
+ # Exception is raised.
139
121
  attr_accessor :debug
140
122
  end
141
123
 
@@ -175,15 +157,34 @@ module Forwardable
175
157
  end
176
158
  end
177
159
 
160
+ # Define +method+ as delegator instance method with an optional
161
+ # alias name +ali+. Method calls to +ali+ will be delegated to
162
+ # +accessor.method+.
163
+ #
164
+ # class MyQueue
165
+ # extend Forwardable
166
+ # attr_reader :queue
167
+ # def initialize
168
+ # @queue = []
169
+ # end
170
+ #
171
+ # def_delegator :@queue, :push, :mypush
172
+ # end
173
+ #
174
+ # q = MyQueue.new
175
+ # q.mypush 42
176
+ # q.queue #=> [42]
177
+ # q.push 23 #=> NoMethodError
178
+ #
178
179
  def def_instance_delegator(accessor, method, ali = method)
179
180
  line_no = __LINE__; str = %{
180
181
  def #{ali}(*args, &block)
181
- begin
182
- #{accessor}.__send__(:#{method}, *args, &block)
183
- rescue Exception
184
- $@.delete_if{|s| %r"#{Regexp.quote(__FILE__)}"o =~ s} unless Forwardable::debug
185
- ::Kernel::raise
186
- end
182
+ begin
183
+ #{accessor}.__send__(:#{method}, *args, &block)
184
+ rescue Exception
185
+ $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug
186
+ ::Kernel::raise
187
+ end
187
188
  end
188
189
  }
189
190
  # If it's not a class or module, it's an instance
@@ -200,9 +201,30 @@ module Forwardable
200
201
  alias def_delegator def_instance_delegator
201
202
  end
202
203
 
204
+ # SingleForwardable can be used to setup delegation at the object level as well.
205
+ #
206
+ # printer = String.new
207
+ # printer.extend SingleForwardable # prepare object for delegation
208
+ # printer.def_delegator "STDOUT", "puts" # add delegation for STDOUT.puts()
209
+ # printer.puts "Howdy!"
210
+ #
211
+ # Also, SingleForwardable can be used to set up delegation for a Class or Module.
212
+ #
213
+ # class Implementation
214
+ # def self.service
215
+ # puts "serviced!"
216
+ # end
217
+ # end
203
218
  #
204
- # Usage of The SingleForwardable is like Fowadable module.
219
+ # module Facade
220
+ # extend SingleForwardable
221
+ # def_delegator :Implementation, :service
222
+ # end
223
+ #
224
+ # Facade.service #=> serviced!
205
225
  #
226
+ # If you want to use both Forwardable and SingleForwardable, you can
227
+ # use methods def_instance_delegator and def_single_delegator, etc.
206
228
  module SingleForwardable
207
229
  # Takes a hash as its argument. The key is a symbol or an array of
208
230
  # symbols. These symbols correspond to method names. The value is
@@ -240,20 +262,21 @@ module SingleForwardable
240
262
  end
241
263
  end
242
264
 
265
+ # :call-seq:
266
+ # def_single_delegator(accessor, method, new_name=method)
243
267
  #
244
- # Defines a method _method_ which delegates to _obj_ (i.e. it calls
245
- # the method of the same name in _obj_). If _new_name_ is
268
+ # Defines a method _method_ which delegates to _accessor_ (i.e. it calls
269
+ # the method of the same name in _accessor_). If _new_name_ is
246
270
  # provided, it is used as the name for the delegate method.
247
- #
248
271
  def def_single_delegator(accessor, method, ali = method)
249
- line_no = __LINE__; str = %{
272
+ str = %{
250
273
  def #{ali}(*args, &block)
251
- begin
252
- #{accessor}.__send__(:#{method}, *args, &block)
253
- rescue Exception
254
- $@.delete_if{|s| %r"#{Regexp.quote(__FILE__)}"o =~ s} unless Forwardable::debug
255
- ::Kernel::raise
256
- end
274
+ begin
275
+ #{accessor}.__send__(:#{method}, *args, &block)
276
+ rescue Exception
277
+ $@.delete_if{|s| Forwardable::FILE_REGEXP =~ s} unless Forwardable::debug
278
+ ::Kernel::raise
279
+ end
257
280
  end
258
281
  }
259
282
 
@@ -264,7 +287,3 @@ module SingleForwardable
264
287
  alias def_delegators def_single_delegators
265
288
  alias def_delegator def_single_delegator
266
289
  end
267
-
268
-
269
-
270
-
@@ -1,5 +1,5 @@
1
1
  module RubySL
2
2
  module Forwardable
3
- VERSION = "2.0.0"
3
+ VERSION = "2.0.1"
4
4
  end
5
5
  end
@@ -16,7 +16,10 @@ Gem::Specification.new do |spec|
16
16
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
17
  spec.require_paths = ["lib"]
18
18
 
19
+ spec.required_ruby_version = "~> 2.0"
20
+
19
21
  spec.add_development_dependency "bundler", "~> 1.3"
20
22
  spec.add_development_dependency "rake", "~> 10.0"
21
23
  spec.add_development_dependency "mspec", "~> 1.5"
22
- end
24
+ spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
25
+ end
metadata CHANGED
@@ -1,57 +1,71 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubysl-forwardable
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Shirai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-04 00:00:00.000000000 Z
11
+ date: 2013-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '10.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: mspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ~>
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
47
  version: '1.5'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ~>
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubysl-prettyprint
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
55
69
  description: Ruby standard library forwardable.
56
70
  email:
57
71
  - brixen@gmail.com
@@ -59,8 +73,8 @@ executables: []
59
73
  extensions: []
60
74
  extra_rdoc_files: []
61
75
  files:
62
- - .gitignore
63
- - .travis.yml
76
+ - ".gitignore"
77
+ - ".travis.yml"
64
78
  - Gemfile
65
79
  - LICENSE
66
80
  - README.md
@@ -80,12 +94,12 @@ require_paths:
80
94
  - lib
81
95
  required_ruby_version: !ruby/object:Gem::Requirement
82
96
  requirements:
83
- - - '>='
97
+ - - "~>"
84
98
  - !ruby/object:Gem::Version
85
- version: '0'
99
+ version: '2.0'
86
100
  required_rubygems_version: !ruby/object:Gem::Requirement
87
101
  requirements:
88
- - - '>='
102
+ - - ">="
89
103
  - !ruby/object:Gem::Version
90
104
  version: '0'
91
105
  requirements: []
@@ -95,3 +109,4 @@ signing_key:
95
109
  specification_version: 4
96
110
  summary: Ruby standard library forwardable.
97
111
  test_files: []
112
+ has_rdoc: