forwardable-extended 2.5.0 → 2.6.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 +4 -4
- data/Gemfile +3 -0
- data/Rakefile +3 -0
- data/lib/forwardable/extended/version.rb +1 -1
- data/lib/forwardable/extended.rb +62 -33
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 5a63d4f78c993a050c8b1cc6aa077296fa7acab3
|
|
4
|
+
data.tar.gz: dbd35851e146d851ed4d3b1f0db85a5bfb432666
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d4b9c2dc38d4420b791309886c545b35f1fe9b3ad0211365582f678daed1dee9e84416f39c10949ecbc5421cf85f638cd47068d081d8d74ca75ff246fb3e0764
|
|
7
|
+
data.tar.gz: 0508f825a4a79e5bb26da05da2489646b741cd86dc8ee51cc956b5d1ba1e2901f10ecfc4513048a03244acea35781f7ee2ceb805c1f6a110db80338f4dbc0583
|
data/Gemfile
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------
|
|
1
2
|
# Frozen-string-literal: true
|
|
2
3
|
# Copyright: 2015-2016 Jordon Bedwell - MIT License
|
|
3
4
|
# Encoding: utf-8
|
|
5
|
+
# ----------------------------------------------------------------------------
|
|
4
6
|
|
|
5
7
|
source "https://rubygems.org"
|
|
6
8
|
gem "rake", :require => false
|
|
@@ -14,6 +16,7 @@ group :test do
|
|
|
14
16
|
end
|
|
15
17
|
|
|
16
18
|
group :development do
|
|
19
|
+
gem "luna-rubocop-formatters", :require => false
|
|
17
20
|
gem "rubocop", :github => "bbatsov/rubocop", :require => false
|
|
18
21
|
gem "pry", {
|
|
19
22
|
:require => false
|
data/Rakefile
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------
|
|
1
2
|
# Frozen-string-literal: true
|
|
2
3
|
# Copyright: 2015-2016 Jordon Bedwell - MIT License
|
|
3
4
|
# Encoding: utf-8
|
|
5
|
+
# ----------------------------------------------------------------------------
|
|
4
6
|
|
|
5
7
|
$LOAD_PATH.unshift(File.expand_path("../lib", __FILE__))
|
|
8
|
+
require "luna/rubocop/rake/task"
|
|
6
9
|
require "rspec/core/rake_task"
|
|
7
10
|
|
|
8
11
|
task :default => [:spec]
|
data/lib/forwardable/extended.rb
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
# ----------------------------------------------------------------------------
|
|
1
2
|
# Frozen-string-literal: true
|
|
2
3
|
# Copyright: 2015-2016 Jordon Bedwell - MIT License
|
|
3
4
|
# Encoding: utf-8
|
|
5
|
+
# ----------------------------------------------------------------------------
|
|
4
6
|
|
|
5
7
|
require "forwardable/extended/version"
|
|
6
8
|
require "forwardable"
|
|
@@ -8,9 +10,10 @@ require "forwardable"
|
|
|
8
10
|
module Forwardable
|
|
9
11
|
module Extended
|
|
10
12
|
|
|
13
|
+
# ------------------------------------------------------------------------
|
|
11
14
|
# Make our methods private on the class, there is no reason for public.
|
|
12
|
-
#
|
|
13
|
-
|
|
15
|
+
# ------------------------------------------------------------------------
|
|
16
|
+
|
|
14
17
|
def self.extended(klass)
|
|
15
18
|
instance_methods.each do |method|
|
|
16
19
|
klass.private_class_method(
|
|
@@ -19,10 +22,10 @@ module Forwardable
|
|
|
19
22
|
end
|
|
20
23
|
end
|
|
21
24
|
|
|
25
|
+
# ------------------------------------------------------------------------
|
|
22
26
|
# Delegate using a Rails-like interface.
|
|
23
|
-
#
|
|
24
|
-
|
|
25
|
-
# method - the method you are forwarding.
|
|
27
|
+
# ------------------------------------------------------------------------
|
|
28
|
+
|
|
26
29
|
def rb_delegate(method, to: nil, alias_of: method, **kwd)
|
|
27
30
|
raise ArgumentError, "to must be provided" unless to
|
|
28
31
|
def_delegator(
|
|
@@ -30,10 +33,10 @@ module Forwardable
|
|
|
30
33
|
)
|
|
31
34
|
end
|
|
32
35
|
|
|
36
|
+
# ------------------------------------------------------------------------
|
|
33
37
|
# Delegate a method to a hash and key.
|
|
34
|
-
#
|
|
35
|
-
|
|
36
|
-
# hash - the hash you are delegating to.
|
|
38
|
+
# ------------------------------------------------------------------------
|
|
39
|
+
|
|
37
40
|
def def_hash_delegator(hash, method, key: method, **kwd)
|
|
38
41
|
prefix, suffix, wrap = prepare_delegate(**kwd)
|
|
39
42
|
|
|
@@ -43,14 +46,14 @@ module Forwardable
|
|
|
43
46
|
)
|
|
44
47
|
end
|
|
45
48
|
|
|
46
|
-
class_eval <<-STR, __FILE__, __LINE__ - 9
|
|
49
|
+
class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 9
|
|
47
50
|
def #{method}#{suffix}(*args)
|
|
48
51
|
#{wrap}(
|
|
49
52
|
#{prefix}#{hash}[#{key.inspect}]
|
|
50
53
|
)
|
|
51
54
|
|
|
52
55
|
rescue Exception
|
|
53
|
-
|
|
56
|
+
if !Forwardable.debug && $@ && $@.respond_to?(:delete_if)
|
|
54
57
|
$@.delete_if do |source|
|
|
55
58
|
source =~ %r"#{Regexp.escape(__FILE__)}"o
|
|
56
59
|
end
|
|
@@ -61,10 +64,10 @@ module Forwardable
|
|
|
61
64
|
STR
|
|
62
65
|
end
|
|
63
66
|
|
|
67
|
+
# ------------------------------------------------------------------------
|
|
64
68
|
# Delegate a method to an instance variable.
|
|
65
|
-
#
|
|
66
|
-
|
|
67
|
-
# Note: If you are not doing booleans then don't bother with this.
|
|
69
|
+
# ------------------------------------------------------------------------
|
|
70
|
+
|
|
68
71
|
def def_ivar_delegator(ivar, alias_ = ivar, **kwd)
|
|
69
72
|
prefix, suffix, wrap = prepare_delegate(**kwd)
|
|
70
73
|
|
|
@@ -74,14 +77,14 @@ module Forwardable
|
|
|
74
77
|
)
|
|
75
78
|
end
|
|
76
79
|
|
|
77
|
-
class_eval <<-STR, __FILE__, __LINE__ - 9
|
|
80
|
+
class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 9
|
|
78
81
|
def #{alias_.to_s.gsub(/\A@/, "")}#{suffix}
|
|
79
82
|
#{wrap}(
|
|
80
83
|
#{prefix}#{ivar}
|
|
81
84
|
)
|
|
82
85
|
|
|
83
86
|
rescue Exception
|
|
84
|
-
|
|
87
|
+
if !Forwardable.debug && $@ && $@.respond_to?(:delete_if)
|
|
85
88
|
$@.delete_if do |source|
|
|
86
89
|
source =~ %r"#{Regexp.escape(__FILE__)}"o
|
|
87
90
|
end
|
|
@@ -92,29 +95,29 @@ module Forwardable
|
|
|
92
95
|
STR
|
|
93
96
|
end
|
|
94
97
|
|
|
95
|
-
#
|
|
96
|
-
# alias_ - the name of the method on the current object.
|
|
97
|
-
# args - arguments to pass to the method. Note: these are inspected.
|
|
98
|
+
# ------------------------------------------------------------------------
|
|
98
99
|
# Like def_delegator but allows you to send args and do other stuff.
|
|
99
|
-
#
|
|
100
|
-
def def_modern_delegator(accessor, method, alias_ = method, args: [], **kwd)
|
|
101
|
-
args = [args].flatten.compact.map(&:to_s).unshift("").join(", ")
|
|
102
|
-
prefix, suffix, wrap = prepare_delegate(**kwd)
|
|
100
|
+
# ------------------------------------------------------------------------
|
|
103
101
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
/\?$/, ""
|
|
107
|
-
)
|
|
108
|
-
end
|
|
102
|
+
def def_modern_delegator(accessor, method, alias_ = method, args: \
|
|
103
|
+
{ :before => [], :after => [] }, **kwd)
|
|
109
104
|
|
|
110
|
-
|
|
105
|
+
prefix, suffix, wrap = prepare_delegate(**kwd)
|
|
106
|
+
args = { :before => args } unless args.is_a?(Hash)
|
|
107
|
+
b = [args[:before]].flatten.compact.map(&:to_s).join(", ")
|
|
108
|
+
a = [args[ :after]].flatten.compact.map(&:to_s).join(", ")
|
|
109
|
+
b = b + ", " unless args[:before].nil? || args[:before].empty?
|
|
110
|
+
a = ", " + a unless args[ :after].nil? || args[ :after].empty?
|
|
111
|
+
alias_ = alias_.to_s.gsub(/\?$/, "") if suffix
|
|
112
|
+
|
|
113
|
+
class_eval delegate_debug(<<-STR), __FILE__, __LINE__ - 10
|
|
111
114
|
def #{alias_}#{suffix}(*args, &block)
|
|
112
115
|
#{wrap}(#{prefix}#{accessor}.send(
|
|
113
|
-
#{method.inspect}#{
|
|
116
|
+
#{method.inspect}, #{b}*args#{a}, &block
|
|
114
117
|
))
|
|
115
118
|
|
|
116
119
|
rescue Exception
|
|
117
|
-
|
|
120
|
+
if !Forwardable.debug && $@ && $@.respond_to?(:delete_if)
|
|
118
121
|
$@.delete_if do |source|
|
|
119
122
|
source =~ %r"#{Regexp.escape(__FILE__)}"o
|
|
120
123
|
end
|
|
@@ -125,7 +128,10 @@ module Forwardable
|
|
|
125
128
|
STR
|
|
126
129
|
end
|
|
127
130
|
|
|
131
|
+
# ------------------------------------------------------------------------
|
|
128
132
|
# Wraps around traditional delegation and modern delegation.
|
|
133
|
+
# ------------------------------------------------------------------------
|
|
134
|
+
|
|
129
135
|
def def_delegator(accessor, method, alias_ = method, **kwd)
|
|
130
136
|
kwd, alias_ = alias_, method if alias_.is_a?(Hash) && !kwd.any?
|
|
131
137
|
|
|
@@ -146,7 +152,10 @@ module Forwardable
|
|
|
146
152
|
end
|
|
147
153
|
end
|
|
148
154
|
|
|
155
|
+
# ------------------------------------------------------------------------
|
|
149
156
|
# Create multiple delegates at once.
|
|
157
|
+
# ------------------------------------------------------------------------
|
|
158
|
+
|
|
150
159
|
def def_delegators(accessor, *methods)
|
|
151
160
|
kwd = methods.shift if methods.first.is_a?(Hash)
|
|
152
161
|
kwd = methods.pop if methods. last.is_a?(Hash)
|
|
@@ -157,10 +166,12 @@ module Forwardable
|
|
|
157
166
|
end
|
|
158
167
|
end
|
|
159
168
|
|
|
169
|
+
# ------------------------------------------------------------------------
|
|
160
170
|
# Prepares a delegate and it's few arguments.
|
|
161
|
-
#
|
|
162
|
-
|
|
163
|
-
private
|
|
171
|
+
# ------------------------------------------------------------------------
|
|
172
|
+
|
|
173
|
+
private
|
|
174
|
+
def prepare_delegate(wrap: nil, bool: false)
|
|
164
175
|
prefix = (bool == :reverse ? "!!!" : "!!") if bool
|
|
165
176
|
wrap = "self.class.new" if wrap.is_a?(TrueClass)
|
|
166
177
|
suffix = "?" if bool
|
|
@@ -169,5 +180,23 @@ module Forwardable
|
|
|
169
180
|
prefix, suffix, wrap
|
|
170
181
|
]
|
|
171
182
|
end
|
|
183
|
+
|
|
184
|
+
# ------------------------------------------------------------------------
|
|
185
|
+
|
|
186
|
+
private
|
|
187
|
+
def delegate_debug(str)
|
|
188
|
+
if Forwardable.debug && !Forwardable.debug.is_a?(TrueClass)
|
|
189
|
+
then Forwardable.debug.debug(
|
|
190
|
+
str
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
elsif Forwardable.debug
|
|
194
|
+
$stdout.puts(
|
|
195
|
+
"\n# ------\n\n", str
|
|
196
|
+
)
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
str
|
|
200
|
+
end
|
|
172
201
|
end
|
|
173
202
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: forwardable-extended
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.
|
|
4
|
+
version: 2.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jordon Bedwell
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-04-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Forwardable with hash, and instance variable extensions.
|
|
14
14
|
email:
|
|
@@ -42,7 +42,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
42
42
|
version: '0'
|
|
43
43
|
requirements: []
|
|
44
44
|
rubyforge_project:
|
|
45
|
-
rubygems_version: 2.
|
|
45
|
+
rubygems_version: 2.6.2
|
|
46
46
|
signing_key:
|
|
47
47
|
specification_version: 4
|
|
48
48
|
summary: Forwardable with hash, and instance variable extensions.
|