class ActsAsSpan::WithinParentDateSpanValidator

Public Instance Methods

outside_of_parent_date_span?(record, parent_sym) click to toggle source
# File lib/acts_as_span/within_parent_date_span_validator.rb, line 13
def outside_of_parent_date_span?(record, parent_sym)
  parent = record.send(parent_sym)

  return false if parent.nil?

    child_record_without_start_date(record, parent) ||
    child_record_without_end_date(record, parent) ||
    child_record_started_before_parent_record(record, parent) ||
      child_record_ended_after_parent_record(record, parent)
end
validate(record) click to toggle source
# File lib/acts_as_span/within_parent_date_span_validator.rb, line 3
def validate(record)
  parents = options[:parent] || options[:parents]

  error_message = options[:message] || :not_within_parent_date_span

  Array(parents).each do |parent|
    record.errors.add(:base, error_message, parent: record.class.human_attribute_name(parent)) if outside_of_parent_date_span?(record, parent)
  end
end

Private Instance Methods

child_record_ended_after_parent_record(record, parent) click to toggle source
# File lib/acts_as_span/within_parent_date_span_validator.rb, line 31
def child_record_ended_after_parent_record(record, parent)
  record.span.end_date.present? && parent.span.end_date.present? &&
    record.span.end_date > parent.span.end_date
end
child_record_started_before_parent_record(record, parent) click to toggle source
# File lib/acts_as_span/within_parent_date_span_validator.rb, line 26
def child_record_started_before_parent_record(record, parent)
  record.span.start_date.present? && parent.span.start_date.present? &&
    record.span.start_date < parent.span.start_date
end
child_record_without_end_date(record, parent) click to toggle source
# File lib/acts_as_span/within_parent_date_span_validator.rb, line 40
def child_record_without_end_date(record, parent)
  record.span.end_date.nil? && parent.span.end_date.present?
end
child_record_without_start_date(record, parent) click to toggle source
# File lib/acts_as_span/within_parent_date_span_validator.rb, line 36
def child_record_without_start_date(record, parent)
  record.span.start_date.nil? && parent.span.start_date.present?
end