Sha256: 4baecd8035803084946f7c511a0c8e42ed8a6ea3aced30b925f62f4f0c4a8e5c

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

require 'thor'
require 'writefully/process'
require 'pry'
module Writefully
  class CLI < Thor
    desc "start", "Start listening to the content directory"

    method_options %w( daemonize -d ) => :boolean

    def start(file)
      config = Writefully.config_from(file)

      if options.daemonize?
        Process.daemon(true, true)
        pid = waitpid(spawn(listen(config)))
        write pid, config[:pidfile]
      else
        Signal.trap("INT") { $stdout.puts "Writefully exiting..."; exit }
        listen(config)
      end
    end

    desc "stop", "Stop listening for content directory changes"
    def stop(file)
      config = Writefully.config_from(file)

      pid = open(config[:pidfile]).read.strip.to_i
      Process.kill("HUP", pid)
      true
    rescue Errno::ENOENT
      $stdout.puts "#{pidfile} does not exist: Errno::ENOENT"
      true
    rescue Errno::ESRCH
      $stdout.puts "The process #{pid} did not exist: Errno::ESRCH"
      true
    rescue Errno::EPERM
      $stderr.puts "Lack of privileges to manage the process #{pid}: Errno::EPERM"
      false
    rescue ::Exception => e
      $stderr.puts "While signaling the PID, unexpected #{e.class}: #{e}"
      false
    end

    no_tasks do 
      def listen(config)
        Writefully::Process.new(config).listen
      end

      def write pid, pidfile
        File.open pidfile, "w" do |f| 
          f.write pid
        end
      rescue ::Exception => e
        $stderr.puts "While writing the PID to file, unexpected #{e.class}: #{e}"
        Process.kill "HUP", pid
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
writefully-0.4.0 lib/writefully/cli.rb