Sha256: 6cf75d1b8b1245e26f9d173995e4939375444d9453e401fa4fa4deaa8d42ea88
Contents?: true
Size: 1.46 KB
Versions: 3
Compression:
Stored size: 1.46 KB
Contents
require "singleton" require "harmoniser" require "harmoniser/parser" require "harmoniser/launcher" module Harmoniser class CLI include Singleton SIGNAL_HANDLERS = { "INT" => lambda { |cli, signal| raise Interrupt }, "TERM" => lambda { |cli, signal| raise Interrupt } } SIGNAL_HANDLERS.default = lambda { |cli, signal| cli.logger.info("Default signal handler executed since there is no handler defined: signal = `#{signal}`") } attr_reader :logger def initialize @configuration = Harmoniser.default_configuration @logger = Harmoniser.logger end def call parse_options run end private attr_reader :configuration def parse_options options = Parser.new(logger: @logger).call(ARGV) configuration.options_with(**options) end def define_signals @read_io, @write_io = IO.pipe ["INT", "TERM"].each do |sig| Signal.trap(sig) do @write_io.puts(sig) end end end def run Launcher .new(configuration: configuration, logger: logger) .start define_signals while @read_io.wait_readable signal = @read_io.gets.strip handle_signal(signal) end rescue Interrupt @write_io.close @read_io.close exit(0) end def handle_signal(signal) logger.info("Signal received: signal = `#{signal}`") SIGNAL_HANDLERS[signal].call(self, signal) end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
harmoniser-0.9.0 | lib/harmoniser/cli.rb |
harmoniser-0.8.1 | lib/harmoniser/cli.rb |
harmoniser-0.8.0 | lib/harmoniser/cli.rb |