X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Fwhatever-dl.git;a=blobdiff_plain;f=src%2Fwebsite.rb;h=96290dee3de99ac7d00f34e14298110be82455a0;hp=1239712a696a3b855ec3ad79472865a608e7f937;hb=83e06f83d8274cb32a406739839d56e759664b09;hpb=2c835ed7a247ed5639277bc9674b848722ad998d diff --git a/src/website.rb b/src/website.rb index 1239712..96290de 100644 --- a/src/website.rb +++ b/src/website.rb @@ -20,6 +20,12 @@ # We use this to loop through every "website" in an # attempt to determine to which site a URL belongs. class Website + + protected; + + @url = nil + + def self.inherited(subclass) if superclass.respond_to? :inherited superclass.inherited(subclass) @@ -31,18 +37,53 @@ class Website @subclasses << subclass end - def self.subclasses - @subclasses + + public; + + def initialize(url) + @url = url end - # This should be overridden in any class that wants - # to claim ownership of a URL. + + def self.create(url) + # Factory method returning an instance of + # the appropriate subclass. + + # Check the URL against each website's class. + # The class will know whether or not the URL + # "belongs" to its website. + @subclasses.each do |w| + if w.owns_url?(url) + return w.new(url) + end + end + + # If nothing matched, we don't return an instance + # of anything. + return nil + end + + + # Abstract definition. Each subclass of Website + # should support it on its own. def self.owns_url?(url) - return false + raise NotImplementedError end - # Same here. We want to default to nil unless overridden. - def get_video_url(url) - return nil + + # 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. + return get_video_url().split('/').pop() end + end