Sha256: 965b9213a8bfbcf31d4863df4d65e935d239c6b918f48e60fb1258c10e0833e9

Contents?: true

Size: 1.35 KB

Versions: 3

Compression:

Stored size: 1.35 KB

Contents

require 's3'
require 'uri'

# Glitter servers currently work with Amazon S3 buckets. They contain multiple channels which
# contain multiple releases of software.
module Glitter
  class Server
    attr_reader :access_key_id, :secret_access_key, :bucket_name, :timeout

    DEFAULT_S3_TIMEOUT = 60

    def initialize(access_key_id = ENV['AWS_ACCESS_KEY_ID'], secret_access_key = ENV['AWS_SECRET_ACCESS_KEY'], bucket_name = ENV['AWS_BUCKET_NAME'], timeout: DEFAULT_S3_TIMEOUT)
      @access_key_id = access_key_id
      @secret_access_key = secret_access_key
      @bucket_name = bucket_name
      @timeout = timeout
    end

    def channel(name)
      channels[name]
    end

    def bucket
      @bucket ||= s3.buckets.find bucket_name
    end

    # Iterate through the objects in S3 and return a hash of channels containing their
    # respective released versions.
    def channel_versions
      bucket.objects.inject Hash.new { |h,k| h[k] = Set.new } do |hash, object|
        channel, version, _ = Release.object_segments(object.key)
        hash[channel].add(version) if channel and version
        hash
      end
    end

  private
    def channels
      Hash.new { |h,k| h[k] = Channel.new(k, self) }
    end

    def s3
      @s3 ||= ::S3::Service.new(access_key_id: access_key_id, secret_access_key: secret_access_key, timeout: timeout, use_ssl: true)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
glitter-2.3.0 lib/glitter/server.rb
glitter-2.2.1 lib/glitter/server.rb
glitter-2.2.0 lib/glitter/server.rb