app/models/concerns/videoable.rb
module Videoable
extend ActiveSupport::Concern
included do
validate :valid_video_url?
end
VIMEO_REGEX = /vimeo.*(staffpicks\/|channels\/|videos\/|video\/|\/)([^#\&\?]*).*/
YOUTUBE_REGEX = /youtu.*(be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=)([^#\&\?]*).*/
def valid_video_url?
url = send(video_url_field)
return if url.blank?
return if url.match(VIMEO_REGEX)
return if url.match(YOUTUBE_REGEX)
errors.add(video_url_field, :invalid)
end
def video_url_field
if has_attribute?(:video_url)
:video_url
else
:url
end
end
end