File: streaming_distribution.rb

package info (click to toggle)
ruby-fog-aws 3.8.0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 8,092 kB
  • sloc: ruby: 72,795; javascript: 14; makefile: 9; sh: 4
file content (73 lines) | stat: -rw-r--r-- 2,517 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
require 'fog/aws/models/cdn/invalidations'
require 'fog/aws/models/cdn/distribution_helper'

module Fog
  module AWS
    class CDN
      class StreamingDistribution < Fog::Model
        include Fog::AWS::CDN::DistributionHelper

        identity :id,                 :aliases => 'Id'

        attribute :caller_reference,   :aliases => 'CallerReference'
        attribute :last_modified_time, :aliases => 'LastModifiedTime'
        attribute :status,             :aliases => 'Status'
        attribute :s3_origin,          :aliases => 'S3Origin'
        attribute :cname,              :aliases => 'CNAME'
        attribute :comment,            :aliases => 'Comment'
        attribute :enabled,            :aliases => 'Enabled'
        attribute :logging,            :aliases => 'Logging'
        attribute :domain,             :aliases => 'DomainName'
        attribute :etag,               :aliases => ['Etag', 'ETag']

        # items part of DistributionConfig
        CONFIG = [ :caller_reference, :cname, :comment, :enabled, :logging ]

        def initialize(new_attributes = {})
          super(distribution_config_to_attributes(new_attributes))
        end

        def save
          requires_one :s3_origin
          options = attributes_to_options
          response = identity ? put_distribution_config(identity, etag, options) : post_distribution(options)
          etag = response.headers['ETag']
          merge_attributes(response.body)
          true
        end

        private

        def delete_distribution(identity, etag)
          service.delete_streaming_distribution(identity, etag)
        end

        def put_distribution_config(identity, etag, options)
          service.put_streaming_distribution_config(identity, etag, options)
        end

        def post_distribution(options = {})
          service.post_streaming_distribution(options)
        end

        def attributes_to_options
          options = {
            'CallerReference' => caller_reference,
            'S3Origin' => s3_origin,
            'CNAME' => cname,
            'Comment' => comment,
            'Enabled' => enabled,
            'Logging' => logging,
          }
          options.reject! { |k,v| v.nil? }
          options.reject! { |k,v| v.respond_to?(:empty?) && v.empty? }
          options
        end

        def distribution_config_to_attributes(new_attributes = {})
          new_attributes.merge(new_attributes.delete('StreamingDistributionConfig') || {})
        end
      end
    end
  end
end