lib/fog/aliyun/storage.rb in fog-aliyun-0.2.1 vs lib/fog/aliyun/storage.rb in fog-aliyun-0.2.2

- old
+ new

@@ -1,15 +1,25 @@ require 'xmlsimple' module Fog module Storage class Aliyun < Fog::Service + + DEFAULT_REGION = 'cn-hangzhou' + + DEFAULT_SCHEME = 'http' + DEFAULT_SCHEME_PORT = { + 'http' => 80, + 'https' => 443 + } + recognizes :aliyun_oss_endpoint, :aliyun_oss_location, - :aliyun_oss_bucket + :aliyun_region_id requires :aliyun_accesskey_id, - :aliyun_accesskey_secret + :aliyun_accesskey_secret, + :aliyun_oss_bucket model_path 'fog/aliyun/models/storage' model :directory collection :directories model :file @@ -35,13 +45,13 @@ class Real # Initialize connection to OSS # # ==== Notes - # options parameter must include values for :aliyun_oss_endpoint, :aliyun_accesskey_id, - # :aliyun_secret_access_key, :aliyun_oss_location and :aliyun_oss_bucket in order to create a connection. - # if you haven't set these values in the configuration file. + # options parameter must include values for :aliyun_accesskey_id, :aliyun_secret_access_key and :aliyun_oss_bucket in order to create a connection. + # :aliyun_oss_location will be replaced by :aliyun_region_id, and it has a default value cn-hangzhou + # if :aliyun_oss_endpoint is not specified, it will be generated by method region_to_endpoint # # ==== Examples # sdb = Fog::Storage.new(:provider=>'aliyun', # :aliyun_accesskey_id => your_:aliyun_accesskey_id, # :aliyun_secret_access_key => your_aliyun_secret_access_key @@ -53,44 +63,58 @@ # ==== Returns # * OSS object with connection to aliyun. attr_reader :aliyun_accesskey_id attr_reader :aliyun_accesskey_secret attr_reader :aliyun_oss_endpoint - attr_reader :aliyun_oss_location + attr_reader :aliyun_region_id attr_reader :aliyun_oss_bucket def initialize(options = {}) # initialize the parameters - @aliyun_oss_endpoint = options[:aliyun_oss_endpoint] - @aliyun_oss_location = options[:aliyun_oss_location] + @aliyun_region_id = options[:aliyun_region_id] || options[:aliyun_oss_location] || DEFAULT_REGION + @aliyun_oss_endpoint = options[:aliyun_oss_endpoint] || region_to_endpoint(@aliyun_region_id) @aliyun_accesskey_id = options[:aliyun_accesskey_id] @aliyun_accesskey_secret = options[:aliyun_accesskey_secret] @aliyun_oss_bucket = options[:aliyun_oss_bucket] # check for the parameters missing_credentials = [] - missing_credentials << :aliyun_oss_endpoint unless @aliyun_oss_endpoint - missing_credentials << :aliyun_oss_location unless @aliyun_oss_location + missing_credentials << :aliyun_oss_bucket unless @aliyun_oss_bucket missing_credentials << :aliyun_accesskey_id unless @aliyun_accesskey_id missing_credentials << :aliyun_accesskey_secret unless @aliyun_accesskey_secret raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty? @connection_options = options[:connection_options] || {} + endpoint = @aliyun_oss_endpoint + + if !endpoint.start_with?(DEFAULT_SCHEME) + @aliyun_oss_endpoint = "#{DEFAULT_SCHEME}://#{endpoint}" + end + uri = URI.parse(@aliyun_oss_endpoint) @host = uri.host @path = uri.path - @port = uri.port - @scheme = uri.scheme + @scheme = uri.scheme || DEFAULT_SCHEME + @port = uri.port || DEFAULT_SCHEME_PORT[@scheme] @persistent = options[:persistent] || false end def reload @connection.reset end + def region_to_endpoint(region=nil) + case region.to_s + when '' + "oss-#{DEFAULT_REGION}.aliyuncs.com" + else + "oss-#{region}.aliyuncs.com" + end + end + def request(params) method = params[:method] time = Time.new.utc date = time.strftime('%a, %d %b %Y %H:%M:%S GMT') @@ -179,17 +203,17 @@ end class Mock def initialize(options = {}) @aliyun_oss_endpoint = options[:aliyun_oss_endpoint] - @aliyun_oss_location = options[:aliyun_oss_location] + @aliyun_region_id = options[:aliyun_region_id] @aliyun_accesskey_id = options[:aliyun_accesskey_id] @aliyun_accesskey_secret = options[:aliyun_accesskey_secret] @aliyun_oss_bucket = options[:aliyun_oss_bucket] # missing_credentials = Array.new # missing_credentials << :aliyun_oss_endpoint unless @aliyun_oss_endpoint - # missing_credentials << :aliyun_oss_location unless @aliyun_oss_location + # missing_credentials << :aliyun_region_id unless @aliyun_region_id # missing_credentials << :aliyun_accesskey_id unless @aliyun_accesskey_id # missing_credentials << :aliyun_accesskey_secret unless @aliyun_accesskey_secret # raise ArgumentError, "Missing required arguments: #{missing_credentials.join(', ')}" unless missing_credentials.empty? @connection_options = options[:connection_options] || {}