Module: Rsodx::Delegate

Included in:
Service
Defined in:
lib/rsodx/delegate.rb

Instance Method Summary collapse

Instance Method Details

#delegate(*methods, to:, prefix: nil) ⇒ Object

Raises:

  • (ArgumentError)


5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/rsodx/delegate.rb', line 5

def delegate(*methods, to:, prefix: nil)
  raise ArgumentError, "Missing target for delegation (to:)" unless to

  mod = Module.new do
    extend Forwardable

    methods.each do |method_name|
      delegated_name = if prefix
                         prefix_str = prefix == true ? to.to_s : prefix.to_s
                         "#{prefix_str}_#{method_name}"
                       else
                         method_name
                       end

      def_delegator to, method_name, delegated_name
    end
  end

  include mod
end