lib/gcloud/storage/bucket/cors.rb in gcloud-0.11.0 vs lib/gcloud/storage/bucket/cors.rb in gcloud-0.12.0
- old
+ new
@@ -20,12 +20,11 @@
class Bucket
##
# # Bucket Cors
#
# A special-case Array for managing the website CORS rules for a bucket.
- # Accessed via a block argument to {Project#create_bucket}, {Bucket#cors},
- # or {Bucket#update}.
+ # Accessed via {Bucket#cors}.
#
# @see https://cloud.google.com/storage/docs/cross-origin Cross-Origin
# Resource Sharing (CORS)
#
# @example
@@ -33,33 +32,34 @@
#
# gcloud = Gcloud.new
# storage = gcloud.storage
# bucket = storage.bucket "my-todo-app"
#
+ # bucket = storage.bucket "my-bucket"
# bucket.cors do |c|
# # Remove the last CORS rule from the array
# c.pop
# # Remove all existing rules with the https protocol
- # c.delete_if { |r| r["origin"].include? "http://example.com" }
+ # c.delete_if { |r| r.origin.include? "http://example.com" }
# c.add_rule ["http://example.org", "https://example.org"],
# ["GET", "POST", "DELETE"],
# response_headers: ["X-My-Custom-Header"],
# max_age: 3600
# end
#
class Cors < DelegateClass(::Array)
##
# @private
# Initialize a new CORS rules builder with existing CORS rules, if any.
- def initialize cors = []
- super cors.dup
- @original = cors.dup
+ def initialize rules = []
+ super rules
+ @original = to_gapi.map(&:to_json)
end
# @private
def changed?
- @original != self
+ @original != to_gapi.map(&:to_json)
end
##
# Add a CORS rule to the CORS rules for a bucket. Accepts options for
# setting preflight response headers. Preflight requests and responses
@@ -96,13 +96,57 @@
# response_headers: ["X-My-Custom-Header"],
# max_age: 300
# end
#
def add_rule origin, methods, headers: nil, max_age: nil
- rule = { "origin" => Array(origin), "method" => Array(methods) }
- rule["responseHeader"] = Array(headers) || []
- rule["maxAgeSeconds"] = max_age || 1800
- push rule
+ push Rule.new(origin, methods, headers: headers, max_age: max_age)
+ end
+
+ # @private
+ def to_gapi
+ map(&:to_gapi)
+ end
+
+ # @private
+ def self.from_gapi gapi_list
+ rules = Array(gapi_list).map { |gapi| Rule.from_gapi gapi }
+ new rules
+ end
+
+ # @private
+ def freeze
+ each(&:freeze)
+ super
+ end
+
+ class Rule
+ attr_accessor :origin, :methods, :headers, :max_age
+
+ def initialize origin, methods, headers: nil, max_age: nil
+ @origin = Array(origin)
+ @methods = Array(methods)
+ @headers = Array(headers)
+ @max_age = (max_age||1800)
+ end
+
+ def to_gapi
+ Google::Apis::StorageV1::Bucket::CorsConfiguration.new(
+ origin: Array(origin).dup, http_method: Array(methods).dup,
+ response_header: Array(headers).dup, max_age_seconds: max_age
+ )
+ end
+
+ def self.from_gapi gapi
+ new gapi.origin.dup, gapi.http_method.dup, \
+ headers: gapi.response_header.dup, max_age: gapi.max_age_seconds
+ end
+
+ def freeze
+ @origin.freeze
+ @methods.freeze
+ @headers.freeze
+ super
+ end
end
end
end
end
end