Module: Tricle::EmailHelper
- Defined in:
- lib/tricle/email_helper.rb
Instance Method Summary collapse
- #dates_cell(start_at, end_at) ⇒ Object
- #dates_range_str(start_at, end_at) ⇒ Object
- #format_date(date) ⇒ Object
- #format_number(number) ⇒ Object
- #last_week_dates_cell ⇒ Object
- #list_markup(list) ⇒ Object
- #number_with_delimiter(number) ⇒ Object
- #percent_change(new_val, old_val) ⇒ Object
- #percent_change_cell(new_val, old_val, better) ⇒ Object
- #percent_change_class(new_val, old_val, better) ⇒ Object
- #previous_week_dates_cell ⇒ Object
- #quarter_dates_cell ⇒ Object
- #sig_figs(number, num_sig_figs = 3) ⇒ Object
- #single_week_dates_cell(start_at) ⇒ Object
- #sparkline(metric) ⇒ Object
- #weeks_ago(n) ⇒ Object
Instance Method Details
#dates_cell(start_at, end_at) ⇒ Object
64 65 66 67 |
# File 'lib/tricle/email_helper.rb', line 64 def dates_cell(start_at, end_at) range = dates_range_str(start_at, end_at) %[<div class="date-range">(#{range})</div>].html_safe end |
#dates_range_str(start_at, end_at) ⇒ Object
60 61 62 |
# File 'lib/tricle/email_helper.rb', line 60 def dates_range_str(start_at, end_at) "#{ self.format_date(start_at) } - #{ self.format_date(end_at) }" end |
#format_date(date) ⇒ Object
10 11 12 |
# File 'lib/tricle/email_helper.rb', line 10 def format_date(date) date.strftime('%-m/%-d/%y') end |
#format_number(number) ⇒ Object
14 15 16 |
# File 'lib/tricle/email_helper.rb', line 14 def format_number(number) number_with_delimiter((number.abs >= 100 ? number.round : sig_figs(number))) end |
#last_week_dates_cell ⇒ Object
73 74 75 |
# File 'lib/tricle/email_helper.rb', line 73 def last_week_dates_cell single_week_dates_cell(weeks_ago(1)) end |
#list_markup(list) ⇒ Object
85 86 87 88 89 |
# File 'lib/tricle/email_helper.rb', line 85 def list_markup(list) start_at = self.weeks_ago(1).to_time end_at = start_at + 7.days list.items_markup(start_at, end_at).html_safe end |
#number_with_delimiter(number) ⇒ Object
18 19 20 21 22 |
# File 'lib/tricle/email_helper.rb', line 18 def number_with_delimiter(number) # from http://stackoverflow.com/a/11466770/358804 integer, decimal = number.to_s.split(".") [integer.to_s.reverse.gsub(/(\d{3})(?=\d)/, '\\1,').reverse, decimal].compact.join('.') end |
#percent_change(new_val, old_val) ⇒ Object
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/tricle/email_helper.rb', line 31 def percent_change(new_val, old_val) if old_val == new_val 'No change' elsif old_val == 0 new_val >= 0 ? '+' : '-' else fraction = (new_val - old_val) / old_val.to_f (fraction >= 0 ? '+' : '').concat("#{sig_figs(fraction * 100.0)}%") end end |
#percent_change_cell(new_val, old_val, better) ⇒ Object
53 54 55 56 57 58 |
# File 'lib/tricle/email_helper.rb', line 53 def percent_change_cell(new_val, old_val, better) cls = self.percent_change_class(new_val, old_val, better) pct_str = percent_change(new_val, old_val) old_val_str = format_number(old_val) %[<td class="#{cls}"><div>#{pct_str}</div><div>#{old_val_str}</div></td>].html_safe end |
#percent_change_class(new_val, old_val, better) ⇒ Object
42 43 44 45 46 47 48 49 50 51 |
# File 'lib/tricle/email_helper.rb', line 42 def percent_change_class(new_val, old_val, better) case better when :higher (new_val >= old_val) ? 'good' : 'bad' when :lower (new_val > old_val) ? 'bad' : 'good' else '' end end |
#previous_week_dates_cell ⇒ Object
77 78 79 |
# File 'lib/tricle/email_helper.rb', line 77 def previous_week_dates_cell single_week_dates_cell(weeks_ago(2)) end |
#quarter_dates_cell ⇒ Object
81 82 83 |
# File 'lib/tricle/email_helper.rb', line 81 def quarter_dates_cell dates_cell(weeks_ago(13), weeks_ago(1).end_of_week) end |
#sig_figs(number, num_sig_figs = 3) ⇒ Object
24 25 26 27 28 29 |
# File 'lib/tricle/email_helper.rb', line 24 def sig_figs(number, num_sig_figs = 3) # http://six-impossible.blogspot.com/2011/05/significant-digits-in-ruby-float.html f = sprintf("%.#{num_sig_figs - 1}e", number).to_f i = f.to_i # avoid i == f && i.to_s.size > num_sig_figs ? i : f end |
#single_week_dates_cell(start_at) ⇒ Object
69 70 71 |
# File 'lib/tricle/email_helper.rb', line 69 def single_week_dates_cell(start_at) dates_cell(start_at, start_at.end_of_week) end |
#sparkline(metric) ⇒ Object
91 92 93 94 95 |
# File 'lib/tricle/email_helper.rb', line 91 def sparkline(metric) values = metric.weekly_values(13) = "https://sparklines.herokuapp.com/api/v1.png?values=#{values.join(',')}" image_tag(, alt: 'sparkline').html_safe end |
#weeks_ago(n) ⇒ Object
6 7 8 |
# File 'lib/tricle/email_helper.rb', line 6 def weeks_ago(n) Date.today.beginning_of_week.ago(n.weeks) end |