class Train::Transports::Mock

Public Class Methods

new(conf = nil) click to toggle source
# File lib/train/transports/mock.rb, line 13
def initialize(conf = nil)
  @conf = conf || {}
  trace_calls if @conf[:trace]
end

Public Instance Methods

connection() click to toggle source
# File lib/train/transports/mock.rb, line 18
def connection
  @connection ||= Connection.new(@conf)
end
to_s() click to toggle source
# File lib/train/transports/mock.rb, line 22
def to_s
  'Mock Transport'
end

Private Instance Methods

trace_calls() click to toggle source
# File lib/train/transports/mock.rb, line 28
def trace_calls
  interface_methods = {
    'Train::Transports::Mock' =>
      Train::Transports::Mock.instance_methods(false),
    'Train::Transports::Mock::Connection' =>
      Connection.instance_methods(false),
    'Train::Transports::Mock::Connection::File' =>
      Connection::FileCommon.instance_methods(false),
    'Train::Transports::Mock::Connection::OS' =>
      Connection::OSCommon.instance_methods(false),
  }

  # rubocop:disable Metrics/ParameterLists
  # rubocop:disable Lint/Eval
  set_trace_func proc { |event, _file, _line, id, binding, classname|
    unless classname.to_s.start_with?('Train::Transports::Mock') and
           event == 'call' and
           interface_methods[classname.to_s].include?(id)
      next
    end
    # kindly borrowed from the wonderful simple-tracer by matugm
    arg_names = eval(
      'method(__method__).parameters.map { |arg| arg[1].to_s }',
      binding)
    args = eval("#{arg_names}.map { |arg| eval(arg) }", binding).join(', ')
    prefix = '-' * (classname.to_s.count(':') - 2) + '> '
    puts("#{prefix}#{id} #{args}")
  }
  # rubocop:enable all
end