Sha256: 97658e533abf91424d90faff74213ac2f85ff787d816daa1cb523f90ac48ebc3

Contents?: true

Size: 1.38 KB

Versions: 3

Compression:

Stored size: 1.38 KB

Contents

require 'multi_json'

module Weeter
  module Plugins
    module Subscription
      class Redis
        include Weeter::Plugins::Net::Redis

        def initialize(client_app_config)
          @config = client_app_config
        end

        def get_initial_filters(&block)
          deferred_get = redis.get(@config.subscriptions_key) do |value|
            if value.nil?
              raise "Expected to find subscription data at redis key #{@config.subscriptions_key}"
            end
            yield MultiJson.decode(value)
          end
          deferred_get.errback do |message|
            Weeter.logger.error(message)
          end
        end

        def listen_for_filter_update(tweet_consumer)
          pub_sub_redis.subscribe(@config.subscriptions_changed_channel)
          pub_sub_redis.on(:message) do |channel, message|
            Weeter.logger.info [:message, channel, message]
            Weeter.logger.info("Retrieving updated filters from redis")
            get_initial_filters do |filter_params|
              Weeter.logger.info("Triggering reconnect Twitter stream with new filters")
              tweet_consumer.reconnect(filter_params)
            end
          end
        end

      protected

        def redis
          @redis ||= create_redis_client
        end

        def pub_sub_redis
          @pub_sub_redis ||= create_redis_client
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
weeter-0.15.0 lib/weeter/plugins/subscription/redis.rb
weeter-0.14.0 lib/weeter/plugins/subscription/redis.rb
weeter-0.13.0 lib/weeter/plugins/subscription/redis.rb