Class: Notifiable::Sender

Inherits:
Object
  • Object
show all
Defined in:
lib/notifiable/sender.rb

Instance Method Summary collapse

Constructor Details

#initialize(access_id, base_uri: 'https://notifiable.futureworkshops.com', secret_key: nil, logger: Logger.new(STDOUT)) ⇒ Sender

Returns a new instance of Sender.



8
9
10
11
12
13
# File 'lib/notifiable/sender.rb', line 8

def initialize(access_id, base_uri: 'https://notifiable.futureworkshops.com', secret_key: nil, logger: Logger.new(STDOUT))
  raise 'base_uri cannot be nil' if !base_uri || base_uri.empty?
  raise 'access_id cannot be nil' if !access_id || access_id.empty? 
  
  @base_uri, @access_id, @secret_key, @logger = base_uri, access_id, secret_key, logger
end

Instance Method Details

#send_media_notification_to_users(user_aliases, media_url, title: nil, message: nil, parameters: {}, content_available: nil, thread_id: nil, category: nil, expiry: nil, filters: []) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/notifiable/sender.rb', line 15

def send_media_notification_to_users(user_aliases, media_url, title: nil, message: nil, parameters: {}, content_available: nil, thread_id: nil, category: nil, expiry: nil, filters: [])
  raise 'user_aliases should be an array' unless user_aliases.is_a? Array
  raise 'media_url should not be blank' if media_url.nil? || media_url.empty?
  
  parameters = {media_url: media_url}.merge(parameters)
  filters = filters + [{property: "user_alias", predicate: "in", value: user_aliases}]
  send_notification(title: title, message: message, parameters: parameters, content_available: content_available, filters: filters, thread_id: thread_id, mutable_content: true, category: category, expiry: expiry)
end

#send_notification(title: nil, message: nil, parameters: nil, filters: nil, content_available: nil, thread_id: nil, mutable_content: nil, category: nil, expiry: nil) ⇒ Object

Params:

  • filters: An array of hashes to filter notifications, e.g. [“alert_level”, predicate: “lt”, value: 3]

  • expiry: The system will not retry delivery past this date.



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/notifiable/sender.rb', line 35

def send_notification(title: nil, message: nil, parameters: nil, filters: nil, content_available: nil, thread_id: nil, mutable_content: nil, category: nil, expiry: nil)
  body = {}
  body[:title] = title unless title.nil?
  body[:message] = message unless message.nil?
  body[:parameters] = parameters.to_json unless parameters.nil?
  body[:filters] = filters.to_json unless filters.nil?
  body[:content_available] = content_available unless content_available.nil?
  body[:thread_id] = thread_id unless thread_id.nil?
  body[:mutable_content] = mutable_content unless mutable_content.nil?
  body[:category] = category unless category.nil?
  body[:expiry] = expiry unless expiry.nil?
  
  headers = {}
  headers[:authorization] = @access_id unless @secret_key
  @request = RestClient::Request.new url: "#{@base_uri}/api/v1/notifications", payload: {notification: body}, method: :post, headers: headers
  @request = ApiAuth.sign!(@request, @access_id, @secret_key) if @secret_key
  begin
    @request.execute
  rescue RestClient::ExceptionWithResponse => e
    @logger.warn "Request failed with code: #{e.response.code} body: #{e.response.body}"
  end
end

#send_notification_to_users(user_aliases, title: nil, message: nil, parameters: nil, content_available: nil, thread_id: nil, mutable_content: nil, category: nil, expiry: nil, filters: []) ⇒ Object



24
25
26
27
28
29
# File 'lib/notifiable/sender.rb', line 24

def send_notification_to_users(user_aliases, title: nil, message: nil, parameters: nil, content_available: nil, thread_id: nil, mutable_content: nil, category: nil, expiry: nil, filters: [])
  raise 'user_aliases should be an array' unless user_aliases.is_a? Array
  
  filters = filters + [{property: "user_alias", predicate: "in", value: user_aliases}]
  send_notification(title: title, message: message, parameters: parameters, content_available: content_available, filters: filters, thread_id: thread_id, mutable_content: mutable_content, category: category, expiry: expiry)
end