forwardable-extended 2.4.3 → 2.5.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/lib/forwardable/extended.rb +31 -55
- data/lib/forwardable/extended/version.rb +1 -1
- 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: a0bf26e6d3a0d6c8702033209c8cc78dd66e91b8
|
4
|
+
data.tar.gz: cff44e0ccbc27734e5b7537f1bfb7ab00699d6af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 956f7150e5cf3d1c008debc814333c1b15b6447dce17857a7a6593bea964e76f0d1d74f68e8828ed9dce6bd5cb309d0dc9069539aaea12635ea1374b1aef137f
|
7
|
+
data.tar.gz: 1067a33f3dbaa30926b9f52a01a6031160a2864a98b4b74a7d80745680f20a47936d612f4c3337903524865fb576d5973d84af91d14c0e4ba84fe6079d688353
|
data/lib/forwardable/extended.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
|
-
# ----------------------------------------------------------------------------
|
2
1
|
# Frozen-string-literal: true
|
3
2
|
# Copyright: 2015-2016 Jordon Bedwell - MIT License
|
4
3
|
# Encoding: utf-8
|
5
|
-
# ----------------------------------------------------------------------------
|
6
4
|
|
7
5
|
require "forwardable/extended/version"
|
8
6
|
require "forwardable"
|
@@ -10,10 +8,9 @@ require "forwardable"
|
|
10
8
|
module Forwardable
|
11
9
|
module Extended
|
12
10
|
|
13
|
-
# ------------------------------------------------------------------------
|
14
11
|
# Make our methods private on the class, there is no reason for public.
|
15
|
-
#
|
16
|
-
|
12
|
+
# This makes it so that things are cleaner to view when inside of REPL's/Debuggers.
|
13
|
+
# That way you don't see our methods without asking to see them.
|
17
14
|
def self.extended(klass)
|
18
15
|
instance_methods.each do |method|
|
19
16
|
klass.private_class_method(
|
@@ -22,10 +19,10 @@ module Forwardable
|
|
22
19
|
end
|
23
20
|
end
|
24
21
|
|
25
|
-
#
|
26
|
-
#
|
27
|
-
#
|
28
|
-
|
22
|
+
# Delegate using a Rails-like interface.
|
23
|
+
# to - the class (object) you are delegating to.
|
24
|
+
# alias_of - the method of the class (by default it's the method.)
|
25
|
+
# method - the method you are forwarding.
|
29
26
|
def rb_delegate(method, to: nil, alias_of: method, **kwd)
|
30
27
|
raise ArgumentError, "to must be provided" unless to
|
31
28
|
def_delegator(
|
@@ -33,14 +30,12 @@ module Forwardable
|
|
33
30
|
)
|
34
31
|
end
|
35
32
|
|
36
|
-
#
|
37
|
-
#
|
38
|
-
#
|
39
|
-
#
|
40
|
-
# ------------------------------------------------------------------------
|
41
|
-
|
33
|
+
# Delegate a method to a hash and key.
|
34
|
+
# key - the key to use if the method is not the key.
|
35
|
+
# method - the name of the method you wish to create.
|
36
|
+
# hash - the hash you are delegating to.
|
42
37
|
def def_hash_delegator(hash, method, key: method, **kwd)
|
43
|
-
prefix, suffix, wrap =
|
38
|
+
prefix, suffix, wrap = prepare_delegate(**kwd)
|
44
39
|
|
45
40
|
if suffix
|
46
41
|
method = method.to_s.gsub(
|
@@ -66,15 +61,12 @@ module Forwardable
|
|
66
61
|
STR
|
67
62
|
end
|
68
63
|
|
69
|
-
#
|
70
|
-
#
|
71
|
-
#
|
72
|
-
#
|
73
|
-
# @param [String, Symbol] alias_ the alias.
|
74
|
-
# ------------------------------------------------------------------------
|
75
|
-
|
64
|
+
# Delegate a method to an instance variable.
|
65
|
+
# ivar - the instance variable you are aliasing.
|
66
|
+
# alias_ - alias it to another method name.
|
67
|
+
# Note: If you are not doing booleans then don't bother with this.
|
76
68
|
def def_ivar_delegator(ivar, alias_ = ivar, **kwd)
|
77
|
-
prefix, suffix, wrap =
|
69
|
+
prefix, suffix, wrap = prepare_delegate(**kwd)
|
78
70
|
|
79
71
|
if suffix
|
80
72
|
alias_ = alias_.to_s.gsub(
|
@@ -100,17 +92,14 @@ module Forwardable
|
|
100
92
|
STR
|
101
93
|
end
|
102
94
|
|
103
|
-
#
|
104
|
-
#
|
105
|
-
#
|
106
|
-
#
|
107
|
-
#
|
108
|
-
# @param [Array<>] args the arguments to place in front.
|
109
|
-
# ------------------------------------------------------------------------
|
110
|
-
|
95
|
+
# method - the method you wish to delegate.
|
96
|
+
# alias_ - the name of the method on the current object.
|
97
|
+
# args - arguments to pass to the method. Note: these are inspected.
|
98
|
+
# Like def_delegator but allows you to send args and do other stuff.
|
99
|
+
# accessor - the object you wish to delegate to.
|
111
100
|
def def_modern_delegator(accessor, method, alias_ = method, args: [], **kwd)
|
112
101
|
args = [args].flatten.compact.map(&:to_s).unshift("").join(", ")
|
113
|
-
prefix, suffix, wrap =
|
102
|
+
prefix, suffix, wrap = prepare_delegate(**kwd)
|
114
103
|
|
115
104
|
if suffix
|
116
105
|
alias_ = alias_.to_s.gsub(
|
@@ -136,12 +125,7 @@ module Forwardable
|
|
136
125
|
STR
|
137
126
|
end
|
138
127
|
|
139
|
-
#
|
140
|
-
# Wraps around traditional def_delegator to offer forwarding to modern,
|
141
|
-
# ivar and hash delegators. With a bit of data checking between.
|
142
|
-
# @see `Object::Forwardable#def_delegator`
|
143
|
-
# ------------------------------------------------------------------------
|
144
|
-
|
128
|
+
# Wraps around traditional delegation and modern delegation.
|
145
129
|
def def_delegator(accessor, method, alias_ = method, **kwd)
|
146
130
|
kwd, alias_ = alias_, method if alias_.is_a?(Hash) && !kwd.any?
|
147
131
|
|
@@ -155,18 +139,14 @@ module Forwardable
|
|
155
139
|
)
|
156
140
|
|
157
141
|
else
|
158
|
-
raise ArgumentError, "Alias not supported
|
159
|
-
send("def_#{kwd[:type]}_delegator", accessor, method, **kwd.tap
|
142
|
+
raise ArgumentError, "Alias not supported." if alias_ != method
|
143
|
+
send("def_#{kwd[:type]}_delegator", accessor, method, **kwd.tap do |obj|
|
160
144
|
obj.delete(:type)
|
161
|
-
|
145
|
+
end)
|
162
146
|
end
|
163
147
|
end
|
164
148
|
|
165
|
-
#
|
166
|
-
# Wraps around traditional `def_delegators` to detect hash arguments.
|
167
|
-
# @see `Object::Forwardable#def_delegators`
|
168
|
-
# ------------------------------------------------------------------------
|
169
|
-
|
149
|
+
# Create multiple delegates at once.
|
170
150
|
def def_delegators(accessor, *methods)
|
171
151
|
kwd = methods.shift if methods.first.is_a?(Hash)
|
172
152
|
kwd = methods.pop if methods. last.is_a?(Hash)
|
@@ -177,14 +157,10 @@ module Forwardable
|
|
177
157
|
end
|
178
158
|
end
|
179
159
|
|
180
|
-
#
|
181
|
-
#
|
182
|
-
#
|
183
|
-
|
184
|
-
# ------------------------------------------------------------------------
|
185
|
-
|
186
|
-
private
|
187
|
-
def __prepare(wrap: nil, bool: false)
|
160
|
+
# Prepares a delegate and it's few arguments.
|
161
|
+
# wrap - whether to wrap (or the class to wrap it with.)
|
162
|
+
# bool - whether or not this delegate is a boolean.
|
163
|
+
private def prepare_delegate(wrap: nil, bool: false)
|
188
164
|
prefix = (bool == :reverse ? "!!!" : "!!") if bool
|
189
165
|
wrap = "self.class.new" if wrap.is_a?(TrueClass)
|
190
166
|
suffix = "?" if bool
|
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.5.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-03-17 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.5.
|
45
|
+
rubygems_version: 2.5.1
|
46
46
|
signing_key:
|
47
47
|
specification_version: 4
|
48
48
|
summary: Forwardable with hash, and instance variable extensions.
|