From 89759226d74df0599f5d57795faca0c644c6a93d Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Wed, 3 May 2023 16:51:31 +0400 Subject: [PATCH] Add class Diversipub::PumaTask --- lib/diversipub.rb | 1 + lib/diversipub/main.rb | 55 +++++----------------------- lib/diversipub/puma_task.rb | 72 +++++++++++++++++++++++++++++++++++++ 3 files changed, 81 insertions(+), 47 deletions(-) create mode 100644 lib/diversipub/puma_task.rb diff --git a/lib/diversipub.rb b/lib/diversipub.rb index a11a0de..f25f413 100644 --- a/lib/diversipub.rb +++ b/lib/diversipub.rb @@ -21,6 +21,7 @@ require 'sinatra/base' ################ require_relative 'diversipub/main' +require_relative 'diversipub/puma_task' require_relative 'diversipub/rack_app' require_relative 'diversipub/sinatra_app' require_relative 'diversipub/version' diff --git a/lib/diversipub/main.rb b/lib/diversipub/main.rb index 9c0b984..b0a719f 100644 --- a/lib/diversipub/main.rb +++ b/lib/diversipub/main.rb @@ -33,16 +33,19 @@ module Diversipub p stdout p stderr - puma_thread.join + puma_task.join_thread true end def stop_gracefully - puma.stop + puma_task.stop_gracefully nil end - alias stop_urgently stop_gracefully + def stop_urgently + puma_task.stop_urgently + nil + end private @@ -66,50 +69,8 @@ module Diversipub end.freeze end - def puma_thread - @puma_thread ||= Thread.start { puma.run } - end - - def puma - @puma ||= Puma::Launcher.new( - puma_config, - log_writer: puma_log_writer, - ) - end - - def puma_config - @puma_config ||= Puma::Configuration.new( - { - app: rack_app, - binds: ['tcp://127.0.0.1:9292'].freeze, - environment: 'production', - log_requests: true, - logger: puma_logger, - rackup: nil, - tag: 'diversipub', - tcp_host: '127.0.0.1', - tcp_port: 9292, - workers: 0, - }, - ) - end - - def puma_log_writer - @puma_log_writer ||= Puma::LogWriter.new stderr, stderr - end - - def puma_logger - @puma_logger ||= Logger.new(stderr).tap do |puma_logger| - puma_logger.level = Logger::DEBUG - end - end - - def rack_app - @rack_app ||= RackApp.new sinatra_app - end - - def sinatra_app - @sinatra_app ||= SinatraApp.new self + def puma_task + @puma_task ||= PumaTask.new self end end end diff --git a/lib/diversipub/puma_task.rb b/lib/diversipub/puma_task.rb new file mode 100644 index 0000000..abee979 --- /dev/null +++ b/lib/diversipub/puma_task.rb @@ -0,0 +1,72 @@ +# frozen_string_literal: true + +module Diversipub + ## + # Puma web server task runner. + # + class PumaTask + def initialize(main) + @main = main + end + + def join_thread + thread.join + nil + end + + def stop_gracefully + puma.stop + nil + end + + alias stop_urgently stop_gracefully + + private + + def thread + @thread ||= Thread.start { puma.run } + end + + def puma + @puma ||= Puma::Launcher.new( + puma_config, + log_writer: puma_log_writer, + ) + end + + def puma_config + @puma_config ||= Puma::Configuration.new( + { + app: rack_app, + binds: ['tcp://127.0.0.1:9292'].freeze, + environment: 'production', + log_requests: true, + logger: puma_logger, + rackup: nil, + tag: 'diversipub', + tcp_host: '127.0.0.1', + tcp_port: 9292, + workers: 0, + }, + ) + end + + def puma_log_writer + @puma_log_writer ||= Puma::LogWriter.new @main.stderr, @main.stderr + end + + def puma_logger + @puma_logger ||= Logger.new(@main.stderr).tap do |puma_logger| + puma_logger.level = Logger::DEBUG + end + end + + def rack_app + @rack_app ||= RackApp.new sinatra_app + end + + def sinatra_app + @sinatra_app ||= SinatraApp.new @main + end + end +end