class Guard::Notifier

def self.connect(options = {})

def self.connect(options = {})
  @notifier ||= nil
  fail "Already connected!" if @notifier
  begin
    opts = options.merge(namespace: "guard", logger: UI)
    @notifier = Notiffany.connect(opts)
  rescue Notiffany::Notifier::Detected::UnknownNotifier => e
    UI.error "Failed to setup notification: #{e.message}"
    fail
  end
end

def self.detected

Used by dsl describer
def self.detected
  @notifier.available.map do |mod|
    { name: mod.name.to_sym, options: mod.options }
  end
end

def self.disconnect

def self.disconnect
  @notifier && @notifier.disconnect
  @notifier = nil
end

def self.notify(message, options = {})

def self.notify(message, options = {})
  unless @notifier
    # TODO: reenable again?
    # UI.deprecation(DEPRECTED_IMPLICIT_CONNECT)
    connect(notify: true)
  end
  @notifier.notify(message, options)
rescue RuntimeError => e
  UI.error "Notification failed for #{@notifier.class.name}: #{e.message}"
  UI.debug e.backtrace.join("\n")
end

def self.supported

Used by dsl describer
def self.supported
  Notiffany::Notifier::SUPPORTED.inject(:merge)
end

def self.toggle

def self.toggle
  unless @notifier.enabled?
    UI.error NOTIFICATIONS_DISABLED
    return
  end
  if @notifier.active?
    UI.info "Turn off notifications"
    @notifier.turn_off
    return
  end
  @notifier.turn_on
end

def self.turn_on

def self.turn_on
  @notifier.turn_on
end