Class: Mandrill::WebHook::EventDecorator
- Inherits:
-
Hash
- Object
- Hash
- Mandrill::WebHook::EventDecorator
- Defined in:
- lib/mandrill/web_hook/event_decorator.rb
Overview
Wraps an individual Mandrill web hook event payload, providing some convenience methods handling the payload.
Given a raw event payload Hash, wrap it thus:
JSON.parse(params['mandrill_events']).each do |raw_event|
event = Mandrill::WebHook::EventDecorator[raw_event]
..
end
Instance Method Summary collapse
-
#all_clicked_links ⇒ Object
Returns an array of all the urls marked as clicked in this message.
-
#all_clicks ⇒ Object
Returns an array of all the clicks.
-
#attachments ⇒ Object
Returns an array of Mandrill::WebHook::Attachment objects describing each attached file [ attachment, attachment, .. ] Applicable events: inbound.
-
#click ⇒ Object
Returns the primary click payload or nil if n/a.
-
#entry ⇒ Object
Returns the entry Hash.
-
#event_type ⇒ Object
Returns the event type.
-
#headers ⇒ Object
Returns the headers Hash.
-
#images ⇒ Object
Returns an array of Mandrill::WebHook::Image objects describing each attached image [ image, image, .. ] Applicable events: inbound.
-
#in_reply_to ⇒ Object
Returns the reply-to ID.
-
#message_body(format = nil) ⇒ Object
Returns the
format
(:text,:html,:raw) message body. -
#message_id ⇒ Object
Returns the message_id.
-
#message_version ⇒ Object
Returns the Mandrill message version.
-
#metadata ⇒ Object
Returns, if pre-configured, the metadata.
-
#msg ⇒ Object
Returns the msg Hash.
-
#recipient_emails ⇒ Object
Returns an array of all unique recipient emails (to/cc) [ email, email, .. ] Applicable events: inbound.
-
#recipients ⇒ Object
Returns an array of all unique recipients (to/cc) [ [email,name], [email,name], .. ] Applicable events: inbound.
-
#references ⇒ Object
Returns an array of reference IDs.
-
#reject ⇒ Object
Returns the reject Hash.
-
#sender_email ⇒ Object
Returns the email (String) of the sender.
-
#subject ⇒ Object
Returns the message subject.
-
#sync_type ⇒ Object
Returns the sync type.
-
#user_email ⇒ Object
Returns the subject user email address.
Instance Method Details
#all_clicked_links ⇒ Object
Returns an array of all the urls marked as clicked in this message. Applicable events: click, open
167 168 169 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 167 def all_clicked_links all_clicks.collect{|c| c['url'] }.uniq end |
#all_clicks ⇒ Object
Returns an array of all the clicks. Applicable events: click, open
159 160 161 162 163 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 159 def all_clicks clicks = msg['clicks'] || [] clicks << click if click and clicks.empty? clicks end |
#attachments ⇒ Object
Returns an array of Mandrill::WebHook::Attachment objects describing each attached file
[ attachment, attachment, .. ]
Applicable events: inbound
NB: we are throwing away the Mandrill attachments hash keynames at this point, since in practice they are usually the same as the filename. Does this matter? May need to review if other cases are identified.
124 125 126 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 124 def (msg['attachments']||{}).map{|attached| Mandrill::WebHook::Attachment[attached.last] } end |
#click ⇒ Object
Returns the primary click payload or nil if n/a. Applicable events: click, open
153 154 155 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 153 def click { 'ts' => self['ts'], 'url' => self['url'] } if self['ts'] && self['url'] end |
#entry ⇒ Object
Returns the entry Hash. Applicable events: sync
31 32 33 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 31 def entry self['entry']||{} end |
#event_type ⇒ Object
Returns the event type. Applicable events: all
15 16 17 18 19 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 15 def event_type self['event'] || if sync_type.present? 'sync' end end |
#headers ⇒ Object
Returns the headers Hash. Applicable events: inbound
86 87 88 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 86 def headers msg['headers']||{} end |
#images ⇒ Object
Returns an array of Mandrill::WebHook::Image objects describing each attached image
[ image, image, .. ]
Applicable events: inbound
131 132 133 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 131 def images (msg['images']||{}).map{|image| Mandrill::WebHook::Image[image.last] } end |
#in_reply_to ⇒ Object
Returns the reply-to ID. Applicable events: inbound
74 75 76 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 74 def in_reply_to headers['In-Reply-To'] end |
#message_body(format = nil) ⇒ Object
Returns the format
(:text,:html,:raw) message body. If format
is not specified, it will return the first available message content in order: text, html, raw. Applicable events: inbound
138 139 140 141 142 143 144 145 146 147 148 149 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 138 def (format=nil) case format when :text msg['text'] when :html msg['html'] when :raw msg['raw_msg'] else msg['text'] || msg['html'] || msg['raw_msg'] end end |
#message_id ⇒ Object
Returns the message_id. Inbound events: references ‘Message-Id’ header. Send/Open/Click events: references ‘_id’ message attribute.
56 57 58 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 56 def headers['Message-Id'] || msg['_id'] || self['_id'] end |
#message_version ⇒ Object
Returns the Mandrill message version. Send/Click events: references ‘_version’ message attribute. Inbound/Open events: n/a.
63 64 65 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 63 def msg['_version'] end |
#metadata ⇒ Object
Returns, if pre-configured, the metadata.
68 69 70 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 68 def msg['metadata']||{} end |
#msg ⇒ Object
Returns the msg Hash. Applicable events: all
49 50 51 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 49 def msg self['msg']||{} end |
#recipient_emails ⇒ Object
Returns an array of all unique recipient emails (to/cc)
[ email, email, .. ]
Applicable events: inbound
114 115 116 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 114 def recipient_emails recipients.map(&:first) end |
#recipients ⇒ Object
Returns an array of all unique recipients (to/cc)
[ [email,name], [email,name], .. ]
Applicable events: inbound
107 108 109 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 107 def recipients (Array(msg['to']) | Array(msg['cc'])).compact end |
#references ⇒ Object
Returns an array of reference IDs. Applicable events: inbound
80 81 82 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 80 def references (headers['References']||'').scan(/(<[^<]+?>)/).flatten end |
#reject ⇒ Object
Returns the reject Hash. Applicable events: sync
37 38 39 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 37 def reject self['reject']||{} end |
#sender_email ⇒ Object
Returns the email (String) of the sender. Inbound messages: references ‘from_email’ message attribute. Send/Open/Click messages: references ‘sender’ message attribute.
93 94 95 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 93 def sender_email msg['from_email'] || msg['sender'] || entry['sender'] || reject['sender'] end |
#subject ⇒ Object
Returns the message subject. Applicable events: all
43 44 45 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 43 def subject self['subject'] || msg['subject'] end |
#sync_type ⇒ Object
Returns the sync type. Applicable events: sync
23 24 25 26 27 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 23 def sync_type if %w(blacklist whitelist).include?(type = self['type']) type end end |
#user_email ⇒ Object
Returns the subject user email address. Inbound messages: references ‘email’ message attribute (represents the sender). Send/Open/Click messages: references ‘email’ message attribute (represents the recipient).
100 101 102 |
# File 'lib/mandrill/web_hook/event_decorator.rb', line 100 def user_email msg['email'] || entry['email'] || reject['email'] end |