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] || {}