rubysl-forwardable 1.0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f8dc4c1445a7bc908a8a5082265c1222e8474f5f
4
+ data.tar.gz: c3ad9fcd21418c1fca9fe5ff09d91bbd35445af8
5
+ SHA512:
6
+ metadata.gz: 672b1e711ad4bb718704a43f7fca3523615407642803d438366ca87899f98e697ed8c5fa7fa3155d4bb89253b60bd432ab4464d71d75ba039391745df859cb8b
7
+ data.tar.gz: 209a0f12c8bd8777d78399703219d01bef83f9ea472faf0449fefaed0268b744b8e481ed2e124caeecea26d51b9159485f15c74b3c28114ce981727e4359e11e
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ before_install:
3
+ - gem update --system
4
+ - gem --version
5
+ - gem install rubysl-bundler
6
+ script: bundle exec mspec spec
7
+ rvm:
8
+ - rbx-nightly-18mode
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rubysl-forwardable.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2013, Brian Shirai
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without
5
+ modification, are permitted provided that the following conditions are met:
6
+
7
+ 1. Redistributions of source code must retain the above copyright notice, this
8
+ list of conditions and the following disclaimer.
9
+ 2. Redistributions in binary form must reproduce the above copyright notice,
10
+ this list of conditions and the following disclaimer in the documentation
11
+ and/or other materials provided with the distribution.
12
+ 3. Neither the name of the library nor the names of its contributors may be
13
+ used to endorse or promote products derived from this software without
14
+ specific prior written permission.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY DIRECT,
20
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23
+ OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24
+ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
25
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # Rubysl::Forwardable
2
+
3
+ TODO: Write a gem description
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rubysl-forwardable'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rubysl-forwardable
18
+
19
+ ## Usage
20
+
21
+ TODO: Write usage instructions here
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1 @@
1
+ require "rubysl/forwardable"
@@ -0,0 +1,2 @@
1
+ require "rubysl/forwardable/forwardable"
2
+ require "rubysl/forwardable/version"
@@ -0,0 +1,218 @@
1
+ # = forwardable - Support for the Delegation Pattern
2
+ #
3
+ # $Release Version: 1.1$
4
+ # $Revision: 11708 $
5
+ # $Date: 2007-02-12 15:01:19 -0800 (Mon, 12 Feb 2007) $
6
+ # by Keiju ISHITSUKA(keiju@ishitsuka.com)
7
+ #
8
+ # Documentation by James Edward Gray II and Gavin Sinclair
9
+ #
10
+ # == Introduction
11
+ #
12
+ # This library allows you delegate method calls to an object, on a method by
13
+ # method basis. You can use Forwardable to setup this delegation at the class
14
+ # level, or SingleForwardable to handle it at the object level.
15
+ #
16
+ # == Notes
17
+ #
18
+ # Be advised, RDoc will not detect delegated methods.
19
+ #
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>
23
+ #
24
+ # == Examples
25
+ #
26
+ # === Forwardable
27
+ #
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.
33
+ #
34
+ # class Queue
35
+ # extend Forwardable
36
+ #
37
+ # def initialize
38
+ # @q = [ ] # prepare delegate object
39
+ # end
40
+ #
41
+ # # setup prefered interface, enq() and deq()...
42
+ # def_delegator :@q, :push, :enq
43
+ # def_delegator :@q, :shift, :deq
44
+ #
45
+ # # support some general Array methods that fit Queues well
46
+ # def_delegators :@q, :clear, :first, :push, :shift, :size
47
+ # end
48
+ #
49
+ # q = Queue.new
50
+ # q.enq 1, 2, 3, 4, 5
51
+ # q.push 6
52
+ #
53
+ # q.shift # => 1
54
+ # while q.size > 0
55
+ # puts q.deq
56
+ # end
57
+ #
58
+ # q.enq "Ruby", "Perl", "Python"
59
+ # puts q.first
60
+ # q.clear
61
+ # puts q.first
62
+ #
63
+ # <i>Prints:</i>
64
+ #
65
+ # 2
66
+ # 3
67
+ # 4
68
+ # 5
69
+ # 6
70
+ # Ruby
71
+ # nil
72
+ #
73
+ # === SingleForwardable
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
+ # <i>Prints:</i>
81
+ #
82
+ # Howdy!
83
+
84
+ #
85
+ # The Forwardable module provides delegation of specified
86
+ # methods to a designated object, using the methods #def_delegator
87
+ # and #def_delegators.
88
+ #
89
+ # For example, say you have a class RecordCollection which
90
+ # contains an array <tt>@records</tt>. You could provide the lookup method
91
+ # #record_number(), which simply calls #[] on the <tt>@records</tt>
92
+ # array, like this:
93
+ #
94
+ # class RecordCollection
95
+ # extend Forwardable
96
+ # def_delegator :@records, :[], :record_number
97
+ # end
98
+ #
99
+ # Further, if you wish to provide the methods #size, #<<, and #map,
100
+ # all of which delegate to @records, this is how you can do it:
101
+ #
102
+ # class RecordCollection
103
+ # # extend Forwardable, but we did that above
104
+ # def_delegators :@records, :size, :<<, :map
105
+ # end
106
+ #
107
+ # Also see the example at forwardable.rb.
108
+ #
109
+ module Forwardable
110
+
111
+ @debug = nil
112
+ class<<self
113
+ # force Forwardable to show up in stack backtraces of delegated methods
114
+ attr_accessor :debug
115
+ end
116
+
117
+ #
118
+ # Shortcut for defining multiple delegator methods, but with no
119
+ # provision for using a different name. The following two code
120
+ # samples have the same effect:
121
+ #
122
+ # def_delegators :@records, :size, :<<, :map
123
+ #
124
+ # def_delegator :@records, :size
125
+ # def_delegator :@records, :<<
126
+ # def_delegator :@records, :map
127
+ #
128
+ # See the examples at Forwardable and forwardable.rb.
129
+ #
130
+ def def_instance_delegators(accessor, *methods)
131
+ for method in methods
132
+ def_instance_delegator(accessor, method)
133
+ end
134
+ end
135
+
136
+ #
137
+ # Defines a method _method_ which delegates to _obj_ (i.e. it calls
138
+ # the method of the same name in _obj_). If _new_name_ is
139
+ # provided, it is used as the name for the delegate method.
140
+ #
141
+ # See the examples at Forwardable and forwardable.rb.
142
+ #
143
+ def def_instance_delegator(accessor, method, ali = method)
144
+ accessor = accessor.id2name if accessor.kind_of?(Integer)
145
+ method = method.id2name if method.kind_of?(Integer)
146
+ ali = ali.id2name if ali.kind_of?(Integer)
147
+
148
+ module_eval(<<-EOS, "(__FORWARDABLE__)", 1)
149
+ def #{ali}(*args, &block)
150
+ begin
151
+ #{accessor}.__send__(:#{method}, *args, &block)
152
+ rescue Exception
153
+ $@.delete_if{|s| /^\\(__FORWARDABLE__\\):/ =~ s} unless Forwardable::debug
154
+ Kernel::raise
155
+ end
156
+ end
157
+ EOS
158
+ end
159
+
160
+ alias def_delegators def_instance_delegators
161
+ alias def_delegator def_instance_delegator
162
+ end
163
+
164
+ #
165
+ # The SingleForwardable module provides delegation of specified
166
+ # methods to a designated object, using the methods #def_delegator
167
+ # and #def_delegators. This module is similar to Forwardable, but it works on
168
+ # objects themselves, instead of their defining classes.
169
+ #
170
+ # Also see the example at forwardable.rb.
171
+ #
172
+ module SingleForwardable
173
+ #
174
+ # Shortcut for defining multiple delegator methods, but with no
175
+ # provision for using a different name. The following two code
176
+ # samples have the same effect:
177
+ #
178
+ # single_forwardable.def_delegators :@records, :size, :<<, :map
179
+ #
180
+ # single_forwardable.def_delegator :@records, :size
181
+ # single_forwardable.def_delegator :@records, :<<
182
+ # single_forwardable.def_delegator :@records, :map
183
+ #
184
+ # See the example at forwardable.rb.
185
+ #
186
+ def def_singleton_delegators(accessor, *methods)
187
+ for method in methods
188
+ def_singleton_delegator(accessor, method)
189
+ end
190
+ end
191
+
192
+ #
193
+ # Defines a method _method_ which delegates to _obj_ (i.e. it calls
194
+ # the method of the same name in _obj_). If _new_name_ is
195
+ # provided, it is used as the name for the delegate method.
196
+ #
197
+ # See the example at forwardable.rb.
198
+ #
199
+ def def_singleton_delegator(accessor, method, ali = method)
200
+ accessor = accessor.id2name if accessor.kind_of?(Integer)
201
+ method = method.id2name if method.kind_of?(Integer)
202
+ ali = ali.id2name if ali.kind_of?(Integer)
203
+
204
+ instance_eval(<<-EOS, "(__FORWARDABLE__)", 1)
205
+ def #{ali}(*args, &block)
206
+ begin
207
+ #{accessor}.__send__(:#{method}, *args,&block)
208
+ rescue Exception
209
+ $@.delete_if{|s| /^\\(__FORWARDABLE__\\):/ =~ s} unless Forwardable::debug
210
+ Kernel::raise
211
+ end
212
+ end
213
+ EOS
214
+ end
215
+
216
+ alias def_delegators def_singleton_delegators
217
+ alias def_delegator def_singleton_delegator
218
+ end
@@ -0,0 +1,5 @@
1
+ module RubySL
2
+ module Forwardable
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ require './lib/rubysl/forwardable/version'
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rubysl-forwardable"
6
+ spec.version = RubySL::Forwardable::VERSION
7
+ spec.authors = ["Brian Shirai"]
8
+ spec.email = ["brixen@gmail.com"]
9
+ spec.description = %q{Ruby standard library forwardable.}
10
+ spec.summary = %q{Ruby standard library forwardable.}
11
+ spec.homepage = "https://github.com/rubysl/rubysl-forwardable"
12
+ spec.license = "BSD"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "mspec", "~> 1.5"
22
+ spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
23
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubysl-forwardable
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Brian Shirai
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-25 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: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.5'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
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: '1.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: '1.0'
69
+ description: Ruby standard library forwardable.
70
+ email:
71
+ - brixen@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - .gitignore
77
+ - .travis.yml
78
+ - Gemfile
79
+ - LICENSE
80
+ - README.md
81
+ - Rakefile
82
+ - lib/forwardable.rb
83
+ - lib/rubysl/forwardable.rb
84
+ - lib/rubysl/forwardable/forwardable.rb
85
+ - lib/rubysl/forwardable/version.rb
86
+ - rubysl-forwardable.gemspec
87
+ homepage: https://github.com/rubysl/rubysl-forwardable
88
+ licenses:
89
+ - BSD
90
+ metadata: {}
91
+ post_install_message:
92
+ rdoc_options: []
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ required_rubygems_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirements: []
106
+ rubyforge_project:
107
+ rubygems_version: 2.0.7
108
+ signing_key:
109
+ specification_version: 4
110
+ summary: Ruby standard library forwardable.
111
+ test_files: []