class AhoyEmail::RedisSubscriber
Attributes
prefix[R]
redis[R]
Public Class Methods
new(redis: nil, prefix: "ahoy_email")
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 5 def initialize(redis: nil, prefix: "ahoy_email") @redis = redis || Redis.new @prefix = prefix end
Public Instance Methods
campaign_exists?(campaign)
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 44 def campaign_exists?(campaign) redis.sismember(campaigns_key, campaign) end
campaigns()
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 40 def campaigns redis.smembers(campaigns_key) end
stats(campaign = nil)
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 26 def stats(campaign = nil) if campaign # return nil instead of zeros if not a campaign if campaign_exists?(campaign) campaign_stats(campaign) end else campaigns.inject({}) do |memo, campaign| memo[campaign] = campaign_stats(campaign) memo end end end
track_click(event)
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 18 def track_click(event) campaign_prefix = campaign_key(event[:campaign]) pipelined do |pipeline| pipeline.incr("#{campaign_prefix}:clicks") pipeline.pfadd("#{campaign_prefix}:unique_clicks", event[:token]) end end
track_send(event)
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 10 def track_send(event) campaign_prefix = campaign_key(event[:campaign]) pipelined do |pipeline| pipeline.incr("#{campaign_prefix}:sends") pipeline.sadd(campaigns_key, event[:campaign]) end end
Private Instance Methods
campaign_key(campaign)
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 54 def campaign_key(campaign) "#{prefix}:campaigns:#{campaign}" end
campaign_stats(campaign)
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 58 def campaign_stats(campaign) # scope sends = nil clicks = nil unique_clicks = nil campaign_prefix = campaign_key(campaign) pipelined do |pipeline| sends = pipeline.get("#{campaign_prefix}:sends") clicks = pipeline.get("#{campaign_prefix}:clicks") unique_clicks = pipeline.pfcount("#{campaign_prefix}:unique_clicks") end { sends: sends.value.to_i, clicks: clicks.value.to_i, unique_clicks: unique_clicks.value, ctr: 100 * unique_clicks.value / sends.value.to_f } end
campaigns_key()
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 50 def campaigns_key "#{prefix}:campaigns" end
pipelined() { |pipeline| ... }
click to toggle source
# File lib/ahoy_email/redis_subscriber.rb, line 79 def pipelined if Redis::VERSION.to_f >= 4.6 redis.pipelined do |pipeline| yield pipeline end else redis.pipelined do yield redis end end end