Module: Caffeinate::Dripper::Subscriber::ClassMethods

Defined in:
lib/caffeinate/dripper/subscriber.rb

Instance Method Summary collapse

Instance Method Details

#subscribe(subscriber, **args) ⇒ Caffeinate::CampaignSubscriber

Subscribes to the campaign.

OrderDripper.subscribe(order, user: order.user)

Parameters:

  • subscriber (ActiveRecord::Base)

    The object subscribing

  • [ActiveRecord::Base] (Hash)

    a customizable set of options

Returns:

  • (Caffeinate::CampaignSubscriber)

    the created CampaignSubscriber



33
34
35
# File 'lib/caffeinate/dripper/subscriber.rb', line 33

def subscribe(subscriber, **args)
  caffeinate_campaign.subscribe(subscriber, **args)
end

#subscribe!Object

Runs the subscriber_block

OrderDripper.subscribe!


16
17
18
# File 'lib/caffeinate/dripper/subscriber.rb', line 16

def subscribe!
  subscribes_block.call
end

#subscribersObject

Returns the campaign’s ‘Caffeinate::CampaignSubscriber`



21
22
23
# File 'lib/caffeinate/dripper/subscriber.rb', line 21

def subscribers
  caffeinate_campaign.caffeinate_campaign_subscribers
end

#subscribes(&block) ⇒ Object

The subscriber block. Used to create ‘::Caffeinate::CampaignSubscribers` subscribers.

subscribes do
  Cart.left_joins(:cart_items)
      .includes(:user)
      .where(completed_at: nil)
      .where(updated_at: 1.day.ago..2.days.ago)
      .having('count(cart_items.id) > 0').each do |cart|
    subscribe(cart, user: cart.user)
  end
end

No need to worry about checking if the given subscriber being already subscribed. The ‘subscribe` method does that for you.

Optionally, can subscribe a user manually via ‘Caffeinate::Campaign#subscribe`



60
61
62
# File 'lib/caffeinate/dripper/subscriber.rb', line 60

def subscribes(&block)
  @subscribes_block = block
end

#subscribes_blockObject

:nodoc:

Raises:

  • (NotImplementedError)


38
39
40
41
42
# File 'lib/caffeinate/dripper/subscriber.rb', line 38

def subscribes_block
  raise(NotImplementedError, 'Define subscribes') unless @subscribes_block

  @subscribes_block
end