lib/spectro.rb
def implements interfaces
      file_path = caller.first.match(/(?:^|#{Dir.pwd}\/)([^\/].*):\d+:in .+/)[1]
      interfaces.each do |method_name, required_params|
        λ = Spectro::Database.fetch(file_path, method_name, *required_params) || Spectro::Mock.create(file_path, method_name)

        raise Spectro::Exception::UndefinedMethodDefinition.new(file_path, method_name) if λ.nil?

        self.send(:define_method, method_name, &λ)
      end
    end
def implements interfaces
      file_path = caller.first.match(/(?:^|#{Dir.pwd}\/)([^\/].*):\d+:in .+/)[1]
      interfaces.each do |method_name, required_params|
        λ = Spectro::Database.fetch(file_path, method_name, *required_params) || Spectro::Mock.create(file_path, method_name)

        raise Spectro::Exception::UndefinedMethodDefinition.new(file_path, method_name) if λ.nil?

        self.send(:define_method, method_name, &λ)
      end
    end
Register the given method name supporting the given parameters.

 Whenever Spectro::Config.mocks_enabled? is true it will try to cover unfulfilled
 specs using the known rules as mocks.

 @param [{String, Symbol=><String, Symbol>}] interfaces hash of method names and required param names supported by the method