module Mongoid::UnpackPaperclip
Public Instance Methods
unpack_paperclip() { |pwd| ... }
click to toggle source
# File lib/mongoid_unpack_paperclip.rb, line 11 def unpack_paperclip &blk return false if not blk item = self # 1. unpack # 1.1 fetch paperclip object paperclip_regexp = /_([a-z_]+)_post_process_callbacks/ paperclip_method = item.methods.detect {|m| m.match(paperclip_regexp) }.to_s.match(paperclip_regexp)[1] return false if not File.exists? item.send(paperclip_method).path paperclip_path = item.send(paperclip_method).path FileUtils.chdir File.dirname(paperclip_path) extract_path = File.basename(paperclip_path).split('.')[0] # 1.2 unpack zip pre_uncompress_command = case extname = File.extname(paperclip_path) when ".zip" "unzip -oqqd " when ".7z" "7z x -yo" else # return false directly return "#{extname} is invalid" end root_dir = File.join(Dir.pwd, extract_path) item.unpack_paperclip_errors = [] item.save validate: false result = nil begin system "#{pre_uncompress_command}#{extract_path} #{paperclip_path}" # 1.3 look dir FileUtils.chdir extract_path # 2. yield process result = yield Dir.pwd rescue => e item.unpack_paperclip_errors = e.backtrace.push(e).map(&:inspect) item.save validate: false end # 3. clean files FileUtils.rm_rf root_dir FileUtils.chdir Rails.root return result end