module Rules

  class Rfc822 < DataElement
    def validate value
      if value =~ /(((Mon)|(Tue)|(Wed)|(Thu)|(Fri)|(Sat)|(Sun)), *)?\d\d? +((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec)) +\d\d(\d\d)? +\d\d:\d\d(:\d\d)? +(([+-]?\d\d\d\d)|(UT)|(GMT)|(EST)|(EDT)|(CST)|(CDT)|(MST)|(MDT)|(PST)|(PDT)|\w)$/
        log :ValidRFC2822Date
      else
        log :InvalidRFC2822Date
      end
    end
  end

  class Rfc3339 < DataElement
    def validate value
      if value =~ /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d(\.\d*)?(Z|([+-]\d\d:\d\d))$/
        log :ValidRFC3339Date
      else
        log :InvalidRFC3339Date
      end
    end
  end

  class W3cdtf < DataElement
    def validate value
      if value =~ /^\d\d\d\d(-\d\d(-\d\d(T\d\d:\d\d(:\d\d(\.\d*)?)?(Z|([+-]\d\d:\d\d)))?)?)?$/
        log :ValidW3CDTFDate
      else
        log :InvalidW3CDTFDate
      end
    end
  end

end
