Module: Injected::InterfaceDsl

Included in:
Interface
Defined in:
lib/injected/interface_dsl.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(receiver) ⇒ Object



5
6
7
8
9
# File 'lib/injected/interface_dsl.rb', line 5

def self.extended(receiver)
  class << receiver
    attr_accessor :interface_methods
  end
end

Instance Method Details

#interface_method(method_name, *args, **optional, &block) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/injected/interface_dsl.rb', line 11

def interface_method(method_name, *args, **optional, &block)
  @interface_methods ||= {}
  class_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
    def #{method_name}(#{signature(args, optional, block)}); end
  RUBY_EVAL
  interface_methods[method_name] = instance_method(method_name)
end

#signature(args, optional, block) ⇒ Object



19
20
21
22
23
24
# File 'lib/injected/interface_dsl.rb', line 19

def signature(args, optional, block)
  base = [args, optional.map { |k, v| "#{k}: #{v.inspect}" }.join(' ')].flatten(1).reject(&:empty?).join(', ')
  return base unless block

  [base, '&block'].reject(&:empty?).join(', ')
end