class GcloudStorage::Base
Attributes
connection[R]
Public Class Methods
new(options)
click to toggle source
# File lib/gcloud_storage/base.rb, line 10 def initialize(options) @connection = { credentials: options } Error.missing_credentials unless options.is_a?(Hash) unless options[:storage] == :local_store missing_options = [] [:bucket_name, :project_id, :key_file].each do |option| option_value = options[option] unless options[:compute_instance] && option == :key_file missing_options << option if (option_value.nil? || !(option_value)) end end unless missing_options.empty? raise Error::Argument.new(":#{missing_options.join(', ')} are missing") end end # Cache service, storage and bucket to @connection self.bucket end
Public Instance Methods
bucket()
click to toggle source
# File lib/gcloud_storage/base.rb, line 66 def bucket @connection[:bucket] ||= self.storage.bucket( @connection[:credentials][:bucket_name] ) end
delete_file(file_path)
click to toggle source
# File lib/gcloud_storage/base.rb, line 99 def delete_file(file_path) begin file = self.bucket.file(file_path) file.delete rescue => e if e.class == NoMethodError raise Google::Cloud::Error.new( "Not Found: The object you specified doesn't exist!" ) else raise e end end end
expirable_url(file_path, num_secs=300)
click to toggle source
# File lib/gcloud_storage/base.rb, line 72 def expirable_url(file_path, num_secs=300) file = self.bucket.file(file_path) file.signed_url(method: 'GET', expires: num_secs) end
service()
click to toggle source
# File lib/gcloud_storage/base.rb, line 35 def service storage_type = @connection[:credentials][:storage].present? ? @connection[:credentials][:storage] : (:gcloud) begin @connection[:service] ||= if storage_type == :local_store LocalStore.new else Google::Cloud::Storage.new( project_id: @connection[:credentials][:project_id], credentials: @connection[:credentials][:key_file] ) end rescue => e raise e end end
storage()
click to toggle source
# File lib/gcloud_storage/base.rb, line 54 def storage @connection[:storage] ||= ( begin tries ||= 3 self.service rescue => e retry unless (tries -= 1).zero? raise e end ) end
upload_file(file, dest_file_path)
click to toggle source
# File lib/gcloud_storage/base.rb, line 77 def upload_file(file, dest_file_path) remote_file = nil file_path = (file.respond_to?(:tempfile))? file.tempfile : file begin retries ||= 2 remote_file = self.bucket.upload_file file_path, dest_file_path rescue => e unless (retries -= 1).zero? retry else raise e end else unless remote_file.md5 == Digest::MD5.base64digest(File.read(file_path)) raise Exception.new('Uploaded file is corrupted.') end remote_file end end