module Injected::InterfaceDsl

Public Class Methods

extended(receiver) click to toggle source
# File lib/injected/interface_dsl.rb, line 5
def self.extended(receiver)
  class << receiver
    attr_accessor :interface_methods
  end
end

Public Instance Methods

interface_method(method_name, *args, **optional, &block) click to toggle source
# 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) click to toggle source
# 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