class Beanstalkify::Archive

Attributes

app_name[R]
version[R]

Public Class Methods

new(filename) click to toggle source
# File lib/beanstalkify/archive.rb, line 7
def initialize(filename)
  @filename = filename
  @archive_name = File.basename(@filename)
  @app_name, hyphen, @version = File.basename(filename, '.*').rpartition("-")
end

Public Instance Methods

upload(beanstalk_api, s3_client=AWS::S3.new.client) click to toggle source
# File lib/beanstalkify/archive.rb, line 13
def upload(beanstalk_api, s3_client=AWS::S3.new.client)
  if already_uploaded?(beanstalk_api)
    return puts "#{version} is already uploaded."
  end
  bucket = beanstalk_api.create_storage_location.data[:s3_bucket]
  upload_to_s3(s3_client, bucket)
  make_application_version_available_to_beanstalk(beanstalk_api, bucket)
end

Private Instance Methods

already_uploaded?(beanstalk_api) click to toggle source
# File lib/beanstalkify/archive.rb, line 46
def already_uploaded?(beanstalk_api)
  beanstalk_api.describe_application_versions(
    application_name: app_name,
    version_labels: [version]
  ).data[:application_versions].count > 0
end
make_application_version_available_to_beanstalk(beanstalk_api, bucket) click to toggle source
# File lib/beanstalkify/archive.rb, line 33
def make_application_version_available_to_beanstalk(beanstalk_api, bucket)
  puts "Making version #{version} of #{app_name} available to Beanstalk..."
  beanstalk_api.create_application_version(
    application_name: app_name, 
    version_label: version,
    source_bundle: {
      s3_bucket: bucket,
      s3_key: @archive_name
    },
    auto_create_application: true
  )
end
upload_to_s3(s3_client, bucket) click to toggle source
# File lib/beanstalkify/archive.rb, line 24
def upload_to_s3(s3_client, bucket)
  puts "Uploading #{@archive_name} to bucket #{bucket}..."
  s3_client.put_object(
    bucket_name: bucket, 
    key: @archive_name,
    data: File.open(@filename)
  )
end