class MailHandler::Receiver

handling receiving email

Constants

@param [Hash] - search options @see MailHandler::Receiving::Checker::AVAILABLE_SEARCH_OPTIONS for available options

@param [Time] - search started at Time @param [Time] - search finished at Time @param [int] - how long search lasted @param [int] - how long search can last @param [boolean] - result of search @param [Mail] - first email found @param [Array] - all emails found

Attributes

checker[RW]
max_search_duration[RW]
search_frequency[RW]
validate_result[RW]

Public Class Methods

new(checker) click to toggle source
# File lib/mailhandler/receiver.rb, line 37
def initialize(checker)
  @checker = checker
  @max_search_duration = DEFAULTS::MAX_SEARCH_DURATION
  @search_frequency = DEFAULTS::SEARCH_FREQUENCY
  @validate_result = false
end

Public Instance Methods

find_email(options) click to toggle source
# File lib/mailhandler/receiver.rb, line 44
def find_email(options)
  init_search_details(options)
  checker.start

  until search_time_expired?
    break if single_search(options)

    sleep search_frequency
  end

  notify_observers(search)
  checker.search_result
ensure
  checker.stop
  check_result
end

Private Instance Methods

check_result() click to toggle source
# File lib/mailhandler/receiver.rb, line 63
def check_result
  return unless validate_result
  return if checker.search_result

  raise SearchEmailError, "Email searched by #{@search.options} not found for #{@search.max_duration} seconds."
end
init_search_details(options) click to toggle source
# File lib/mailhandler/receiver.rb, line 77
def init_search_details(options)
  @search = Search.new
  @search.options = options
  @search.started_at = Time.now
  @search.max_duration = @max_search_duration
end
search_details_set?() click to toggle source
# File lib/mailhandler/receiver.rb, line 91
def search_details_set?
  !search.duration.nil?
end
search_time_expired?() click to toggle source
# File lib/mailhandler/receiver.rb, line 100
def search_time_expired?
  ((Time.now - search.started_at) > @max_search_duration) && search_details_set?
end
update_search_details() click to toggle source
# File lib/mailhandler/receiver.rb, line 84
def update_search_details
  search.finished_at = Time.now
  search.duration = search.finished_at - search.started_at
  search.result = checker.search_result
  update_search_email_details
end
update_search_email_details() click to toggle source
# File lib/mailhandler/receiver.rb, line 95
def update_search_email_details
  search.emails = checker.found_emails
  search.email = checker.found_emails.first
end