Sha256: f1d2e58e62355e1bf1c8d09b7292a228f5a00c79b52d1381a8553966c972f189

Contents?: true

Size: 1.37 KB

Versions: 17

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module SmtpMock
  class Server
    attr_reader :pid, :port, :version

    def initialize( # rubocop:disable Metrics/ParameterLists
      deps_handler = SmtpMock::Dependency,
      port_checker = SmtpMock::Server::Port,
      args_builder = SmtpMock::CommandLineArgsBuilder,
      process = SmtpMock::Server::Process,
      **args
    )
      @version = deps_handler.verify_dependencies
      args[:port] = port_checker.random_free_port unless args.include?(:port)
      @command_line_args, @port = args_builder.call(**args), args[:port]
      @deps_handler, @port_checker, @process = deps_handler, port_checker, process
      run
    end

    def active?
      process_alive? && port_open?
    end

    def stop
      process_kill(SmtpMock::Server::Process::SIGTERM)
    end

    def stop!
      process_kill(SmtpMock::Server::Process::SIGKILL)
    end

    private

    attr_reader :deps_handler, :command_line_args, :port_checker, :process
    attr_writer :pid, :port

    def process_kill(signal_number)
      process.kill(signal_number, pid)
    end

    def compose_command
      deps_handler.compose_command(command_line_args)
    end

    def process_alive?
      process.alive?(pid)
    end

    def port_open?
      port_checker.port_open?(port)
    end

    def run
      self.pid = process.create(compose_command)
      ::Kernel.at_exit { stop! }
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
smtp_mock-1.4.4 lib/smtp_mock/server.rb
smtp_mock-1.4.3 lib/smtp_mock/server.rb
smtp_mock-1.4.1 lib/smtp_mock/server.rb
smtp_mock-1.4.0 lib/smtp_mock/server.rb
smtp_mock-1.3.6 lib/smtp_mock/server.rb
smtp_mock-1.3.5 lib/smtp_mock/server.rb
smtp_mock-1.3.4 lib/smtp_mock/server.rb
smtp_mock-1.3.3 lib/smtp_mock/server.rb
smtp_mock-1.3.2 lib/smtp_mock/server.rb
smtp_mock-1.3.1 lib/smtp_mock/server.rb
smtp_mock-1.3.0 lib/smtp_mock/server.rb
smtp_mock-1.2.2 lib/smtp_mock/server.rb
smtp_mock-1.2.1 lib/smtp_mock/server.rb
smtp_mock-1.2.0 lib/smtp_mock/server.rb
smtp_mock-1.1.0 lib/smtp_mock/server.rb
smtp_mock-1.0.1 lib/smtp_mock/server.rb
smtp_mock-1.0.0 lib/smtp_mock/server.rb