Add class Diversipub::App

This commit is contained in:
Alex Kotov 2023-05-02 14:38:09 +04:00
parent 5c64924b67
commit 279ada4197
Signed by: kotovalexarian
GPG key ID: 553C0EBBEB5D5F08
3 changed files with 77 additions and 1 deletions

View file

@ -1,4 +1,25 @@
#!/usr/bin/env ruby #!/usr/bin/env ruby
# frozen_string_literal: true # frozen_string_literal: true
require 'diversipub' gem_name = 'diversipub'
begin
require gem_name
rescue LoadError
lib = File.expand_path('../lib', __dir__).freeze
file = File.join lib, "#{gem_name}.rb"
$LOAD_PATH.unshift lib if File.file?(file) && !$LOAD_PATH.include?(lib)
require gem_name
end
main = Diversipub::Main.new(
program_name: $PROGRAM_NAME,
argv: ARGV,
env: ENV,
stdin: $stdin,
stdout: $stdout,
stderr: $stderr,
)
trap('INT') { main.finish } if Signal.list['INT']
exit main.run

View file

@ -1,3 +1,4 @@
# frozen_string_literal: true # frozen_string_literal: true
require_relative 'diversipub/main'
require_relative 'diversipub/version' require_relative 'diversipub/version'

54
lib/diversipub/main.rb Normal file
View file

@ -0,0 +1,54 @@
# frozen_string_literal: true
module Diversipub
##
# The whole application runner.
#
class Main
attr_reader :program_name, :argv, :env, :stdin, :stdout, :stderr
def initialize(program_name:, argv:, env:, stdin:, stdout:, stderr:)
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 program_name
p argv
p env
p stdin
p stdout
p stderr
sleep 1 while @running
true
end
def finish
puts 'finishing'
@running = false
end
private
attr_writer :stdin, :stdout, :stderr
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
end
end