class JeraPush::Message

Public Class Methods

format_hash(messages = []) click to toggle source
# File lib/jera_push/models/message.rb, line 53
def self.format_hash(messages = [])
  return false if messages.blank?
  messages.collect do |obj|
    hash = { obj[:key].to_sym => obj[:value] }
    hash.delete_if { |key, value| key.blank? || value.blank? }
  end.reduce(:merge)
end
send_broadcast(content:) click to toggle source
# File lib/jera_push/models/message.rb, line 28
def self.send_broadcast(content:)
  return nil if content.blank?

  push_message = JeraPush::Message.create content: content, kind: :broadcast
  @@client ||= JeraPush::Firebase::Client.instance

  results = []
  results << push_message.to_android_topic
  results << push_message.to_ios_topic
  results << push_message.to_chrome_topic

  JeraPush::Firebase::ApiResult.broadcast_result(message: push_message, results: results)
  push_message
end
send_to(target, content: {}) click to toggle source
# File lib/jera_push/models/message.rb, line 14
def self.send_to(target, content: {})
  return nil if target.blank? || content.blank?

  push_message = JeraPush::Message.create content: content
  push_message.devices << target

  if push_message && target.is_a?(JeraPush::Device)
    push_message.send_to_device device: target
  else
    push_message.send_to_devices devices: target
  end
  push_message
end
send_to_topic(topic: , content: {}) click to toggle source
# File lib/jera_push/models/message.rb, line 43
def self.send_to_topic(topic: , content: {})
  return nil if topic.blank? || content.blank?

  push_message = JeraPush::Message.create content: content, topic: topic
  client = JeraPush::Firebase::Client.instance
  response = client.send_message_to_topic(message: { data: content }, topic: topic)
  response.topic_result(message: push_message)
  push_message
end

Public Instance Methods

content() click to toggle source
Calls superclass method
# File lib/jera_push/models/message.rb, line 67
def content
  if super()
    JSON.parse(super())
  else
    return {}
  end
end
content=(content) click to toggle source
Calls superclass method
# File lib/jera_push/models/message.rb, line 61
def content=(content)
  raise 'Invalid message format. Hash format expected' unless content.is_a? Hash

  super(content.to_json)
end
send_to_device(device: nil) click to toggle source
# File lib/jera_push/models/message.rb, line 89
def send_to_device(device: nil)
  return nil if device.nil?

  payload = {}
  if device.platform.ios?
    payload = body_ios(self.content)
  elsif device.platform.android?
    payload = body_android(self.content)
  elsif device.platform.chrome?
    payload = body_chrome(self.content)
  end
  client = JeraPush::Firebase::Client.instance
  response = client.send_message(message: payload, devices: [device])
  if response
    response.result_to(message: self)
  end
end
send_to_devices(devices: []) click to toggle source
# File lib/jera_push/models/message.rb, line 75
def send_to_devices(devices: [])
  return nil if devices.empty?
  platform_devices = devices.group_by { |device| device.platform }
  client = JeraPush::Firebase::Client.instance

  platform_devices.keys.each do |platform|
    payload = self.send("body_#{platform.to_s}", self.content)
    response = client.send_message(message: payload, devices: platform_devices[platform])
    if response
      response.result_to(message: self)
    end
  end
end
to_android_topic() click to toggle source
# File lib/jera_push/models/message.rb, line 107
def to_android_topic
  @@client.send_message_to_topic(
    message: body_android(content),
    topic: JeraPush.topic_android
  )
end
to_chrome_topic() click to toggle source
# File lib/jera_push/models/message.rb, line 121
def to_chrome_topic
  @@client.send_message_to_topic(
    message: body_chrome(content),
    topic: JeraPush.topic_chrome
  )
end
to_ios_topic() click to toggle source
# File lib/jera_push/models/message.rb, line 114
def to_ios_topic
  @@client.send_message_to_topic(
    message: body_ios(content),
    topic: JeraPush.topic_ios
  )
end

Private Instance Methods

body_android(content) click to toggle source
# File lib/jera_push/models/message.rb, line 142
def body_android(content)
  return {
    data: content
  }
end
body_chrome(content) click to toggle source
# File lib/jera_push/models/message.rb, line 148
def body_chrome(content)
  return {
    data: content
  }
end
body_ios(content) click to toggle source
# File lib/jera_push/models/message.rb, line 130
def body_ios(content)
  params = [:title, :body, :'content-available', :sound, :badge, :click_action, :body_loc_key, :body_loc_args, :title_loc_key, :title_loc_args]

  content.symbolize_keys!
  content[:sound] = 'default' unless content.has_key?(:sound)

  return {
    notification: content.select { |key, value| params.include?(key) },
    data: content.reject { |key, value| params.include?(key) }
  }
end