class Shoulda::Whenever::ScheduleMatcher

Attributes

duration[R]
roles[R]
task[R]
time[R]

Public Class Methods

new(task) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 14
def initialize(task)
  @task     = task
  @duration = nil
  @time     = nil
  @roles    = nil
end

Public Instance Methods

at(time) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 70
def at(time)
  @time = time

  self
end
description() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 83
def description
  [
    base_description,
    duration_description,
    time_description,
    roles_description
  ].compact.join(' ')
end
every(duration) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 64
def every(duration)
  @duration = duration

  self
end
failure_message() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 92
def failure_message
  [
    base_failure_message,
    duration_description,
    time_description,
    roles_description
  ].compact.join(' ')
end
failure_message_when_negated() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 101
def failure_message_when_negated
  [
    base_failure_message_when_negated,
    duration_description,
    time_description,
    roles_description
  ].compact.join(' ')
end
filter_jobs_by_duration(jobs) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 32
def filter_jobs_by_duration(jobs)
  if duration.nil?
    jobs.values.flatten
  else
    duration_to_fetch = if duration.is_a?(String) || duration.is_a?(Symbol)
                          duration
                        else
                          duration.to_i
                        end

    jobs.fetch(duration_to_fetch) { [] }
  end
end
filter_jobs_by_roles(jobs) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 52
def filter_jobs_by_roles(jobs)
  return jobs if roles.nil? || roles.empty?

  jobs.select { |job| job.roles == roles }
end
filter_jobs_by_task(jobs) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 58
def filter_jobs_by_task(jobs)
  jobs.select do |job|
    job.instance_variable_get("@options")[:task] == task
  end
end
filter_jobs_by_time(jobs) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 46
def filter_jobs_by_time(jobs)
  return jobs if time.nil?

  jobs.select { |job| job.at == time }
end
matches?(subject) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 21
def matches?(subject)
  jobs = subject.instance_variable_get("@jobs")

  jobs = filter_jobs_by_duration(jobs)
  jobs = filter_jobs_by_time(jobs)
  jobs = filter_jobs_by_roles(jobs)
  jobs = filter_jobs_by_task(jobs)

  jobs.any?
end
with_role(roles)
Alias for: with_roles
with_roles(roles) click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 76
def with_roles(roles)
  @roles = Array(roles)

  self
end
Also aliased as: with_role

Private Instance Methods

base_description() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 112
def base_description
  "schedule \"#{ task }\""
end
base_failure_message() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 140
def base_failure_message
  "expected to schedule \"#{ task }\""
end
base_failure_message_when_negated() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 144
def base_failure_message_when_negated
  "expected not to schedule \"#{ task }\""
end
duration_description() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 116
def duration_description
  unless duration.nil?
    if duration.is_a?(String) || duration.is_a?(Symbol)
      "every \"#{ duration }\""
    else
      "every #{ duration.to_i } seconds"
    end
  end
end
roles_description() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 132
def roles_description
  unless roles.nil? || roles.empty?
    role_names = roles.map { |role| "\"#{ role }\"" }.join(", ")

    "with #{ role_names } role(s)"
  end
end
time_description() click to toggle source
# File lib/shoulda/whenever/schedule_matcher.rb, line 126
def time_description
  unless time.nil?
    "at \"#{ time }\""
  end
end