Skip to content

Commit 2922814

Browse files
committed
[MODEL] Refactored the Support::Forwardable module to better support forwarding to class/module methods
1 parent aa1e713 commit 2922814

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

elasticsearch-model/lib/elasticsearch/model/support/forwardable.rb

+11-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ module Support
1010
module Forwardable
1111
def self.extended(base)
1212
base.__send__ :extend, ::Forwardable
13+
base.__send__ :extend, ::SingleForwardable
1314
end
1415

1516
# Forwards specific method(s) to the provided receiver
@@ -18,16 +19,24 @@ def self.extended(base)
1819
#
1920
# MyClass.forward(:results, :each)
2021
#
22+
# @example Forward the `include?` method to `ancestors` class method
23+
#
24+
# MyClass.forward(:'self.ancestors', :include?)
25+
#
2126
# @param [ Symbol ] receiver The name of the receiver method
2227
# @param [ Symbol, Array ] methods The forwarded methods
2328
#
2429
# @api private
2530
#
2631
def forward(receiver, *methods)
2732
methods = Array(methods).flatten
33+
target = self.__send__ :eval, receiver.to_s rescue nil
2834

29-
def_delegators receiver, *methods
30-
35+
if target.is_a?(Module)
36+
single_delegate methods => receiver
37+
else
38+
instance_delegate methods => receiver
39+
end
3140
end; module_function :forward
3241
end
3342
end

0 commit comments

Comments
 (0)