Update load manifest in decorator. Use meta programmings for describe methods 
inputs, outputs, intermediates


Project: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-databundle-viewer/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-databundle-viewer/commit/3fd1d6a0
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-databundle-viewer/tree/3fd1d6a0
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-databundle-viewer/diff/3fd1d6a0

Branch: refs/heads/master
Commit: 3fd1d6a0e7ff83ebb2846c468198aab70ea83deb
Parents: 974abbc
Author: Denis Karyakin <samhane...@gmail.com>
Authored: Mon Aug 10 23:48:01 2015 +0300
Committer: Denis Karyakin <samhane...@gmail.com>
Committed: Mon Aug 10 23:48:01 2015 +0300

----------------------------------------------------------------------
 app/decorators/data_bundle_decorator.rb | 36 +++++++++++-----------------
 1 file changed, 14 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-databundle-viewer/blob/3fd1d6a0/app/decorators/data_bundle_decorator.rb
----------------------------------------------------------------------
diff --git a/app/decorators/data_bundle_decorator.rb 
b/app/decorators/data_bundle_decorator.rb
index 2e1f745..90359d3 100644
--- a/app/decorators/data_bundle_decorator.rb
+++ b/app/decorators/data_bundle_decorator.rb
@@ -20,32 +20,24 @@
 class DataBundleDecorator < Draper::Decorator
   delegate_all
 
-  def manifest
-    if @manifest.nil?
-      tmp_file = Tempfile.new('bundle', Rails.root.join('tmp'), encoding: 
'ascii-8bit')
-      tmp_file.write(open(object.file.url).read)
-      @bundle_file = ROBundle::File.open(tmp_file.path)
-      @manifest = 
JSON.parse(@bundle_file.find_entry('.ro/manifest.json').get_input_stream.read)
-    end
-
-    @manifest
-  end
+  FILE_TYPES = {
+      inputs: '/inputs/',
+      intermediates: '/intermediates/',
+      outputs: '/outputs/'
+  }
 
-  def inputs
-    inputs = manifest['aggregates'].select { |files| files['folder'] == 
'/inputs/' }.first
-    if inputs.nil?
-      ''
-    else
-      @bundle_file.find_entry(inputs['file'].sub(/^\//, 
'')).get_input_stream.read
+  FILE_TYPES.each do |type_key, type_name|
+    define_method :"#{type_key}" do
+      manifest['aggregates'].select { |files| 
files['folder'].start_with?(type_name) }
     end
   end
 
-  def outputs
-    outputs = manifest['aggregates'].select { |files| files['folder'] == 
'/outputs/' }.first
-    if outputs.nil?
-      ''
-    else
-      @bundle_file.find_entry(outputs['file'].sub(/^\//, 
'')).get_input_stream.read
+  def manifest
+    if @manifest.nil?
+      file = 
File.new("#{object.file.root}/#{object.file.store_dir}/#{DataBundle::EXTRACTED_PATH}/.ro/manifest.json",
 'r')
+      @manifest = JSON.parse(file.read)
     end
+
+    @manifest
   end
 end

Reply via email to