class DifficultCustomer::MessageDisplay

Message renderer

Public Class Methods

new(session, request, user_signed_in) click to toggle source
# File lib/difficult_customer/message_display.rb, line 6
def initialize(session, request, user_signed_in)
  @session = session
  @request = request
  @user_signed_in = user_signed_in
end

Public Instance Methods

message_to_render() click to toggle source
# File lib/difficult_customer/message_display.rb, line 12
def message_to_render
  return if priorities_sorted.first.nil?

  priorities_sorted.first
end

Private Instance Methods

after_sign_in_qualifies(message) click to toggle source
# File lib/difficult_customer/message_display.rb, line 57
def after_sign_in_qualifies(message)
  return false unless message.params['frequency'] == 'after-sign-in'
  return false if @request.referer.nil?

  @request.referer.ends_with?('sign_in') && @user_signed_in
end
cast_message(message_params) click to toggle source
# File lib/difficult_customer/message_display.rb, line 64
def cast_message(message_params)
  Message.new(message_params['message'])
end
config() click to toggle source
# File lib/difficult_customer/message_display.rb, line 68
def config
  DifficultCustomer::Config.new.config
end
date_in_range(message) click to toggle source
# File lib/difficult_customer/message_display.rb, line 40
def date_in_range(message)
  start_date = message.params['start_date'] || '1970-01-01'
  end_date = message.params['end_date'] || '2100-01-01'
  (Date.parse(start_date)..Date.parse(end_date)).cover?(Time.zone.now)
end
every_n_requests_qualifies(message) click to toggle source
# File lib/difficult_customer/message_display.rb, line 50
def every_n_requests_qualifies(message)
  frequency = message.params['frequency']
  return false if (frequency =~ /every-(\d+)-requests/).nil?

  (@session[:requests] % frequency.split('-')[1].to_i).zero?
end
every_request_qualifies(message) click to toggle source
# File lib/difficult_customer/message_display.rb, line 46
def every_request_qualifies(message)
  message.params['frequency'] == 'every-request'
end
message_qualifies(message) click to toggle source
# File lib/difficult_customer/message_display.rb, line 33
def message_qualifies(message)
  return false unless date_in_range(message)

  every_request_qualifies(message) || after_sign_in_qualifies(message) ||
    every_n_requests_qualifies(message)
end
priorities_sorted() click to toggle source
# File lib/difficult_customer/message_display.rb, line 20
def priorities_sorted
  out = []
  %w[high medium low].each do |priority|
    config['messages'].each do |message|
      message = cast_message(message)
      next unless message.params['priority'] == priority

      out.push(message) if message_qualifies(message)
    end
  end
  out
end