Sha256: b19988e69e975f73150e4ed92de7d683cd9d6e632d3bbba005b76057c6179b67
Contents?: true
Size: 1.41 KB
Versions: 1
Compression:
Stored size: 1.41 KB
Contents
require 'pathname' module Microstatic class Uploader include UsesFog def initialize( base_dir, bucket, aws_creds ) check_and_store_aws_creds(aws_creds) @bucket = bucket @base_dir = Pathname.new(base_dir) end def upsert_filepath( filepath ) pathname = Pathname.new(filepath) s3_key = relative_path_for(pathname) begin s3_object = connection.head_object(@bucket,s3_key) rescue Excon::Errors::NotFound s3_object = false end if s3_object update_object_if_changed(s3_key, pathname,s3_object) else create_object(s3_key, pathname) end end private def create_object(s3_key, pathname) log_action('CREATE', s3_key) put_file( s3_key, pathname ) end def update_object_if_changed(s3_key, pathname,s3_object) s3_md5 = s3_object.headers['ETag'].sub(/"(.*)"/,'\1') local_md5 = Digest::MD5.hexdigest( pathname.read ) if( s3_md5 == local_md5 ) log_action('NO CHANGE', s3_key) else log_action('UPDATE', s3_key) put_file( s3_key, pathname ) end end def relative_path_for(pathname) pathname.relative_path_from(@base_dir).to_s end def put_file( s3_key, file ) connection.put_object( @bucket, s3_key, file.open, 'x-amz-acl' => 'public-read', 'x-amz-storage-class' => 'REDUCED_REDUNDANCY' ) end def log_action(action,file) message = action.to_s.rjust(10) + " " + file puts message end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
microstatic-0.5.1 | lib/microstatic/uploader.rb |