class Feedigest::MailComposer
Constants
Attributes
feeds[R]
Public Class Methods
new(feeds)
click to toggle source
# File lib/feedigest/mail_composer.rb, line 11 def initialize(feeds) @feeds = feeds end
Public Instance Methods
mail()
click to toggle source
# File lib/feedigest/mail_composer.rb, line 15 def mail @mail ||= Mail.new( Feedigest.config.fetch(:email_sender), Feedigest.config.fetch(:email_recipient), subject, html_body, text_body ) end
Private Instance Methods
entries_count()
click to toggle source
# File lib/feedigest/mail_composer.rb, line 110 def entries_count feeds.reduce(0) { |count, feed| count + feed.entries.size } end
entries_html(builder, entries)
click to toggle source
# File lib/feedigest/mail_composer.rb, line 78 def entries_html(builder, entries) entries.group_by { |e| e.published.to_date }.each do |date, date_entries| builder.h3 date date_entries.each do |entry| entry_html(builder, entry) end end end
entry_html(builder, entry)
click to toggle source
# File lib/feedigest/mail_composer.rb, line 88 def entry_html(builder, entry) builder.p do builder.a(entry.title, href: entry.url) end end
feed_html(builder, feed)
click to toggle source
# File lib/feedigest/mail_composer.rb, line 66 def feed_html(builder, feed) builder.div do if feed.error builder.h2 feed.url builder.p "Error: #{feed.error}" else builder.h2 feed.title entries_html(builder, feed.entries) end end end
feeds_without_error()
click to toggle source
# File lib/feedigest/mail_composer.rb, line 106 def feeds_without_error feeds.select { |feed| feed[:error].nil? } end
header_html(builder)
click to toggle source
# File lib/feedigest/mail_composer.rb, line 54 def header_html(builder) builder.p( sprintf( 'In the last %{hours}, %{entries} %{were} published in %{feeds}:', hours: pluralize(Feedigest.config.fetch(:entry_window), 'hour'), entries: pluralize(entries_count, 'entry', 'entries'), were: entries_count == 1 ? 'was' : 'were', feeds: pluralize(feeds_without_error.size, 'feed') ) ) end
html_body()
click to toggle source
# File lib/feedigest/mail_composer.rb, line 35 def html_body @html_body ||= Nokogiri::HTML::Builder.new(encoding: 'utf-8') { |builder| builder.div do header_html(builder) feeds.each do |feed| feed_html(builder, feed) end signature_html(builder) end }.to_html end
pluralize(count, singular, plural = singular + 's')
click to toggle source
# File lib/feedigest/mail_composer.rb, line 114 def pluralize(count, singular, plural = singular + 's') [count, count == 1 ? singular : plural].join(' ') end
signature_html(builder)
click to toggle source
# File lib/feedigest/mail_composer.rb, line 94 def signature_html(builder) builder.p do builder.text '--' builder.br builder.text 'Sent by ' builder.a( "feedigest #{Feedigest::VERSION}", href: 'https://github.com/agorf/feedigest' ) end end
subject()
click to toggle source
# File lib/feedigest/mail_composer.rb, line 27 def subject sprintf( 'Digest for %s in %s', pluralize(entries_count, 'entry', 'entries'), pluralize(feeds_without_error.size, 'feed') ) end
text_body()
click to toggle source
# File lib/feedigest/mail_composer.rb, line 50 def text_body ReverseMarkdown.convert(html_body) end