Sha256: 8733899e07d132aba785750341c53b962e9ac3eac7901d7a403c3cd632bb8204

Contents?: true

Size: 1.19 KB

Versions: 1

Compression:

Stored size: 1.19 KB

Contents

module ServerGemListen
  module Listener
    class << self
      def start
        listen_events.start
        sleep
      rescue Interrupt => e
        puts "\n#{ServerGemListen::NOTIFICATION_PREFIX} interrupted"
      end

      private

      def notify(modified, added, removed)
        files = { modified: modified, added: added, removed: removed }
        files.each_pair do |key, value|
          next if value.empty?
          value.map! { |v| v.gsub(ENV['GEM_HOME'], '') }
          puts "#{ServerGemListen::NOTIFICATION_PREFIX} #{'file'.pluralize(value.size)} #{key}"
          ap value
        end
      end

      def listen_events
        gems = Bundler.definition.specs.to_hash.keys
        Listen.to(ENV['GEM_HOME']) do |*args|
          process_event(gems, *args)
        end
      end

      def process_event(gems, *args)
        return unless need_restart?(gems, *args)
        notify(*args)
        Server.restart
      end

      def need_restart?(gems, *args)
        args.each do |arg|
          arg.each do |path|
            matches = gems.select { |gem| path.include? gem }
            return true unless matches.empty?
          end
        end
        false
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
server-gem-listen-0.2.1 lib/server_gem_listen/listener.rb