module ServerGemListen::Listener
Public Class Methods
start()
click to toggle source
# File lib/server_gem_listen/listener.rb, line 4 def start listen_events.start sleep rescue Interrupt => e puts "\n#{ServerGemListen::NOTIFICATION_PREFIX} interrupted".green end
Private Class Methods
listen_events()
click to toggle source
# File lib/server_gem_listen/listener.rb, line 23 def listen_events gems = Bundler.definition.specs.to_hash.keys Listen.to(ENV['GEM_HOME']) do |*args| process_event(gems, *args) end end
need_restart?(gems, *args)
click to toggle source
# File lib/server_gem_listen/listener.rb, line 36 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
notify(modified, added, removed)
click to toggle source
# File lib/server_gem_listen/listener.rb, line 13 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}".green ap value end end
process_event(gems, *args)
click to toggle source
# File lib/server_gem_listen/listener.rb, line 30 def process_event(gems, *args) return unless need_restart?(gems, *args) notify(*args) Server.restart end