Skip to content

Commit 081c39f

Browse files
committed
[MODEL] Refactored the delegation implementation to Suppport::Forwardable wrapper
Allow future refactoring/re-implementation/customization of forwarding. See e.g. https://github.com/mongoid/origin/blob/master/lib/origin/forwardable.rb
1 parent fcc865e commit 081c39f

File tree

5 files changed

+43
-6
lines changed

5 files changed

+43
-6
lines changed

elasticsearch-model/lib/elasticsearch/model.rb

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
require 'hashie'
66

7+
require 'elasticsearch/model/support/forwardable'
8+
79
require 'elasticsearch/model/adapter'
810
require 'elasticsearch/model/adapters/default'
911
require 'elasticsearch/model/adapters/active_record'

elasticsearch-model/lib/elasticsearch/model/response.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ class Response
55
attr_reader :klass, :response
66

77
include Enumerable
8+
extend Support::Forwardable
89

9-
extend Forwardable
10-
def_delegators :results, :each, :empty?, :size, :slice, :[], :to_ary
10+
forward :results, :each, :empty?, :size, :slice, :[], :to_ary
1111

1212
def initialize(klass, response)
1313
@klass = klass

elasticsearch-model/lib/elasticsearch/model/response/records.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ module Response
44
class Records
55
include Enumerable
66

7-
extend Forwardable
8-
def_delegators :records, :each, :empty?, :size, :slice, :[], :to_a, :to_ary
7+
extend Support::Forwardable
8+
forward :records, :each, :empty?, :size, :slice, :[], :to_a, :to_ary
99

1010
include Base
1111

elasticsearch-model/lib/elasticsearch/model/response/results.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ class Results
88

99
include Enumerable
1010

11-
extend Forwardable
12-
def_delegators :results, :each, :empty?, :size, :slice, :[], :to_a, :to_ary
11+
extend Support::Forwardable
12+
forward :results, :each, :empty?, :size, :slice, :[], :to_a, :to_ary
1313

1414
def initialize(klass, response)
1515
super
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
module Elasticsearch
2+
module Model
3+
module Support
4+
5+
# Lightweight wrapper around "forwardable.rb" interface,
6+
# to allow easy delegation implementation changes in the future.
7+
#
8+
# Cf. https://github.com/mongoid/origin/blob/master/lib/origin/forwardable.rb
9+
#
10+
module Forwardable
11+
def self.extended(base)
12+
base.__send__ :extend, ::Forwardable
13+
end
14+
15+
# Forwards specific method(s) to the provided receiver
16+
#
17+
# @example Forward the `each` method to `results` object
18+
#
19+
# MyClass.forward(:results, :each)
20+
#
21+
# @param [ Symbol ] receiver The name of the receiver method
22+
# @param [ Symbol, Array ] methods The forwarded methods
23+
#
24+
# @api private
25+
#
26+
def forward(receiver, *methods)
27+
methods = Array(methods).flatten
28+
29+
def_delegators receiver, *methods
30+
31+
end; module_function :forward
32+
end
33+
end
34+
end
35+
end

0 commit comments

Comments
 (0)