From: Michael Orlitzky Date: Tue, 25 Jan 2011 02:17:05 +0000 (-0500) Subject: Clean up the code for UriUtilities. X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Fwhatever-dl.git;a=commitdiff_plain;h=1ac1c27f807065c61640d325d86578cc825aab2b Clean up the code for UriUtilities. --- diff --git a/src/uri_utilities.rb b/src/uri_utilities.rb index dcff2fe..78966e8 100644 --- a/src/uri_utilities.rb +++ b/src/uri_utilities.rb @@ -25,6 +25,23 @@ require 'vendor/ruby-progressbar/progressbar' # for trouble. class UriUtilities + def initialize() + @pbar = nil + end + + def content_length_callback(content_length) + if content_length && (0 < content_length) + @pbar = ProgressBar.new("Download", content_length) + @pbar.instance_eval { @bar_mark = '=' } + @pbar.file_transfer_mode + end + end + + def progress_callback(size) + @pbar.set(size) if @pbar + end + + # Download the given URI object to . # Should use the progress_proc parameter to show # a progress bar using the Ruby/ProgressBar library. @@ -33,18 +50,18 @@ class UriUtilities # we can clean up afterwards in case of an error. begin File.open(outfile_name, 'wb') do |outfile| - pbar = nil - uri.open({:content_length_proc => lambda {|content_length| - if content_length && (0 < content_length) - pbar = ProgressBar.new("Download", content_length) - pbar.instance_eval { @bar_mark = '=' } - pbar.file_transfer_mode - end - }, - :progress_proc => lambda {|size| - pbar.set(size) if pbar - } - }.merge!(headers)) do |video_file| + # Convert our methods to Proc objects. + content_length_callback = method(:content_length_callback) + progress_callback = method(:progress_callback) + + # So that they can be passed as arguments to open(). + open_params = { :content_length_proc => content_length_callback, + :progress_proc => progress_callback} + + # Add the headers as additional parameters to the open() call. + open_params.merge!(headers) + + uri.open(open_params) do |video_file| outfile.write(video_file.read) end end