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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a0bf26e6d3a0d6c8702033209c8cc78dd66e91b8
4
- data.tar.gz: cff44e0ccbc27734e5b7537f1bfb7ab00699d6af
3
+ metadata.gz: 5a63d4f78c993a050c8b1cc6aa077296fa7acab3
4
+ data.tar.gz: dbd35851e146d851ed4d3b1f0db85a5bfb432666
5
5
  SHA512:
6
- metadata.gz: 956f7150e5cf3d1c008debc814333c1b15b6447dce17857a7a6593bea964e76f0d1d74f68e8828ed9dce6bd5cb309d0dc9069539aaea12635ea1374b1aef137f
7
- data.tar.gz: 1067a33f3dbaa30926b9f52a01a6031160a2864a98b4b74a7d80745680f20a47936d612f4c3337903524865fb576d5973d84af91d14c0e4ba84fe6079d688353
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]
@@ -4,6 +4,6 @@
4
4
 
5
5
  module Forwardable
6
6
  module Extended
7
- VERSION = "2.5.0"
7
+ VERSION = "2.6.0"
8
8
  end
9
9
  end
@@ -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
- # 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.
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
- # 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.
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
- # 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.
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
- unless Forwardable.debug
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
- # 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.
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
- unless Forwardable.debug
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
- # 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
+ # ------------------------------------------------------------------------
98
99
  # Like def_delegator but allows you to send args and do other stuff.
99
- # accessor - the object you wish to delegate to.
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
- if suffix
105
- alias_ = alias_.to_s.gsub(
106
- /\?$/, ""
107
- )
108
- end
102
+ def def_modern_delegator(accessor, method, alias_ = method, args: \
103
+ { :before => [], :after => [] }, **kwd)
109
104
 
110
- class_eval <<-STR, __FILE__, __LINE__ - 10
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}#{args}, *args, &block
116
+ #{method.inspect}, #{b}*args#{a}, &block
114
117
  ))
115
118
 
116
119
  rescue Exception
117
- unless Forwardable.debug
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
- # 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)
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.5.0
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-03-17 00:00:00.000000000 Z
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.5.1
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.