@@ -2,7 +2,7 @@ class SystemMailer < ActionMailer::Base |
||
| 2 | 2 |
default :from => ENV['EMAIL_FROM_ADDRESS'] || 'you@example.com' |
| 3 | 3 |
|
| 4 | 4 |
def send_message(options) |
| 5 |
- @lines = options[:lines] |
|
| 5 |
+ @groups = options[:groups] |
|
| 6 | 6 |
@headline = options[:headline] |
| 7 | 7 |
mail :to => options[:to], :subject => options[:subject] |
| 8 | 8 |
end |
@@ -37,30 +37,28 @@ module Agents |
||
| 37 | 37 |
|
| 38 | 38 |
def check |
| 39 | 39 |
if self.memory[:queue] && self.memory[:queue].length > 0 |
| 40 |
- lines = self.memory[:queue].map {|item| present(item) }
|
|
| 40 |
+ groups = self.memory[:queue].map { |payload| present(payload) }
|
|
| 41 | 41 |
puts "Sending mail to #{user.email}..." unless Rails.env.test?
|
| 42 |
- SystemMailer.delay.send_message(:to => user.email, :subject => options[:subject], :headline => options[:headline], :lines => lines) |
|
| 42 |
+ SystemMailer.delay.send_message(:to => user.email, :subject => options[:subject], :headline => options[:headline], :groups => groups) |
|
| 43 | 43 |
self.memory[:queue] = [] |
| 44 | 44 |
end |
| 45 | 45 |
end |
| 46 | 46 |
|
| 47 |
- def present(item) |
|
| 48 |
- if item.is_a?(Hash) |
|
| 47 |
+ def present(payload) |
|
| 48 |
+ if payload.is_a?(Hash) |
|
| 49 |
+ payload = ActiveSupport::HashWithIndifferentAccess.new(payload) |
|
| 49 | 50 |
MAIN_KEYS.each do |key| |
| 50 |
- if item.has_key?(key) |
|
| 51 |
- return "#{item[key]}" + ((item.length > 1 && item.length < 5) ? " (#{present_hash item, key})" : "")
|
|
| 52 |
- elsif item.has_key?(key.to_s) |
|
| 53 |
- return "#{item[key.to_s]}" + ((item.length > 1 && item.length < 5) ? " (#{present_hash item, key.to_s})" : "")
|
|
| 54 |
- end |
|
| 51 |
+ return { :title => payload[key].to_s, :entries => present_hash(payload, key) } if payload.has_key?(key)
|
|
| 55 | 52 |
end |
| 56 |
- present_hash item |
|
| 53 |
+ |
|
| 54 |
+ { :title => "Event", :entries => present_hash(payload) }
|
|
| 57 | 55 |
else |
| 58 |
- item.to_s |
|
| 56 |
+ { :title => payload.to_s, :entries => [] }
|
|
| 59 | 57 |
end |
| 60 | 58 |
end |
| 61 | 59 |
|
| 62 | 60 |
def present_hash(hash, skip_key = nil) |
| 63 |
- hash.to_a.sort_by {|a| a.first.to_s }.map { |k, v| "#{k}: #{v}" unless [skip_key].include?(k) }.compact.to_sentence
|
|
| 61 |
+ hash.to_a.sort_by {|a| a.first.to_s }.map { |k, v| "#{k}: #{v}" unless k.to_s == skip_key.to_s }.compact
|
|
| 64 | 62 |
end |
| 65 | 63 |
end |
| 66 | 64 |
end |
@@ -7,10 +7,15 @@ |
||
| 7 | 7 |
<% if @headline %> |
| 8 | 8 |
<h1><%= @headline %></h1> |
| 9 | 9 |
<% end %> |
| 10 |
- <% @lines.each do |line| %> |
|
| 11 |
- <p> |
|
| 12 |
- <%= line %> |
|
| 13 |
- </p> |
|
| 10 |
+ <% @groups.each do |group| %> |
|
| 11 |
+ <div style='margin-bottom: 10px;'> |
|
| 12 |
+ <div><%= group[:title] %></div> |
|
| 13 |
+ <% group[:entries].each do |entry| %> |
|
| 14 |
+ <div style='margin-left: 10px;'> |
|
| 15 |
+ <%= group[:entry] %> |
|
| 16 |
+ </div> |
|
| 17 |
+ <% end %> |
|
| 18 |
+ </div> |
|
| 14 | 19 |
<% end %> |
| 15 | 20 |
</body> |
| 16 | 21 |
</html> |
@@ -1,5 +1,7 @@ |
||
| 1 | 1 |
<% if @headline %><%= @headline %> |
| 2 | 2 |
|
| 3 |
-<% end %><% @lines.each do |line| %><%= line %> |
|
| 4 |
- |
|
| 3 |
+<% end %><% @groups.each do |group| %><%= group[:title] %> |
|
| 4 |
+<% group[:entries].each do |entry| %> <%= entry %> |
|
| 5 | 5 |
<% end %> |
| 6 |
+ |
|
| 7 |
+<% end %> |
@@ -33,13 +33,16 @@ describe Agents::DigestEmailAgent do |
||
| 33 | 33 |
Agents::DigestEmailAgent.async_check(@checker.id) |
| 34 | 34 |
ActionMailer::Base.deliveries.should == [] |
| 35 | 35 |
|
| 36 |
- @checker.memory[:queue] = ["Something you should know about", { :title => "Foo", :url => "http://google.com", :bar => 2 }, { "message" => "hi", :woah => "there" }]
|
|
| 36 |
+ @checker.memory[:queue] = ["Something you should know about", |
|
| 37 |
+ { :title => "Foo", :url => "http://google.com", :bar => 2 },
|
|
| 38 |
+ { "message" => "hi", :woah => "there" },
|
|
| 39 |
+ { "test" => 2 }]
|
|
| 37 | 40 |
@checker.save! |
| 38 | 41 |
|
| 39 | 42 |
Agents::DigestEmailAgent.async_check(@checker.id) |
| 40 | 43 |
ActionMailer::Base.deliveries.last.to.should == ["bob@example.com"] |
| 41 | 44 |
ActionMailer::Base.deliveries.last.subject.should == "something interesting" |
| 42 |
- get_message_part(ActionMailer::Base.deliveries.last, /plain/).strip.should == "Something you should know about\n\nFoo (bar: 2 and url: http://google.com)\n\nhi (woah: there)" |
|
| 45 |
+ get_message_part(ActionMailer::Base.deliveries.last, /plain/).strip.should == "Something you should know about\n\nFoo\n bar: 2\n url: http://google.com\n\nhi\n woah: there\n\nEvent\n test: 2" |
|
| 43 | 46 |
@checker.reload.memory[:queue].should == [] |
| 44 | 47 |
end |
| 45 | 48 |
end |