poly_delegate 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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