105 lines
2.0 KiB
Ruby
105 lines
2.0 KiB
Ruby
# 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
|
|
debug_output
|
|
tasks.each(&:join_thread)
|
|
true
|
|
end
|
|
|
|
def debug_output
|
|
p gem_root
|
|
p pwd
|
|
p program_name
|
|
p argv
|
|
p env
|
|
p stdin
|
|
p stdout
|
|
p stderr
|
|
end
|
|
|
|
def stop_gracefully
|
|
tasks.each(&:stop_gracefully)
|
|
nil
|
|
end
|
|
|
|
def stop_urgently
|
|
tasks.each(&: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 postgresql_pool
|
|
@postgresql_pool ||= ConnectionPool.new do
|
|
PG.connect(
|
|
host: 'localhost',
|
|
dbname: 'diversipub',
|
|
user: 'diversipub',
|
|
password: 'diversipub',
|
|
).tap do |conn|
|
|
conn.type_map_for_results = PG::BasicTypeMapForResults.new conn
|
|
end
|
|
end
|
|
end
|
|
|
|
def tasks
|
|
@tasks ||= [http_task].freeze
|
|
end
|
|
|
|
def http_task
|
|
@http_task ||= Tasks::HTTP.new self
|
|
end
|
|
end
|
|
end
|