Module: DEVp2p::Configurable

Included in:
App, Command, Frame, Multiplexer, Protocol, RLPxSession, Service
Defined in:
lib/devp2p/configurable.rb

Instance Method Summary collapse

Instance Method Details

#add_config(configs) ⇒ Object

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/devp2p/configurable.rb', line 6

def add_config(configs)
  raise ArgumentError, 'self must be a class' unless self.class == Class

  configs.each do |name, default|
    singleton_class.send(:define_method, name) do |*args|
      iv = "@#{name}"
      if args.empty?
        if instance_variable_defined?(iv)
          instance_variable_get(iv)
        else
          v = superclass.respond_to?(:add_config) && superclass.respond_to?(name) ?
            superclass.public_send(name) : default
          instance_variable_set(iv, v)
        end
      else
        instance_variable_set(iv, args.first)
      end
    end

    define_method(name) do |*args|
      self.class.public_send name, *args
    end
  end
end