Sha256: e94ef74ee9cce5318ab5f5838334235ebd65e914496ee2fcaf5d1b51f1caf507

Contents?: true

Size: 1.86 KB

Versions: 6

Compression:

Stored size: 1.86 KB

Contents

require 'stackster/entry/entry_lister'

module Stackster
  class Entry
    attr_accessor :name

    def initialize(args)
      @domain = 'stacks'
      @config = args[:config]
      @logger = @config.logger
      @custom_attributes = {}
      self.name = region_specific_name args[:name]
      create_domain
    end

    def self.find(args)
      entry = Entry.new :name   => args[:name],
                        :config => args[:config]
      entry
    end

    def attributes
      u = {}

      attrs = sdb_connect.select "select * from stacks where itemName() = '#{name}'"
      if attrs.has_key? name
        u.merge! Hash[attrs[name].map { |k,v| [k, v.first] }]
      end

      u.merge @custom_attributes
    end

    def set_attributes(a)
      a.each { |attribute| set_attribute(attribute) }
    end

    def save
      set_default_attributes
      current_attributes = attributes

      current_attributes.each_pair do |key,value|
        @logger.debug "Setting attribute #{key}=#{value}"
      end

      sdb_connect.put_attributes('stacks', 
                                  name, 
                                  current_attributes, 
                                 :replace => current_attributes.keys )

      @logger.debug "Save to SimpleDB successful."
    end

    def delete_attributes
      sdb_connect.delete('stacks', name)
      @logger.info "Delete from SimpleDB successful."
    end

    private

    def set_default_attributes
      @custom_attributes.merge! 'Name' => name
      @custom_attributes.merge! 'CreatedAt' => Time.now.utc.to_s
    end

    def region_specific_name(name)
      "#{name}-#{@config.region}"
    end

    def create_domain
      sdb_connect.create_domain @domain
    end

    def set_attribute(attribute)
      @custom_attributes.merge! attribute
    end

    def sdb_connect
      @sdb_connect ||= AWS::SimpleDB.new :config => @config
    end
  end

end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
stackster-0.4.4 lib/stackster/entry.rb
stackster-0.4.3 lib/stackster/entry.rb
stackster-0.4.2 lib/stackster/entry.rb
stackster-0.4.1 lib/stackster/entry.rb
stackster-0.4.0 lib/stackster/entry.rb
stackster-0.3.2 lib/stackster/entry.rb