Skip to content

Instantly share code, notes, and snippets.

@ngw
Created June 16, 2011 21:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ngw/79abf5219627d4db814e to your computer and use it in GitHub Desktop.
Save ngw/79abf5219627d4db814e to your computer and use it in GitHub Desktop.
class Project
attr_reader :project_dir, :stylesheets_dir, :images_dir
def initialize subdomain, config, logger = nil
@subdomain = subdomain
@config = config
@logger = logger
@project_dir = @config[ 'tmpdir' ] + "/#{ @subdomain }"
@stylesheets_dir = @project_dir + '/css'
@images_dir = @project_dir + '/img'
end
def process!
create_sandbox
fetch
end
def upload!
upload_dir @project_dir
upload_file @config[ 'root'] + '/assets/mediator', 'mediator.html'
end
def upload_dir dir
Dir.new( dir ).each do |file|
if File.directory?( dir + "/" + file )
upload_dir( dir + "/" + file ) unless file == '.' || file == '..'
else
upload_file dir, file
end
end
end
def upload_file dir, file
f = dir + '/' + file
on_error = Proc.new { |http| puts "An error occured: #{http.response_header.status}" }
item = Happening::S3::Item.new(
@config[ 'portfolios_bucket' ], @subdomain + "/" + mime_dir( file ) + file,
:aws_access_key_id => @config[ 's3_access_key' ],
:aws_secret_access_key => @config[ 's3_secret_key' ],
:permissions => 'public-read' )
item.put( File.read( f ), :on_error => on_error, :on_success => cleanup( f ),
:headers => { "Content-Type" => File.mime_type?( f ) } ) do |response|
puts "UPLOADED: #{f}"
end
end
def cleanup file
unless file =~ /assets/
FileUtils.rm file
puts "RM #{ file }"
end
end
def fetch
on_error = Proc.new { |http| puts "An error occured: #{http.response_header.status}" }
item = Happening::S3::Item.new( @config[ 'projects_bucket' ], @subdomain + '/project.zip',
:aws_access_key_id => @config[ 's3_access_key' ], :aws_secret_access_key => @config[ 's3_secret_key' ] )
item.get( :on_error => on_error ) do |response|
open( @project_dir + '/project.zip', 'w' ) { |f| f.write( response.response ) }
unpack
end
end
def unpack
Zip::Archive.open( @project_dir + '/project.zip' ) do |archive|
archive.each do |elem|
if !elem.directory?
dispatch_file elem
end
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment