# File lib/fog/aws/cdn.rb, line 35 def self.data @data ||= Hash.new do |hash, key| hash[key] = { :distributions => {}, :streaming_distributions => {}, :invalidations => {} } end end
# File lib/fog/aws/cdn.rb, line 71 def self.distribution_id random_id(14) end
# File lib/fog/aws/cdn.rb, line 79 def self.domain_name "#{random_id(12).downcase}.cloudfront.net" end
# File lib/fog/aws/cdn.rb, line 104 def self.error(code, argument = '') if error = CDN_ERRORS[code] raise_error(error[:status], error[:code], error[:msg] % argument) end end
# File lib/fog/aws/cdn.rb, line 75 def self.generic_id random_id(14) end
# File lib/fog/aws/cdn.rb, line 49 def initialize(options={}) require 'mime/types' @use_iam_profile = options[:use_iam_profile] setup_credentials(options) end
# File lib/fog/aws/cdn.rb, line 110 def self.raise_error(status, code, message='') response = Excon::Response.new response.status = status response.body = <ErrorResponse xmlns="http://cloudfront.amazonaws.com/doc/2010-11-01/"> <Error> <Type>Sender</Type> <Code>#{code}</Code> <Message>#{message}.</Message> </Error> <RequestId>#{Fog::AWS::Mock.request_id}</RequestId></ErrorResponse> raise(Excon::Errors.status_error({:expects => 201}, response)) end
# File lib/fog/aws/cdn.rb, line 55 def data self.class.data[@aws_access_key_id] end
# File lib/fog/aws/requests/cdn/delete_distribution.rb, line 27 def delete_distribution(distribution_id, etag) distribution = self.data[:distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::CDN::AWS::Mock.error(:invalid_if_match_version) end unless distribution['DistributionConfig']['CallerReference'] Fog::CDN::AWS::Mock.error(:illegal_update) end if distribution['DistributionConfig']['Enabled'] Fog::CDN::AWS::Mock.error(:distribution_not_disabled) end self.data[:distributions].delete(distribution_id) self.data[:invalidations].delete(distribution_id) response = Excon::Response.new response.status = 204 response.body = "x-amz-request-id: #{Fog::AWS::Mock.request_id}" response else Fog::CDN::AWS::Mock.error(:no_such_distribution) end end
# File lib/fog/aws/requests/cdn/delete_streaming_distribution.rb, line 27 def delete_streaming_distribution(distribution_id, etag) distribution = self.data[:streaming_distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::CDN::AWS::Mock.error(:invalid_if_match_version) end unless distribution['StreamingDistributionConfig']['CallerReference'] Fog::CDN::AWS::Mock.error(:illegal_update) end if distribution['StreamingDistributionConfig']['Enabled'] Fog::CDN::AWS::Mock.error(:distribution_not_disabled) end self.data[:streaming_distributions].delete(distribution_id) response = Excon::Response.new response.status = 204 response.body = "x-amz-request-id: #{Fog::AWS::Mock.request_id}" response else Fog::CDN::AWS::Mock.error(:no_such_streaming_distribution) end end
# File lib/fog/aws/requests/cdn/get_distribution.rb, line 55 def get_distribution(distribution_id) response = Excon::Response.new distribution = self.data[:distributions][distribution_id] unless distribution Fog::CDN::AWS::Mock.error(:no_such_distribution) end if distribution['Status'] == 'InProgress' && (Time.now - Time.parse(distribution['LastModifiedTime']) >= Fog::Mock.delay * 2) distribution['Status'] = 'Deployed' end etag = Fog::CDN::AWS::Mock.generic_id response.status = 200 response.body = { 'InProgressInvalidationBatches' => 0, }.merge(distribution.reject { |k,v| k == 'ETag' }) response.headers['ETag'] = etag distribution['ETag'] = etag response end
# File lib/fog/aws/requests/cdn/get_distribution_list.rb, line 56 def get_distribution_list(options = {}) response = Excon::Response.new response.status = 200 distributions = self.data[:distributions].values response.body = { 'Marker' => Fog::Mock.random_hex(16), 'IsTruncated' => false, 'MaxItems' => 100, 'DistributionSummary' => distributions.map { |d| to_distribution_summary(d) } } response end
# File lib/fog/aws/requests/cdn/get_invalidation.rb, line 37 def get_invalidation(distribution_id, invalidation_id) distribution = self.data[:distributions][distribution_id] unless distribution Fog::CDN::AWS::Mock.error(:no_such_distribution) end invalidation = self.data[:invalidations][distribution_id][invalidation_id] unless invalidation Fog::CDN::AWS::Mock.error(:no_such_invalidation) end if invalidation['Status'] == 'InProgress' && (Time.now - Time.parse(invalidation['CreateTime']) >= Fog::Mock.delay * 2) invalidation['Status'] = 'Completed' distribution['InProgressInvalidationBatches'] -= 1 end response = Excon::Response.new response.status = 200 response.body = invalidation response end
# File lib/fog/aws/requests/cdn/get_invalidation_list.rb, line 41 def get_invalidation_list(distribution_id, options = {}) distribution = self.data[:distributions][distribution_id] unless distribution Fog::CDN::AWS::Mock.error(:no_such_distribution) end invalidations = (self.data[:invalidations][distribution_id] || {}).values invalidations.each do |invalidation| if invalidation['Status'] == 'InProgress' && (Time.now - Time.parse(invalidation['CreateTime']) >= Fog::Mock.delay * 2) invalidation['Status'] = 'Completed' distribution['InProgressInvalidationBatches'] -= 1 end end response = Excon::Response.new response.status = 200 response.body = { 'Marker' => Fog::Mock.random_hex(16), 'IsTruncated' => false, 'MaxItems' => 100, 'InvalidationSummary' => invalidations.map { |i| to_invalidation_summary(i) } } response end
# File lib/fog/aws/requests/cdn/get_streaming_distribution.rb, line 48 def get_streaming_distribution(distribution_id) response = Excon::Response.new distribution = self.data[:streaming_distributions][distribution_id] unless distribution Fog::CDN::AWS::Mock.error(:no_such_streaming_distribution) end if distribution['Status'] == 'InProgress' && (Time.now - Time.parse(distribution['LastModifiedTime']) >= Fog::Mock.delay * 2) distribution['Status'] = 'Deployed' end etag = Fog::CDN::AWS::Mock.generic_id response.status = 200 response.body = distribution.reject { |k,v| k == 'ETag' } response.headers['ETag'] = etag distribution['ETag'] = etag response end
# File lib/fog/aws/requests/cdn/get_streaming_distribution_list.rb, line 56 def get_streaming_distribution_list(options = {}) response = Excon::Response.new response.status = 200 distributions = self.data[:streaming_distributions].values response.body = { 'Marker' => Fog::Mock.random_hex(16), 'IsTruncated' => false, 'MaxItems' => 100, 'StreamingDistributionSummary' => distributions.map { |d| to_streaming_distribution_summary(d) } } response end
# File lib/fog/aws/requests/cdn/post_distribution.rb, line 92 def post_distribution(options = {}) if self.data[:distributions].values.any? { |d| (d['CNAME'] & (options['CNAME']||[])).empty? } Fog::CDN::AWS::Mock.error(:invalid_argument, 'CNAME is already in use') end response = Excon::Response.new response.status = 201 options['CallerReference'] = Time.now.to_i.to_s dist_id = Fog::CDN::AWS::Mock.distribution_id distribution = { 'DomainName' => Fog::CDN::AWS::Mock.domain_name, 'Id' => dist_id, 'Status' => 'InProgress', 'LastModifiedTime' => Time.now.utc.iso8601, 'InProgressInvalidationBatches' => 0, 'DistributionConfig' => { 'CallerReference' => options['CallerReference'], 'CNAME' => options['CNAME'] || [], 'Comment' => options['Comment'], 'Enabled' => options['Enabled'], 'Logging' => { 'Bucket' => options['Bucket'], 'Prefix' => options['Prefix'] }, 'S3Origin' => options['S3Origin'], 'CustomOrigin' => options['CustomOrigin'], 'TrustedSigners' => options['TrustedSigners'] || [] } } self.data[:distributions][dist_id] = distribution response.body = distribution response end
# File lib/fog/aws/requests/cdn/post_invalidation.rb, line 48 def post_invalidation(distribution_id, paths, caller_reference = Time.now.to_i.to_s) distribution = self.data[:distributions][distribution_id] if distribution invalidation_id = Fog::CDN::AWS::Mock.distribution_id invalidation = { 'Id' => invalidation_id, 'Status' => 'InProgress', 'CreateTime' => Time.now.utc.iso8601, 'InvalidationBatch' => { 'CallerReference' => caller_reference, 'Path' => paths } } distribution['InProgressInvalidationBatches'] += 1 self.data[:invalidations][distribution_id] ||= {} self.data[:invalidations][distribution_id][invalidation_id] = invalidation response = Excon::Response.new response.status = 201 response.body = invalidation response else Fog::CDN::AWS::Mock.error(:no_such_distribution) end end
# File lib/fog/aws/requests/cdn/post_streaming_distribution.rb, line 80 def post_streaming_distribution(options = {}) if self.data[:streaming_distributions].values.any? { |d| (d['CNAME'] & (options['CNAME']||[])).empty? } Fog::CDN::AWS::Mock.error(:invalid_argument, 'CNAME is already in use') end response = Excon::Response.new response.status = 201 options['CallerReference'] = Time.now.to_i.to_s dist_id = Fog::CDN::AWS::Mock.distribution_id distribution = { 'DomainName' => Fog::CDN::AWS::Mock.domain_name, 'Id' => dist_id, 'Status' => 'InProgress', 'LastModifiedTime' => Time.now.utc.iso8601, 'StreamingDistributionConfig' => { 'CallerReference' => options['CallerReference'], 'CNAME' => options['CNAME'] || [], 'Comment' => options['Comment'], 'Enabled' => options['Enabled'], 'Logging' => { 'Bucket' => options['Bucket'], 'Prefix' => options['Prefix'] }, 'S3Origin' => options['S3Origin'], 'TrustedSigners' => options['TrustedSigners'] || [] } } self.data[:streaming_distributions][dist_id] = distribution response.body = distribution response end
# File lib/fog/aws/requests/cdn/put_distribution_config.rb, line 93 def put_distribution_config(distribution_id, etag, options = {}) distribution = self.data[:distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::CDN::AWS::Mock.error(:invalid_if_match_version) end unless distribution['DistributionConfig']['CallerReference'] Fog::CDN::AWS::Mock.error(:illegal_update) end distribution['DistributionConfig'].merge!(options) distribution['Status'] = 'InProgress' response = Excon::Response.new response.status = 200 response.headers['ETag'] = Fog::CDN::AWS::Mock.generic_id response.body = distribution.merge({ 'LastModifiedTime' => Time.now.utc.iso8601 }).reject{ |k,v| k == 'ETag' } response else Fog::CDN::AWS::Mock.error(:no_such_distribution) end end
# File lib/fog/aws/requests/cdn/put_streaming_distribution_config.rb, line 82 def put_streaming_distribution_config(distribution_id, etag, options = {}) distribution = self.data[:streaming_distributions][distribution_id] if distribution if distribution['ETag'] != etag Fog::CDN::AWS::Mock.error(:invalid_if_match_version) end unless distribution['StreamingDistributionConfig']['CallerReference'] Fog::CDN::AWS::Mock.error(:illegal_update) end distribution['StreamingDistributionConfig'].merge!(options) distribution['Status'] = 'InProgress' response = Excon::Response.new response.status = 200 response.headers['ETag'] = Fog::CDN::AWS::Mock.generic_id response.body = distribution.merge({ 'LastModifiedTime' => Time.now.utc.iso8601 }).reject{ |k,v| k == 'ETag' } response else Fog::CDN::AWS::Mock.error(:no_such_streaming_distribution) end end
# File lib/fog/aws/cdn.rb, line 59 def reset_data self.class.data.delete(@aws_access_key_id) end
Generated with the Darkfish Rdoc Generator 2.