Sha256: 880e78c94802acce6840f224db3ed0a2ee030c1a29d1f4534a84bcfd74b054f0

Contents?: true

Size: 1.75 KB

Versions: 3

Compression:

Stored size: 1.75 KB

Contents

module Pubnub
  class Subscribe
    include Pubnub::Event
    include Pubnub::SubscribeEvent
    include Pubnub::Formatter
    include Pubnub::Validator


    def initialize(options, app)
      super
      @event = 'subscribe'
      @allow_multiple_channels = true
      @state = options[:state]

    end

    def fire(app)
      app.update_timetoken(0)
      add_state(@state, app) if @state
      super
    end

    def validate!
      super
      # Check channels
      raise ArgumentError.new(:object => self, :message => 'Subscribe requires :channel, :channels or :group argument') if @channel.blank? && @channel_group.blank?

      # Check callback
      raise ArgumentError.new(:object => self, :message => 'Callback parameter is required while using async subscribe') if !@http_sync && @callback.blank?

      # Channel group
      if @channel_group.class == Array
        @channel_group.each do |cg|
          # raise ArgumentError.new(:object => self, :message => ':group argument has to be in format "ns:cg", "ns:" or ":cg"') if cg.count(':') != 1
        end
      elsif !@channel_group.blank?
        number_of_groups = @channel_group.to_s.split(',').size # In case it will be given as csv
        # raise ArgumentError.new(:object => self, :message => ':group argument has to be in format "ns:cg", "ns:" or ":cg"') if @channel_group.to_s.count(':') != number_of_groups
      end
    end

    private

    def add_state(state, app)
      app.env[:state]          = {} unless app.env[:state]
      app.env[:state][@origin] = {} unless app.env[:state][@origin]
      @channel.each do |channel|
        app.env[:state][@origin][channel] = state
      end
      @channel_group.each do |channel_group|
        app.env[:state][@origin][channel_group] = state
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
pubnub-3.7.5 lib/pubnub/events/subscribe.rb
pubnub-3.7.1 lib/pubnub/events/subscribe.rb
pubnub-3.7.0 lib/pubnub/events/subscribe.rb