Class: Heirloom::Reader

Inherits:
Object
  • Object
show all
Defined in:
lib/heirloom/archive/reader.rb

Instance Method Summary collapse

Constructor Details

#initialize(args) ⇒ Reader

Returns a new instance of Reader.



5
6
7
8
9
10
11
# File 'lib/heirloom/archive/reader.rb', line 5

def initialize(args)
  @config = args[:config]
  @name   = args[:name]
  @id     = args[:id]
  @domain = "heirloom_#{@name}"
  @logger = @config.logger
end

Instance Method Details

#countObject



55
56
57
# File 'lib/heirloom/archive/reader.rb', line 55

def count
  sdb.count @domain
end

#exists?Boolean

Returns:

  • (Boolean)


13
14
15
16
17
18
19
20
21
# File 'lib/heirloom/archive/reader.rb', line 13

def exists?
  if domain_exists? && show.any?
    @logger.debug "Found entry for #{@id} in SimpleDB."
    true
  else
    @logger.debug "Entry for #{@id} not found in SimpleDB."
    false
  end
end

#get_bucket(args) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/heirloom/archive/reader.rb', line 30

def get_bucket(args)
  @logger.debug "Looking for bucket in #{args[:region]} for #{@id}"
  url = get_url(args)
  if url
    bucket = url.gsub('s3://', '').split('/').first
    @logger.debug "Found bucket #{bucket}."
    bucket
  else
    @logger.debug "Bucket not found."
    nil
  end
end

#get_key(args) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'lib/heirloom/archive/reader.rb', line 43

def get_key(args)
  url = get_url(args)
  if url
    bucket_path = get_bucket :region => args[:region]
    bucket = url.gsub('s3://', '').gsub(bucket_path, '')
    bucket.slice!(0)
    bucket
  else
    nil
  end
end

#key_nameObject



91
92
93
# File 'lib/heirloom/archive/reader.rb', line 91

def key_name
  encrypted? ? "#{@id}.tar.gz.gpg" : "#{@id}.tar.gz"
end

#object_aclsObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/heirloom/archive/reader.rb', line 69

def object_acls
  data = {}
  regions.each do |region|
    object_name = "#{@name}/#{key_name}"

    bucket = get_bucket :region => region

    s3_acl = AWS::S3.new :config => @config,
                         :region => region

    object_acl = s3_acl.get_object_acl :bucket      => bucket,
                                       :object_name => object_name

    object_acl.delete "Owner"
    output = object_acl["AccessControlList"].map do |x|
      "#{x["Grantee"]["DisplayName"]}:#{x["Permission"]}".downcase
    end
    data.merge!"#{region}-permissions" => output.join(', ')
  end
  data
end

#regionsObject



23
24
25
26
27
28
# File 'lib/heirloom/archive/reader.rb', line 23

def regions
  data = show.keys.map do |key|
    key.gsub('-s3-url', '') if key =~ /-s3-url$/
  end
  data.compact
end

#showObject



59
60
61
62
63
64
65
66
67
# File 'lib/heirloom/archive/reader.rb', line 59

def show
  query = sdb.select "select * from `#{@domain}` where itemName() = '#{@id}'"
  items = query[@id] ? query[@id] : {}
  data = Hash.new.tap do |hash|
    items.each_pair.map do |key,value|
      hash[key] = value.first
    end
  end
end