class Firebase::Messaging::Request::For

Constants

TOPIC_REGEX

Attributes

registration_ids[R]
to[R]
topics[R]

Public Class Methods

new(directions) click to toggle source
# File lib/firebase/messaging/request/for.rb, line 9
def initialize(directions)
  if directions.is_a? String
    @to = directions
  elsif directions.is_a? Array
    if directions.flatten.any? { |direction| TOPIC_REGEX === direction }
      if directions.flatten.size == 1
        @to = directions.first
      else
        @topics = directions
      end
    else
      @registration_ids = directions
    end
  end
end

Public Instance Methods

payload() click to toggle source
# File lib/firebase/messaging/request/for.rb, line 25
def payload
  return { to: @to } if @to
  return { registration_ids: @registration_ids } if @registration_ids

  conditions = @topics.inject([]) do |arr, topic|
    if topic.is_a? Array
      arr.push "(#{or_condition(topic)})"
    else
      arr.push topic_condition(topic)
    end
  end

  { condition: conditions.join(' && ') }
end
type() click to toggle source
# File lib/firebase/messaging/request/for.rb, line 40
def type
  if (@to && !(TOPIC_REGEX === @to)) || @registration_ids
    :down_stream_http_message
  else
    :topic_message
  end
end

Private Instance Methods

or_condition(or_topics) click to toggle source
# File lib/firebase/messaging/request/for.rb, line 50
def or_condition(or_topics)
  or_topics.select { |topic| TOPIC_REGEX === topic }
           .map { |topic| topic_condition(topic) }
           .join(' || ')
end
topic_condition(topic) click to toggle source
# File lib/firebase/messaging/request/for.rb, line 56
def topic_condition(topic)
  topic.gsub(TOPIC_REGEX, '\'\1\' in topics')
end