+
+
+ # Abstract definition. Each subclass of Website
+ # should support it on its own.
+ def self.owns_url?(url)
+ raise NotImplementedError
+ end
+
+
+ # Same here. Abstract.
+ def get_video_url()
+ raise NotImplementedError
+ end
+
+
+ # The website class should be responsible for determining the
+ # video's filename. By default, we can take the last component
+ # of the video URL, but in some cases, subclasses will want
+ # to override this behavior.
+ def get_video_filename()
+ # Use whatever comes after the final front slash.
+ file_and_params = get_video_url().split('/').pop()
+
+ # Unless it contains URL parameters. We don't want those.
+ return file_and_params unless file_and_params.include?('?')
+
+ # There must be some parameters. Strip them off.
+ param_start_idx = file_and_params.index('?')
+ return file_and_params[0...(param_start_idx)]
+ end
+