module GcloudStorage::Uploader::ClassMethods
Public Instance Methods
mount_gcloud_uploader(column, options = {})
click to toggle source
# File lib/gcloud_storage/uploader.rb, line 8 def mount_gcloud_uploader(column, options = {}) private_methods = [] attr_accessor :"#{column}_uploader_object" after_save :"upload_#{column}_file_to_gc", if: lambda { send(:"saved_change_to_#{column}?") } before_destroy :"delete_#{column}_file_from_gc" after_initialize :"init_file_name_for_#{column}", if: lambda { send(:"#{column}_uploader_object").present? } if options[:presence] == true validate :"#{column}_presence" define_method(:"#{column}_presence") do errors.add(column,"cannot be empty. Please set a file path for :#{column}_uploader_object attribute.") unless send(column.to_sym).present? end private_methods << :"#{column}_presence" end define_method(:"#{column}_path") do "uploads/#{self.class.to_s.underscore}s/#{self.id || "non_persisted"}/#{column}s/#{send(column.to_sym)}" end define_method(:"#{column}_url") do expirable_gc_url(send(:"#{column}_path")) end define_method(:"#{column}_exists?") do send("#{column}_url".to_sym).present? end define_method(:"#{column}_expirable_url") do |num_secs| expirable_gc_url(send(:"#{column}_path"), num_secs) end define_method(:"upload_#{column}_file_to_gc") do upload_file_to_gc(send(:"#{column}_uploader_object"), send(:"#{column}_path")) if send(:"#{column}_uploader_object").present? end define_method(:"delete_#{column}_file_from_gc") do delete_file_from_gc(send(:"#{column}_path")) if send(column.to_sym).present? end define_method(:"init_file_name_for_#{column}") do send(:"#{column}=", sanitize_filename(return_filename(send(:"#{column}_uploader_object")))) end private_methods.push( :"upload_#{column}_file_to_gc", :"delete_#{column}_file_from_gc", :"init_file_name_for_#{column}" ) unless respond_to?(:sanitize_filename) define_method(:sanitize_filename) do |file_name| file_name.gsub(/[^0-9A-z.\-]/, '_') if file_name end private_methods << :sanitize_filename end unless respond_to?(:return_filename) define_method(:return_filename) do |file| if file.is_a?(String) file.split("/").last elsif file.is_a?(Pathname) file.to_s elsif file.respond_to?(:original_filename) file.original_filename end end private_methods << :return_filename end unless respond_to?(:upload_file_to_gc) define_method(:upload_file_to_gc) do |file_path, dest_path| GcloudStorage.service.upload_file(file_path, dest_path) end private_methods << :upload_file_to_gc end unless respond_to?(:delete_file_from_gc) define_method(:delete_file_from_gc) do |file_path| GcloudStorage.service.delete_file(file_path) end private_methods << :delete_file_from_gc end unless respond_to?(:expirable_gc_url) define_method(:expirable_gc_url) do |file_path, num_secs = 300| GcloudStorage.service.expirable_url(file_path, num_secs) if persisted? end private_methods << :expirable_gc_url end private_methods.each {|method| private method} end