class Report

Public Class Methods

schedule() click to toggle source
# File lib/caperoma/models/report.rb, line 13
def self.schedule
  puts 'Turning on auto reports'
  root = File.dirname __dir__
  crontab_config_file = File.join root, '..', '..', 'config', 'schedule.rb'
  `whenever --update-crontab caperoma --load-file "#{crontab_config_file}"`
  puts 'Auto reports turned on'
end
unschedule() click to toggle source
# File lib/caperoma/models/report.rb, line 21
def self.unschedule
  puts 'Turning off auto reports'
  root = File.dirname __dir__
  crontab_config_file = File.join root, '..', '..', 'config', 'unschedule.rb'
  `whenever --update-crontab caperoma --load-file "#{crontab_config_file}"`
  puts 'Auto reports turned off'
end

Private Instance Methods

assign_unreported_tasks() click to toggle source

most of it is related to email formatting

# File lib/caperoma/models/report.rb, line 39
def assign_unreported_tasks
  unreported_tasks.update_all(report_sti_key => id)
end
formatted_day(day) click to toggle source
# File lib/caperoma/models/report.rb, line 99
def formatted_day(day)
  day.strftime('%b %-d')
end
formatted_end_day() click to toggle source
# File lib/caperoma/models/report.rb, line 107
def formatted_end_day
  formatted_day(end_day)
end
formatted_start_day() click to toggle source
# File lib/caperoma/models/report.rb, line 103
def formatted_start_day
  formatted_day(start_day)
end
formatted_title(task) click to toggle source
# File lib/caperoma/models/report.rb, line 158
def formatted_title(task)
  truncate(task.title, length: 90)
end
hours_spent() click to toggle source
# File lib/caperoma/models/report.rb, line 71
def hours_spent
  (total_time_spent_in_minutes / 60).to_i
end
jira_formatted_url(task) click to toggle source
# File lib/caperoma/models/report.rb, line 166
def jira_formatted_url(task)
  "<a href=\"#{task.jira_live_url}\">#{task.jira_key}</a>"
end
jira_url_or_blank(task) click to toggle source
# File lib/caperoma/models/report.rb, line 162
def jira_url_or_blank(task)
  task.jira_key.present? ? jira_formatted_url(task) : ''
end
not_test?() click to toggle source
# File lib/caperoma/models/report.rb, line 83
def not_test?
  ENV['CAPEROMA_INTEGRATION_TEST'].blank? && ENV['CAPEROMA_TEST'].blank?
end
pivotal_formatted_url(task) click to toggle source
# File lib/caperoma/models/report.rb, line 174
def pivotal_formatted_url(task)
  "<a href=\"#{task.pivotal_url}\">#{task.pivotal_id}</a>"
end
pivotal_url_or_blank(task) click to toggle source
# File lib/caperoma/models/report.rb, line 170
def pivotal_url_or_blank(task)
  task.pivotal_id.present? ? pivotal_formatted_url(task) : ''
end
remaining_minutes_spent() click to toggle source
# File lib/caperoma/models/report.rb, line 75
def remaining_minutes_spent
  (total_time_spent_in_minutes - hours_spent * 60).to_i
end
report_body() click to toggle source
# File lib/caperoma/models/report.rb, line 123
def report_body
  [
    "\n",
    "<h2>Done during #{timeframe}:</h2>",
    '<br />',
    '<table style="width: 100%;text-align: left;">',
    '<thead>',
    '<tr><th>Jira</th><th>Pivotal</th><th>Title</th><th>Time spent</th></tr>',
    '</thead>',
    '<tbody>',
    reported_tasks_rows,
    '</tbody>',
    '</table>',
    '<br />',
    "<strong>Total time spent during #{timeframe}:</strong> #{total_time_spent}."
  ].flatten.join("\n")
end
report_msg() click to toggle source
# File lib/caperoma/models/report.rb, line 91
def report_msg
  report_msg_content.join("\n")
end
report_msg_content() click to toggle source
# File lib/caperoma/models/report.rb, line 95
def report_msg_content
  ["subject: #{report_subject}", 'Content-Type: text/html; charset=UTF-8', report_body]
end
report_sti_key() click to toggle source
# File lib/caperoma/models/report.rb, line 55
def report_sti_key
  self.class.to_s.foreign_key
end
report_subject() click to toggle source
# File lib/caperoma/models/report.rb, line 115
def report_subject
  [subject_name, subject_timeframe].join(' ')
end
reported_tasks() click to toggle source
# File lib/caperoma/models/report.rb, line 63
def reported_tasks
  tasks.finished.order(finished_at: :desc)
end
reported_tasks_rows() click to toggle source
# File lib/caperoma/models/report.rb, line 141
def reported_tasks_rows
  reported_tasks.collect { |task| table_row(task) }.join("\n")
end
send_email() click to toggle source
# File lib/caperoma/models/report.rb, line 43
def send_email
  @smtp.start('gmail.com', @account.email, @account.password, :login, &send_email_method)
end
send_email_method() click to toggle source
# File lib/caperoma/models/report.rb, line 47
def send_email_method
  proc { @smtp.send_message(report_msg, @account.email, to_addresses) }
end
set_variables() click to toggle source
# File lib/caperoma/models/report.rb, line 31
def set_variables
  @smtp = Net::SMTP.new 'smtp.gmail.com', 587
  @smtp.enable_starttls
  @account = Account.gmail
end
subject_timeframe() click to toggle source
# File lib/caperoma/models/report.rb, line 119
def subject_timeframe
  "(#{timeframe})"
end
table_row(task) click to toggle source
# File lib/caperoma/models/report.rb, line 145
def table_row(task)
  '<tr>' + task_row_data(task).collect { |task| '<td>' + task + '</td>' }.join("\n") + '</tr>'
end
task_row_data(task) click to toggle source
# File lib/caperoma/models/report.rb, line 149
def task_row_data(task)
  [
    jira_url_or_blank(task),
    pivotal_url_or_blank(task),
    formatted_title(task),
    task.time_spent
  ]
end
timeframe() click to toggle source
# File lib/caperoma/models/report.rb, line 111
def timeframe
  [formatted_start_day, formatted_end_day].join(' - ')
end
to_addresses() click to toggle source
# File lib/caperoma/models/report.rb, line 87
def to_addresses
  ReportRecipient.all.collect(&:email)
end
total_time_spent() click to toggle source
# File lib/caperoma/models/report.rb, line 67
def total_time_spent
  "#{hours_spent}h #{remaining_minutes_spent}m"
end
total_time_spent_in_minutes() click to toggle source
# File lib/caperoma/models/report.rb, line 79
def total_time_spent_in_minutes
  reported_tasks.all.collect(&:time_spent_in_minutes).sum
end
unreported_tasks() click to toggle source
# File lib/caperoma/models/report.rb, line 51
def unreported_tasks
  Task.finished.where(report_sti_key => nil)
end
update_content() click to toggle source
# File lib/caperoma/models/report.rb, line 59
def update_content
  update content: report_msg
end