lib/microstatic/s3_deployer.rb in microstatic-0.5.0 vs lib/microstatic/s3_deployer.rb in microstatic-0.5.1

- old
+ new

@@ -1,66 +1,31 @@ require 'digest/md5' require 'pathname' require 'rake/file_list' module Microstatic - -# The following is based on code generously -# shared by Giles Alexander (@gga) class S3Deployer - include UsesFog - attr_reader :file_list # TODO: don't expose this directly + def self.build( local_dir, bucket, aws_creds ) + uploader = Uploader.new( local_dir, bucket, aws_creds ) + new( local_dir, uploader ) + end - def initialize( local_dir, bucket, aws_creds ) - check_and_store_aws_creds(aws_creds) - + def initialize( local_dir, uploader ) @local_dir = Pathname.new(local_dir) @file_list = ::Rake::FileList.new( (@local_dir+"**/*").to_s ) - @bucket = bucket + @uploader = uploader end + def exclude_files(*args) + @file_list.exclude(*args) + end + def upload @file_list.each do |entry| entry = Pathname.new(entry) - upload_file(entry) unless entry.directory? + @uploader.upsert_filepath(entry) unless entry.directory? end end - def upload_file( file ) - s3_key = file.relative_path_from(@local_dir).to_s - - begin - s3_object = connection.head_object(@bucket,s3_key) - rescue Excon::Errors::NotFound - s3_object = false - end - - if !s3_object - log_action('CREATE', s3_key) - put_file( s3_key, file ) - else - s3_md5 = s3_object.headers['ETag'].sub(/"(.*)"/,'\1') - local_md5 = Digest::MD5.hexdigest( file.read ) - - if( s3_md5 == local_md5 ) - log_action('NO CHANGE', s3_key) - else - log_action('UPDATE', s3_key) - put_file( s3_key, file ) - end - end - end - - private - - 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