From 279ada41972dd0f4b6feb744421334bb8a8c4bbb Mon Sep 17 00:00:00 2001 From: Alex Kotov Date: Tue, 2 May 2023 14:38:09 +0400 Subject: [PATCH] Add class Diversipub::App --- exe/diversipub | 23 +++++++++++++++++- lib/diversipub.rb | 1 + lib/diversipub/main.rb | 54 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 lib/diversipub/main.rb diff --git a/exe/diversipub b/exe/diversipub index dd3a09c..3ba7ada 100755 --- a/exe/diversipub +++ b/exe/diversipub @@ -1,4 +1,25 @@ #!/usr/bin/env ruby # 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 diff --git a/lib/diversipub.rb b/lib/diversipub.rb index cbe2631..f499c79 100644 --- a/lib/diversipub.rb +++ b/lib/diversipub.rb @@ -1,3 +1,4 @@ # frozen_string_literal: true +require_relative 'diversipub/main' require_relative 'diversipub/version' diff --git a/lib/diversipub/main.rb b/lib/diversipub/main.rb new file mode 100644 index 0000000..0f0f218 --- /dev/null +++ b/lib/diversipub/main.rb @@ -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