myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [3714] branches/packs/app: added zip file generat


From: noreply
Subject: [myexperiment-hackers] [3714] branches/packs/app: added zip file generation to research objects
Date: Wed, 25 Sep 2013 01:06:06 +0000 (UTC)

Revision
3714
Author
dgc
Date
2013-09-25 01:06:05 +0000 (Wed, 25 Sep 2013)

Log Message

added zip file generation to research objects

Modified Paths

Diff

Modified: branches/packs/app/controllers/research_objects_controller.rb (3713 => 3714)


--- branches/packs/app/controllers/research_objects_controller.rb	2013-09-24 09:06:17 UTC (rev 3713)
+++ branches/packs/app/controllers/research_objects_controller.rb	2013-09-25 01:06:05 UTC (rev 3714)
@@ -27,11 +27,23 @@
 
     ro = ResearchObject.find_by_slug_and_version(slug, nil)
 
-    if (ro)
-      redirect_to research_object_url(slug) + "/" + ResearchObject::MANIFEST_PATH, :status => 303
-    else
+    unless ro
       render :text => "Research Object not found", :status => 404
+      return
     end
+
+    respond_to do |format|
+      format.html {
+        redirect_to polymorphic_path(ro.context)
+      }
+      format.rdf { 
+        redirect_to research_object_url(slug) + "/" + ResearchObject::MANIFEST_PATH, :status => 303
+      }
+      format.zip {
+        zip_file_name = ro.generate_zip!
+        send_file zip_file_name, :type => "application/zip", :disposition => 'attachment', :filename => "#{ro.slug}.zip"
+      }
+    end
   end
 
   # POST /rodl

Modified: branches/packs/app/models/research_object.rb (3713 => 3714)


--- branches/packs/app/models/research_object.rb	2013-09-24 09:06:17 UTC (rev 3713)
+++ branches/packs/app/models/research_object.rb	2013-09-25 01:06:05 UTC (rev 3714)
@@ -776,6 +776,37 @@
     nil
   end
 
+  def generate_zip!
+
+    zip_file_name = "tmp/zipped_ro.#{$$}.zip"
+
+    FileUtils.rm_rf(zip_file_name)
+
+    zip_file = Zip::ZipFile.open(zip_file_name, Zip::ZipFile::CREATE)
+
+      resources.each do |resource|
+
+        if resource.content_blob.nil?
+          resource.generate_graph!
+          resource.reload
+        end
+
+        next unless resource.content_blob
+
+        next if resource.is_folder
+
+        zip_file.get_output_stream(resource.path) do |stream|
+          data = ""
+          data.force_encoding(Encoding::ASCII_8BIT)
+          stream.write(data)
+        end
+      end
+
+    zip_file.close
+
+    zip_file_name
+  end
+
 private
 
   def create_manifest #:nodoc:

reply via email to

[Prev in Thread] Current Thread [Next in Thread]