Class: Peng::Engine

Inherits:
Object
  • Object
show all
Defined in:
lib/peng/engine.rb

Constant Summary collapse

DEFAULT_CHANNELS =
{
  email: Peng::Channels::Email
}

Instance Method Summary collapse

Constructor Details

#initialize(data = {}) ⇒ Engine

Returns a new instance of Engine.



7
8
9
# File 'lib/peng/engine.rb', line 7

def initialize(data={})
  @data = data
end

Instance Method Details

#deliver(config) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/peng/engine.rb', line 11

def deliver(config)
  name_or_klass = config[:channel] || :mail
  channel_klass = name_or_klass.is_a?(Symbol) ? DEFAULT_CHANNELS[name_or_klass] : name_or_klass
  
  from = config[:from]

  if config[:to].is_a?(String)
    to = config[:to]        
  else
    address_method_name = config[:address_method_name].presence || channel_klass.address_method_name
    to = config[:to].public_send(address_method_name) 
    @data[:recipient] ||= config[:to]
  end    

  if config[:subject].present?
    subject = Mustache.render(config[:subject], @data)
  end
  if config[:body].present?        
    body    = Mustache.render(config[:body], @data)
  end

  message = {to: to, from: from, subject: subject, body: body}

  async = config.has_key?(:async) ? config[:async] : true

  async ? channel_klass.inline(message) : channel_klass.async(message) 
end