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