# frozen_string_literal: true module Diversipub ## # The whole application runner. # class Main attr_reader :gem_root, :pwd, :program_name, :argv, :env, :stdin, :stdout, :stderr def initialize(gem_root:, pwd:, program_name:, argv:, env:, stdin:, stdout:, stderr:) self.gem_root = gem_root self.pwd = pwd self.program_name = program_name self.argv = argv self.env = env self.stdin = stdin self.stdout = stdout self.stderr = stderr @running = true end def run p gem_root p pwd p program_name p argv p env p stdin p stdout p stderr puma_task.join_thread true end def stop_gracefully puma_task.stop_gracefully nil end def stop_urgently puma_task.stop_urgently nil end private attr_writer :stdin, :stdout, :stderr def gem_root=(gem_root) @gem_root = Pathname.new(gem_root).freeze end def pwd=(pwd) @pwd = Pathname.new(pwd).freeze end def program_name=(program_name) @program_name = String(program_name).freeze end def argv=(argv) @argv = [*argv].map { |arg| String(arg).freeze }.freeze end def env=(env) @env = [*env].to_h do |key, value| [String(key).freeze, String(value).freeze] end.freeze end def puma_task @puma_task ||= PumaTask.new self end end end