poly_delegate 1.0.0 → 1.1.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: 3e361c440292c2ef5fafd483dc009bbf6d2f933a
4
- data.tar.gz: 0f5ddc87ccce20950ff55c75c502b1589748355b
3
+ metadata.gz: 86b1a5ce6f8911671007a0098b5e9f39f04c7e0d
4
+ data.tar.gz: a44f331f4029d053e1e1cc12efd37657c1ea6343
5
5
  SHA512:
6
- metadata.gz: b5a4267a89325390d048d9aeb1810f2ea7b6f39dafdc676eac182baf5c2446ff97c4383dbae7b0f8a1e410d798979e218b3df57391c64a0727df753270413285
7
- data.tar.gz: 61ce9688c826efbf297c69bcb47d959e9d31fe9c0fdb78f5beaa49c6d595a1ed62cfb86fa1c18bd984268883d5aec72a796e75ca442e59a13ec04382a7266496
6
+ metadata.gz: 9e718e86a89b8b37d79cba03e95220812df46539ec4a0c042a26fdf4b51e7d2a886f9106c77127f68418fb921d1916de00878588b7cb2a5940a9423570fec535
7
+ data.tar.gz: fac1d66d0991b33041b1ed2e307b641e0e9036a4e9dab4b8620904cbaaaeb14e95e0585ee0e6ce4caf59c5bc766e205d514b5934462450403846705da0a67c9f
@@ -0,0 +1,35 @@
1
+ # encoding: utf-8
2
+ # Copyright (c) 2016 Nathan Currier
3
+
4
+ # This Source Code Form is subject to the terms of the Mozilla Public
5
+ # License, v. 2.0. If a copy of the MPL was not distributed with this
6
+ # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
+
8
+ require 'poly_delegate/method'
9
+
10
+ module PolyDelegate
11
+ def self.distinguish_delegator(obj, *args)
12
+ delegator =
13
+ if args.empty? || !args.first.is_a?(Delegator)
14
+ obj
15
+ else
16
+ args.shift
17
+ end
18
+
19
+ [delegator, args]
20
+ end
21
+
22
+ def self.delegate_call(obj, method, *args, &block)
23
+ delegator, args = distinguish_delegator(obj, *args)
24
+ bound = force_bind(delegator, method)
25
+ bound.call(*args, &block)
26
+ end
27
+
28
+ def self.create_delegated_method(klass, name)
29
+ method = klass.instance_method(name)
30
+
31
+ redefine_method(klass, name) do |*args, &block|
32
+ PolyDelegate.delegate_call(self, method, *args, &block)
33
+ end
34
+ end
35
+ end
@@ -5,9 +5,9 @@
5
5
  # License, v. 2.0. If a copy of the MPL was not distributed with this
6
6
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
7
 
8
+ require 'poly_delegate/call'
8
9
  require 'poly_delegate/classic_access'
9
10
  require 'poly_delegate/force_bind'
10
- require 'poly_delegate/method'
11
11
 
12
12
  module PolyDelegate
13
13
  module Delegated
@@ -19,7 +19,7 @@ module PolyDelegate
19
19
  intercepted = intercepted.map(&:instance_methods).reduce(&:-)
20
20
 
21
21
  intercepted.each do |name|
22
- __create_delegated_method__(name)
22
+ PolyDelegate.create_delegated_method(base, name)
23
23
  end
24
24
  end
25
25
  end
@@ -27,31 +27,11 @@ module PolyDelegate
27
27
  module ClassMethods
28
28
  include ClassicAttributeAccess
29
29
 
30
- def __create_delegated_method__(name)
31
- method = instance_method(name)
32
-
33
- PolyDelegate.redefine_method(self, name) do |*args, &block|
34
- __delegated_call__(method, *args, &block)
35
- end
36
- end
37
-
38
- def __delegated_call__(method, *args, &block)
39
- delegator =
40
- if args.empty? || !args.first.is_a?(Delegator)
41
- self
42
- else
43
- args.shift
44
- end
45
-
46
- bound = PolyDelegate.force_bind(delegator, method)
47
- bound.call(*args, &block)
48
- end
49
-
50
30
  def method_added(name)
51
31
  return if %i(method_missing initialize).include?(name)
52
32
  return if PolyDelegate.callers(2).include?(:redefine_method)
53
33
 
54
- __create_delegated_method__(name)
34
+ PolyDelegate.create_delegated_method(self, name)
55
35
  end
56
36
  end
57
37
  end
@@ -5,8 +5,6 @@
5
5
  # License, v. 2.0. If a copy of the MPL was not distributed with this
6
6
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
7
 
8
- require 'force_bind' if RUBY_ENGINE == 'ruby'
9
-
10
8
  module PolyDelegate
11
9
  # rubocop:disable Lint/DuplicateMethods
12
10
  case RUBY_ENGINE
@@ -17,6 +15,8 @@ module PolyDelegate
17
15
  Method.new(bound_obj, *method_args)
18
16
  end
19
17
  when 'ruby'
18
+ require 'force_bind'
19
+
20
20
  def self.force_bind(bound_obj, method)
21
21
  if bound_obj.class == method.owner
22
22
  method.bind(bound_obj)
@@ -6,5 +6,5 @@
6
6
  # file, You can obtain one at http://mozilla.org/MPL/2.0/.
7
7
 
8
8
  module PolyDelegate
9
- VERSION = '1.0.0'.freeze
9
+ VERSION = '1.1.0'.freeze
10
10
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: poly_delegate
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Currier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-02 00:00:00.000000000 Z
11
+ date: 2016-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  type: :runtime
@@ -41,6 +41,7 @@ files:
41
41
  - gemfiles/Gemfile.ci
42
42
  - gemfiles/Gemfile.doc
43
43
  - lib/poly_delegate.rb
44
+ - lib/poly_delegate/call.rb
44
45
  - lib/poly_delegate/classic_access.rb
45
46
  - lib/poly_delegate/delegated.rb
46
47
  - lib/poly_delegate/delegator.rb