Class: Cloudkeeper::Entities::ImageList

Inherits:
Object
  • Object
show all
Defined in:
lib/cloudkeeper/entities/image_list.rb

Constant Summary collapse

DATE_FORMAT =
'%Y-%m-%dT%H:%M:%SZ'.freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(identifier, expiration_date, creation_date = nil, source = '', title = '', description = '', appliances = {}) ⇒ ImageList

Returns a new instance of ImageList.



10
11
12
13
14
15
16
17
18
19
20
# File 'lib/cloudkeeper/entities/image_list.rb', line 10

def initialize(identifier, expiration_date, creation_date = nil, source = '', title = '', description = '', appliances = {})
  raise Cloudkeeper::Errors::ArgumentError, 'identifier cannot be nil nor empty' if identifier.blank? || expiration_date.blank?

  @identifier = identifier
  @expiration_date = expiration_date
  @creation_date = creation_date
  @description = description
  @title = title
  @source = source
  @appliances = appliances
end

Instance Attribute Details

#appliancesObject

Returns the value of attribute appliances.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def appliances
  @appliances
end

#creation_dateObject

Returns the value of attribute creation_date.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def creation_date
  @creation_date
end

#descriptionObject

Returns the value of attribute description.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def description
  @description
end

#expiration_dateObject

Returns the value of attribute expiration_date.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def expiration_date
  @expiration_date
end

#identifierObject

Returns the value of attribute identifier.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def identifier
  @identifier
end

#sourceObject

Returns the value of attribute source.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def source
  @source
end

#titleObject

Returns the value of attribute title.



6
7
8
# File 'lib/cloudkeeper/entities/image_list.rb', line 6

def title
  @title
end

Class Method Details

.from_hash(image_list_hash) ⇒ Object



33
34
35
36
37
38
39
40
41
# File 'lib/cloudkeeper/entities/image_list.rb', line 33

def from_hash(image_list_hash)
  image_list_hash.deep_symbolize_keys!
  image_list_hash = image_list_hash[:'hv:imagelist']

  image_list = populate_image_list image_list_hash
  populate_appliances!(image_list, image_list_hash)

  image_list
end

.parse_date(date) ⇒ Object



67
68
69
# File 'lib/cloudkeeper/entities/image_list.rb', line 67

def parse_date(date)
  date.blank? ? '' : DateTime.strptime(date, DATE_FORMAT)
end

.populate_appliances!(image_list, image_list_hash) ⇒ Object



71
72
73
74
75
76
77
78
79
80
# File 'lib/cloudkeeper/entities/image_list.rb', line 71

def populate_appliances!(image_list, image_list_hash)
  expiration = parse_date(image_list_hash[:'dc:date:expires'])
  vo = image_list_hash[:'ad:vo']
  endorser = image_list_hash[:'hv:endorser']

  image_list_hash[:'hv:images'].each do |image_hash|
    appliance = Appliance.from_hash(prepare_appliance_hash(image_hash, endorser, expiration, vo, image_list.identifier))
    image_list.add_appliance appliance
  end
end

.populate_image_list(image_list_hash) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/cloudkeeper/entities/image_list.rb', line 53

def populate_image_list(image_list_hash)
  raise Cloudkeeper::Errors::Parsing::InvalidImageListHashError, 'invalid image list hash' if image_list_hash.blank?

  ImageList.new image_list_hash[:'dc:identifier'],
                parse_date(image_list_hash[:'dc:date:expires']),
                parse_date(image_list_hash[:'dc:date:created']),
                image_list_hash[:'dc:source'],
                image_list_hash[:'dc:title'],
                image_list_hash[:'dc:description']
rescue Cloudkeeper::Errors::ArgumentError => ex
  raise Cloudkeeper::Errors::Parsing::InvalidImageListHashError, ex, "image list hash #{image_list_hash.inspect} " \
                                                                     "doesn't contain all the necessary data"
end

.prepare_appliance_hash(image_hash, endorser, expiration, vo, image_list_identifier) ⇒ Object



43
44
45
46
47
48
49
50
51
# File 'lib/cloudkeeper/entities/image_list.rb', line 43

def prepare_appliance_hash(image_hash, endorser, expiration, vo, image_list_identifier)
  appliance_hash = {}

  appliance_hash = image_hash[:'hv:image'] if image_hash && image_hash.key?(:'hv:image')
  appliance_hash.merge!(vo: vo, expiration: expiration, image_list_identifier: image_list_identifier)
  appliance_hash.merge!(endorser[:'hv:x509']) if endorser && endorser.key?(:'hv:x509')

  appliance_hash
end

Instance Method Details

#add_appliance(appliance) ⇒ Object



22
23
24
25
26
# File 'lib/cloudkeeper/entities/image_list.rb', line 22

def add_appliance(appliance)
  raise Cloudkeeper::Errors::ArgumentError, 'appliance cannot be nil' unless appliance

  appliances[appliance.identifier] = appliance
end

#expired?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/cloudkeeper/entities/image_list.rb', line 28

def expired?
  expiration_date < DateTime.now
end