]> gitweb.michael.orlitzky.com - dead/whatever-dl.git/blobdiff - src/website.rb
Made the output filename the responsibility of the website subclass.
[dead/whatever-dl.git] / src / website.rb
index 1239712a696a3b855ec3ad79472865a608e7f937..96290dee3de99ac7d00f34e14298110be82455a0 100644 (file)
 # 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