module Middleman::S3Sync
Constants
- VERSION
Attributes
app[R]
mm_resources[RW]
s3_sync_options[RW]
Public Class Methods
add_local_resource(mm_resource)
click to toggle source
# File lib/middleman/s3_sync.rb, line 58 def add_local_resource(mm_resource) s3_sync_resources[mm_resource.destination_path] = S3Sync::Resource.new(mm_resource, remote_resource_for_path(mm_resource.destination_path)).tap(&:status) end
app=(app)
click to toggle source
# File lib/middleman/s3_sync.rb, line 66 def app=(app) @app = app end
bucket()
click to toggle source
# File lib/middleman/s3_sync.rb, line 48 def bucket @@bucket_lock.synchronize do @bucket ||= begin bucket = connection.directories.get(s3_sync_options.bucket, :prefix => s3_sync_options.prefix) raise "Bucket #{s3_sync_options.bucket} doesn't exist!" unless bucket bucket end end end
content_types()
click to toggle source
# File lib/middleman/s3_sync.rb, line 70 def content_types @content_types || {} end
remote_only_paths()
click to toggle source
# File lib/middleman/s3_sync.rb, line 62 def remote_only_paths paths - s3_sync_resources.keys end
sync()
click to toggle source
# File lib/middleman/s3_sync.rb, line 27 def sync() @app ||= ::Middleman::Application.new say_status "Let's see if there's work to be done..." unless work_to_be_done? say_status "All S3 files are up to date." return end say_status "Ready to apply updates to #{s3_sync_options.bucket}." update_bucket_versioning update_bucket_website ignore_resources create_resources update_resources delete_resources end
Protected Class Methods
bucket_files()
click to toggle source
# File lib/middleman/s3_sync.rb, line 134 def bucket_files @@bucket_files_lock.synchronize do @bucket_files ||= [].tap { |files| bucket.files.each { |f| files << f } } end end
build_dir()
click to toggle source
# File lib/middleman/s3_sync.rb, line 198 def build_dir @build_dir ||= s3_sync_options.build_dir end
connection()
click to toggle source
# File lib/middleman/s3_sync.rb, line 94 def connection connection_options = { :region => s3_sync_options.region, :path_style => s3_sync_options.path_style } if s3_sync_options.aws_access_key_id && s3_sync_options.aws_secret_access_key connection_options.merge!({ :aws_access_key_id => s3_sync_options.aws_access_key_id, :aws_secret_access_key => s3_sync_options.aws_secret_access_key }) else connection_options.merge!({ :use_iam_profile => true }) end @connection ||= Fog::Storage::AWS.new(connection_options) end
create_resources()
click to toggle source
# File lib/middleman/s3_sync.rb, line 144 def create_resources files_to_create.each do |r| r.create! end end
delete_resources()
click to toggle source
# File lib/middleman/s3_sync.rb, line 156 def delete_resources files_to_delete.each do |r| r.destroy! end end
files_to_create()
click to toggle source
# File lib/middleman/s3_sync.rb, line 186 def files_to_create s3_sync_resources.values.select { |r| r.to_create? } end
files_to_delete()
click to toggle source
# File lib/middleman/s3_sync.rb, line 178 def files_to_delete if s3_sync_options.delete s3_sync_resources.values.select { |r| r.to_delete? } else [] end end
files_to_ignore()
click to toggle source
# File lib/middleman/s3_sync.rb, line 194 def files_to_ignore s3_sync_resources.values.select { |r| r.to_ignore? } end
files_to_update()
click to toggle source
# File lib/middleman/s3_sync.rb, line 190 def files_to_update s3_sync_resources.values.select { |r| r.to_update? } end
ignore_resources()
click to toggle source
# File lib/middleman/s3_sync.rb, line 162 def ignore_resources files_to_ignore.each do |r| r.ignore! end end
paths()
click to toggle source
# File lib/middleman/s3_sync.rb, line 120 def paths @paths ||= begin (remote_paths.map { |rp| rp.gsub(/^#{s3_sync_options.prefix}/, '')} + s3_sync_resources.keys).uniq.sort end end
remote_paths()
click to toggle source
# File lib/middleman/s3_sync.rb, line 126 def remote_paths @remote_paths ||= if s3_sync_options.delete bucket_files.map(&:key) else [] end end
remote_resource_for_path(path)
click to toggle source
# File lib/middleman/s3_sync.rb, line 112 def remote_resource_for_path(path) bucket_files.find { |f| f.key == "#{s3_sync_options.prefix}#{path}" } end
s3_sync_resources()
click to toggle source
# File lib/middleman/s3_sync.rb, line 116 def s3_sync_resources @s3_sync_resources ||= {} end
update_bucket_versioning()
click to toggle source
# File lib/middleman/s3_sync.rb, line 75 def update_bucket_versioning connection.put_bucket_versioning(s3_sync_options.bucket, "Enabled") if s3_sync_options.version_bucket end
update_bucket_website()
click to toggle source
# File lib/middleman/s3_sync.rb, line 79 def update_bucket_website opts = {} opts[:IndexDocument] = s3_sync_options.index_document if s3_sync_options.index_document opts[:ErrorDocument] = s3_sync_options.error_document if s3_sync_options.error_document if opts[:ErrorDocument] && !opts[:IndexDocument] raise 'S3 requires `index_document` if `error_document` is specified' end unless opts.empty? say_status "Putting bucket website: #{opts.to_json}" connection.put_bucket_website(s3_sync_options.bucket, opts) end end
update_resources()
click to toggle source
# File lib/middleman/s3_sync.rb, line 150 def update_resources files_to_update.each do |r| r.update! end end
work_to_be_done?()
click to toggle source
# File lib/middleman/s3_sync.rb, line 168 def work_to_be_done? Parallel.each(mm_resources, in_threads: 8, progress: "Processing sitemap") { |mm_resource| add_local_resource(mm_resource) } Parallel.each(remote_only_paths, in_threads: 8, progress: "Processing remote files") do |remote_path| s3_sync_resources[remote_path] ||= S3Sync::Resource.new(nil, remote_resource_for_path(remote_path)).tap(&:status) end !(files_to_create.empty? && files_to_update.empty? && files_to_delete.empty?) end