lib/backup/notifier/pushover.rb
require "uri"
module Backup
module Notifier
class Pushover < Base
##
# The API User Token
attr_accessor :user
##
# The API Application Token
attr_accessor :token
##
# The user's device identifier to sent the message directly to,
# rather than all of the user's devices
attr_accessor :device
##
# The message title
attr_accessor :title
##
# The priority of the notification
attr_accessor :priority
def initialize(model, &block)
super
instance_eval(&block) if block_given?
end
private
##
# Notify the user of the backup operation results.
#
# `status` indicates one of the following:
#
# `:success`
# : The backup completed successfully.
# : Notification will be sent if `on_success` is `true`.
#
# `:warning`
# : The backup completed successfully, but warnings were logged.
# : Notification will be sent if `on_warning` or `on_success` is `true`.
#
# `:failure`
# : The backup operation failed.
# : Notification will be sent if `on_warning` or `on_success` is `true`.
#
def notify!(status)
send_message(message.call(model, status: status_data_for(status)))
end
def send_message(message)
uri = "https://api.pushover.net/1/messages.json"
data = { user: user, token: token, message: message }
[:device, :title, :priority].each do |param|
val = send(param)
data.merge!(param => val) if val
end
options = {
headers: { "Content-Type" => "application/x-www-form-urlencoded" },
body: URI.encode_www_form(data)
}
options[:expects] = 200 # raise error if unsuccessful
Excon.post(uri, options)
end
end
end
end