Module: Caffeinate::Dripper::Drip::ClassMethods

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

Instance Method Summary collapse

Instance Method Details

#drip(action_name, options = {}, &block) ⇒ Object

Register a drip on the Dripper

drip :mailer_action_name, mailer_class: "MailerClass", step: 1, delay: 1.hour

Parameters:

  • action_name (Symbol)

    the name of the mailer action

  • options (Hash) (defaults to: {})

    the options to create a drip with

Options Hash (options):

  • :mailer_class (String)

    The mailer_class

  • :step (Integer)

    The order in which the drip is executed

  • :delay (ActiveSupport::Duration)

    When the drip should be ran

Raises:

  • (ArgumentError)


63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/caffeinate/dripper/drip.rb', line 63

def drip(action_name, options = {}, &block)
  options.assert_valid_keys(:mailer_class, :step, :delay, :using, :mailer)
  options[:mailer_class] ||= options[:mailer] || defaults[:mailer_class]
  options[:using] ||= defaults[:using]
  options[:step] ||= drips.size + 1

  if options[:mailer_class].nil?
    raise ArgumentError, "You must define :mailer_class or :mailer in the options for :#{action_name}"
  end
  raise ArgumentError, "You must define :delay in the options for :#{action_name}" if options[:delay].nil?

  drip_collection.register(action_name, options, &block)
end

#drip_collectionObject

A collection of Drip objects associated with a given ‘Caffeinate::Dripper`



45
46
47
# File 'lib/caffeinate/dripper/drip.rb', line 45

def drip_collection
  @drip_collection ||= DripCollection.new(self)
end

#dripsObject

A collection of Drip objects associated with a given ‘Caffeinate::Dripper`



50
51
52
# File 'lib/caffeinate/dripper/drip.rb', line 50

def drips
  drip_collection.values
end