codecation/trailmix

View on GitHub
app/models/user.rb

Summary

Maintainability
A
0 mins
Test Coverage
class User < ActiveRecord::Base
  devise :database_authenticatable,
         :recoverable,
         :rememberable,
         :trackable,
         :validatable

  has_many :entries, dependent: :destroy
  has_many :imports, dependent: :destroy
  has_one :subscription, dependent: :destroy

  before_create :generate_reply_token

  delegate :stripe_customer_id, to: :subscription

  def self.promptable(time = Time.zone.now.utc)
    where(prompt_delivery_hour: time.hour)
  end

  def reply_email
    "#{reply_token}@#{ENV.fetch('SMTP_DOMAIN')}"
  end

  def generate_reply_token
    self.reply_token = ReplyToken.generate(email)
  end

  def newest_entry
    entries.newest
  end

  def prompt_entry
    PromptEntry.best(entries)
  end

  def prompt_delivery_hour
    PromptDeliveryHour.new(super, time_zone).in_time_zone
  end

  def prompt_delivery_hour=(hour)
    super PromptDeliveryHour.new(hour, time_zone).in_utc
  end
end