diff -pruN 0.2.0-1/bin/console 0.3.2-2/bin/console
--- 0.2.0-1/bin/console	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/bin/console	2018-06-22 23:00:57.000000000 +0000
@@ -1,7 +1,8 @@
 #!/usr/bin/env ruby
+# frozen_string_literal: true
 
-require "bundler/setup"
-require "fog/aliyun"
+require 'bundler/setup'
+require 'fog/aliyun'
 
 # You can add fixtures and/or initialization code here to make experimenting
 # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "fog/aliyun"
 # require "pry"
 # Pry.start
 
-require "irb"
+require 'irb'
 IRB.start
diff -pruN 0.2.0-1/debian/changelog 0.3.2-2/debian/changelog
--- 0.2.0-1/debian/changelog	2018-03-13 06:04:17.000000000 +0000
+++ 0.3.2-2/debian/changelog	2019-02-07 14:30:58.000000000 +0000
@@ -1,3 +1,21 @@
+ruby-fog-aliyun (0.3.2-2) unstable; urgency=medium
+
+  * Team upload
+  * Reupload to unstable
+  * Add Breaks for gitlab
+
+ -- Utkarsh Gupta <guptautkarsh2102@gmail.com>  Thu, 07 Feb 2019 20:00:58 +0530
+
+ruby-fog-aliyun (0.3.2-1) experimental; urgency=medium
+
+  * Team upload
+  * New upstream version 0.3.2
+  * Bump Standards-Version to 4.3.0 (no changes needed)
+  * Use salsa.debian.org in Vcs-* fields
+  * Update d/copyright
+
+ -- Utkarsh Gupta <guptautkarsh2102@gmail.com>  Mon, 28 Jan 2019 02:48:59 +0530
+
 ruby-fog-aliyun (0.2.0-1) unstable; urgency=medium
 
   * Team upload.
diff -pruN 0.2.0-1/debian/control 0.3.2-2/debian/control
--- 0.2.0-1/debian/control	2018-03-13 06:04:17.000000000 +0000
+++ 0.3.2-2/debian/control	2019-02-07 14:30:58.000000000 +0000
@@ -10,9 +10,9 @@ Build-Depends: debhelper (>= 11~),
                ruby-ipaddress (>= 0.8),
                ruby-rspec-core,
                ruby-xml-simple (>= 1.1)
-Standards-Version: 4.1.3
-Vcs-Git: https://anonscm.debian.org/git/pkg-ruby-extras/ruby-fog-aliyun.git
-Vcs-Browser: https://anonscm.debian.org/cgit/pkg-ruby-extras/ruby-fog-aliyun.git
+Standards-Version: 4.3.0
+Vcs-Git: https://salsa.debian.org/ruby-team/ruby-fog-aliyun.git
+Vcs-Browser: https://salsa.debian.org/ruby-team/ruby-fog-aliyun
 Homepage: https://github.com/fog/fog-aliyun
 Testsuite: autopkgtest-pkg-ruby
 XS-Ruby-Versions: all
@@ -25,8 +25,8 @@ Depends: ruby | ruby-interpreter,
          ruby-fog-json (>= 1.0),
          ruby-ipaddress (>= 0.8),
          ruby-xml-simple (>= 1.1),
-         ${misc:Depends},
-         ${shlibs:Depends}
+         ${misc:Depends}
+Breaks: gitlab
 Description: Fog provider for Aliyun Web Services
  This library can be used as a module for 'fog' which support aliyun OSS/ECS.
  Fog is the Ruby cloud services library.
diff -pruN 0.2.0-1/debian/copyright 0.3.2-2/debian/copyright
--- 0.2.0-1/debian/copyright	2018-03-13 06:04:17.000000000 +0000
+++ 0.3.2-2/debian/copyright	2019-02-02 10:21:03.000000000 +0000
@@ -3,11 +3,11 @@ Upstream-Name: fog-aliyun
 Source: https://github.com/fog/fog-aliyun
 
 Files: *
-Copyright: 2015 dengqinsi
+Copyright: 2015, dengqinsi
 License: Expat
 
 Files: debian/*
-Copyright: 2016 Rahulkrishnan R A <rahulkrishnanfs@gmail.com>
+Copyright: 2016, Rahulkrishnan R A <rahulkrishnanfs@gmail.com>
 License: Expat
 Comment: the Debian packaging is licensed under the same terms as the original package.
 
diff -pruN 0.2.0-1/debian/ruby-fog-aliyun.lintian-overrides 0.3.2-2/debian/ruby-fog-aliyun.lintian-overrides
--- 0.2.0-1/debian/ruby-fog-aliyun.lintian-overrides	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/debian/ruby-fog-aliyun.lintian-overrides	2019-02-07 14:30:58.000000000 +0000
@@ -0,0 +1,2 @@
+# Since we don't have a fixed version yet, hence it hasn't been given any version.
+ruby-fog-aliyun: breaks-without-version gitlab
diff -pruN 0.2.0-1/fog-aliyun.gemspec 0.3.2-2/fog-aliyun.gemspec
--- 0.2.0-1/fog-aliyun.gemspec	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/fog-aliyun.gemspec	2018-06-22 23:00:57.000000000 +0000
@@ -1,33 +1,34 @@
-# coding: utf-8
+# frozen_string_literal: true
+
 lib = File.expand_path('../lib', __FILE__)
 $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
 require 'fog/aliyun/version'
 
 Gem::Specification.new do |spec|
-  spec.name          = 'fog-aliyun'
-  spec.version       = Fog::Aliyun::VERSION
-  spec.authors       = ['Qinsi Deng, Jianxun Li, Jane Han']
-  spec.email         = ['dengqs@dtdream.com']
-
-  spec.summary       = 'Fog provider for Aliyun Web Services.'
-  spec.description   = 'As a FOG provider, fog-aliyun support aliyun OSS/ECS. It will support more aliyun services later.'
-  spec.homepage      = 'https://github.com/fog/fog-aliyun'
-  spec.license       = 'MIT'
-
-  spec.files         = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
-  spec.bindir        = 'exe'
-  spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
+  spec.name = 'fog-aliyun'
+  spec.version = Fog::Aliyun::VERSION
+  spec.authors = ['Qinsi Deng, Jianxun Li, Jane Han']
+  spec.email = ['dengqinsi@sina.com']
+
+  spec.summary = 'Fog provider for Aliyun Web Services.'
+  spec.description = 'As a FOG provider, fog-aliyun support aliyun OSS/ECS. It will support more aliyun services later.'
+  spec.homepage = 'https://github.com/fog/fog-aliyun'
+  spec.license = 'MIT'
+
+  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
+  spec.bindir = 'exe'
+  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
   spec.require_paths = ['lib']
 
-  spec.add_development_dependency 'bundler', '~> 1.10'
-  spec.add_development_dependency 'rake', '~> 10.0'
-  spec.add_development_dependency 'rspec', '~> 3.3'
-  spec.add_development_dependency 'rubocop', '~> 0.40.0'
+  spec.add_development_dependency 'bundler'
   spec.add_development_dependency 'mime-types', '~> 2.6', '>= 2.6.2'
   spec.add_development_dependency 'pry-nav'
+  spec.add_development_dependency 'rake'
+  spec.add_development_dependency 'rspec'
+  spec.add_development_dependency 'rubocop'
 
-  spec.add_dependency 'fog-core',  '~> 1.27'
-  spec.add_dependency 'fog-json',  '~> 1.0'
+  spec.add_dependency 'fog-core'
+  spec.add_dependency 'fog-json'
   spec.add_dependency 'ipaddress', '~> 0.8'
   spec.add_dependency 'xml-simple', '~> 1.1'
 end
diff -pruN 0.2.0-1/Gemfile 0.3.2-2/Gemfile
--- 0.2.0-1/Gemfile	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/Gemfile	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 source 'https://rubygems.org'
 
 # Specify your gem's dependencies in fog-aliyun.gemspec
diff -pruN 0.2.0-1/.gitignore 0.3.2-2/.gitignore
--- 0.2.0-1/.gitignore	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/.gitignore	2018-06-22 23:00:57.000000000 +0000
@@ -1,10 +1,23 @@
-/.bundle/
-/.yardoc
-/Gemfile.lock
-/_yardoc/
-/coverage/
-/doc/
-/pkg/
-/spec/reports/
-/tmp/
-*~
+*.gem
+*.rbc
+.bundle
+.config
+.yardoc
+Gemfile.lock
+InstalledFiles
+_yardoc
+coverage
+doc/
+lib/bundler/man
+pkg
+rdoc
+spec/reports
+test/tmp
+test/version_tmp
+tmp
+*.bundle
+*.so
+*.o
+*.a
+mkmf.log
+gemfiles/*.lock
diff -pruN 0.2.0-1/lib/fog/aliyun/compute.rb 0.3.2-2/lib/fog/aliyun/compute.rb
--- 0.2.0-1/lib/fog/aliyun/compute.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/compute.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun < Fog::Service
@@ -10,30 +12,30 @@ module Fog
       ## MODELS
       #
       model_path 'fog/aliyun/models/compute'
-      model       :server
-      collection  :servers
-      model       :image
-      collection  :images
-      model       :eip_address
-      collection  :eip_addresses
-      model       :security_group
-      collection  :security_groups
-      model       :security_group_rule
-      collection  :security_group_rules
-      model       :volume
-      collection  :volumes
-      model       :snapshot
-      collection  :snapshots
-      model       :vpc
-      collection  :vpcs
-      model       :vswitch
-      collection  :vswitches
-      model       :vrouter
-      collection  :vrouters
-      model       :route_table
-      collection  :route_tables
-      model       :route_entry
-      collection  :route_entrys
+      model :server
+      collection :servers
+      model :image
+      collection :images
+      model :eip_address
+      collection :eip_addresses
+      model :security_group
+      collection :security_groups
+      model :security_group_rule
+      collection :security_group_rules
+      model :volume
+      collection :volumes
+      model :snapshot
+      collection :snapshots
+      model :vpc
+      collection :vpcs
+      model :vswitch
+      collection :vswitches
+      model :vrouter
+      collection :vrouters
+      model :route_table
+      collection :route_tables
+      model :route_entry
+      collection :route_entrys
 
       ## REQUESTS
       #
@@ -95,7 +97,13 @@ module Fog
       request :list_vswitchs
       request :modify_vpc
       request :modify_vswitch
-
+      request :list_vpn_gateways
+      request :list_vpn_customergateways
+      request :list_vpn_connections
+      request :create_vpn_customergateway
+      request :create_vpn_connection
+      request :delete_vpn_customergateway
+      request :delete_vpn_connection
       # VRouter
       request :list_vrouters
 
@@ -184,41 +192,43 @@ module Fog
         end
 
         def initialize(options = {})
-          @openstack_username = options[:openstack_username]
-          @openstack_user_domain = options[:openstack_user_domain] || options[:openstack_domain]
-          @openstack_project_domain = options[:openstack_project_domain] || options[:openstack_domain] || 'Default'
-          @openstack_auth_uri = URI.parse(options[:openstack_auth_url])
+          @aliyun_username = options[:aliyun_username]
+          @aliyun_user_domain = options[:aliyun_user_domain] || options[:aliyun_domain]
+          @aliyun_project_domain = options[:aliyun_project_domain] || options[:aliyun_domain] || 'Default'
+
+          raise ArgumentError, 'Missing required arguments: :aliyun_auth_url' unless options.key?[:aliyun_auth_url]
+          @aliyun_auth_uri = URI.parse(options[:aliyun_auth_url])
 
-          @current_tenant = options[:openstack_tenant]
-          @current_tenant_id = options[:openstack_tenant_id]
+          @current_tenant = options[:aliyun_tenant]
+          @current_tenant_id = options[:aliyun_tenant_id]
 
           @auth_token = Fog::Mock.random_base64(64)
           @auth_token_expiration = (Time.now.utc + 86_400).iso8601
 
-          management_url = URI.parse(options[:openstack_auth_url])
+          management_url = URI.parse(@aliyun_auth_url)
           management_url.port = 8774
           management_url.path = '/v1.1/1'
-          @openstack_management_url = management_url.to_s
+          @aliyun_management_url = management_url.to_s
 
-          identity_public_endpoint = URI.parse(options[:openstack_auth_url])
+          identity_public_endpoint = URI.parse(@aliyun_auth_url)
           identity_public_endpoint.port = 5000
-          @openstack_identity_public_endpoint = identity_public_endpoint.to_s
+          @aliyun_identity_public_endpoint = identity_public_endpoint.to_s
         end
 
         def data
-          self.class.data["#{@openstack_username}-#{@current_tenant}"]
+          self.class.data["#{@aliyun_username}-#{@current_tenant}"]
         end
 
         def reset_data
-          self.class.data.delete("#{@openstack_username}-#{@current_tenant}")
+          self.class.data.delete("#{@aliyun_username}-#{@current_tenant}")
         end
 
         def credentials
-          { provider: 'openstack',
-            openstack_auth_url: @openstack_auth_uri.to_s,
-            openstack_auth_token: @auth_token,
-            openstack_management_url: @openstack_management_url,
-            openstack_identity_endpoint: @openstack_identity_public_endpoint }
+          { provider: 'aliyun',
+            aliyun_auth_url: @aliyun_auth_uri.to_s,
+            aliyun_auth_token: @auth_token,
+            aliyun_management_url: @aliyun_management_url,
+            aliyun_identity_endpoint: @aliyun_identity_public_endpoint }
         end
       end
 
@@ -249,11 +259,11 @@ module Fog
 
         def initialize(options = {})
           # initialize the parameters
-          @aliyun_url              = options[:aliyun_url]
-          @aliyun_accesskey_id     = options[:aliyun_accesskey_id]
+          @aliyun_url = options[:aliyun_url]
+          @aliyun_accesskey_id = options[:aliyun_accesskey_id]
           @aliyun_accesskey_secret = options[:aliyun_accesskey_secret]
-          @aliyun_region_id        = options[:aliyun_region_id]
-          @aliyun_zone_id          = options[:aliyun_zone_id]
+          @aliyun_region_id = options[:aliyun_region_id]
+          @aliyun_zone_id = options[:aliyun_zone_id]
 
           # check for the parameters
           missing_credentials = []
@@ -267,17 +277,25 @@ module Fog
           @connection_options = options[:connection_options] || {}
 
           uri = URI.parse(@aliyun_url)
-          @host   = uri.host
-          @path   = uri.path
-          @port   = uri.port
+          @host = uri.host
+          @path = uri.path
+          @port = uri.port
           @scheme = uri.scheme
 
+          vpcuri = URI.parse('https://vpc.aliyuncs.com')
+          @vpchost = vpcuri.host
+          @vpcpath = vpcuri.path
+          @vpcport = vpcuri.port
+          @vpcscheme = vpcuri.scheme
+
           @persistent = options[:persistent] || false
           @connection = Fog::Core::Connection.new("#{@scheme}://#{@host}:#{@port}", @persistent, @connection_options)
+          @VPCconnection = Fog::Core::Connection.new("#{@vpcscheme}://#{@vpchost}:#{@vpcport}", @persistent, @connection_options)
         end
 
         def reload
           @connection.reset
+          @VPCconnection.reset
         end
 
         def request(params)
@@ -295,13 +313,34 @@ module Fog
                     Fog::Compute::Aliyun::NotFound.slurp(error)
                   else
                     error
-              end
+                  end
           end
 
-          if !response.body.empty? && response.get_header('Content-Type') == 'application/json'
-            response.body = Fog::JSON.decode(response.body)
+          response.body = Fog::JSON.decode(response.body) if !response.body.empty? && response.get_header('Content-Type') == 'application/json'
+
+          response
+        end
+
+        def VPCrequest(params)
+          begin
+            response = @VPCconnection.request(params.merge(headers: {
+              'Content-Type' => 'application/json',
+              'Accept' => 'application/json',
+              'X-Auth-Token' => @auth_token
+            }.merge!(params[:headers] || {}),
+                                                           path: "#{@path}/#{params[:path]}",
+                                                           query: params[:query]))
+          rescue Excon::Errors::HTTPStatusError => error
+            raise case error
+                  when Excon::Errors::NotFound
+                    Fog::Compute::Aliyun::NotFound.slurp(error)
+                  else
+                    error
+                  end
           end
 
+          response.body = Fog::JSON.decode(response.body) if !response.body.empty? && response.get_header('Content-Type') == 'application/json'
+
           response
         end
 
@@ -312,6 +351,12 @@ module Fog
           '?Format=JSON&AccessKeyId=' + @aliyun_accesskey_id + '&Action=' + action + '&SignatureMethod=HMAC-SHA1&RegionId=' + @aliyun_region_id + '&SignatureNonce=' + sigNonce + '&SignatureVersion=1.0&Version=2014-05-26&Timestamp=' + urlTimeFormat
         end
 
+        def defaultAliyunVPCUri(action, sigNonce, time)
+          parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ')
+          urlTimeFormat = URI.encode(parTimeFormat, ':')
+          '?Format=JSON&AccessKeyId=' + @aliyun_accesskey_id + '&Action=' + action + '&SignatureMethod=HMAC-SHA1&RegionId=' + @aliyun_region_id + '&SignatureNonce=' + sigNonce + '&SignatureVersion=1.0&Version=2016-04-28&Timestamp=' + urlTimeFormat
+        end
+
         # generate random num
         def randonStr
           numStr = rand(100_000).to_s
@@ -337,6 +382,22 @@ module Fog
           para
         end
 
+        def defalutVPCParameters(action, sigNonce, time)
+          parTimeFormat = time.strftime('%Y-%m-%dT%H:%M:%SZ')
+          para = {
+            'Format' => 'JSON',
+            'Version' => '2016-04-28',
+            'Action' => action,
+            'AccessKeyId' => @aliyun_accesskey_id,
+            'SignatureVersion' => '1.0',
+            'SignatureMethod' => 'HMAC-SHA1',
+            'SignatureNonce' => sigNonce,
+            'RegionId' => @aliyun_region_id,
+            'Timestamp' => parTimeFormat
+          }
+          para
+        end
+
         # compute signature
         def sign(accessKeySecret, parameters)
           sortedParameters = parameters.sort
@@ -349,8 +410,8 @@ module Fog
           stringToSign = 'GET&%2F&' + URI.encode(canonicalizedQueryString, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
           key = accessKeySecret + '&'
 
-          digVer =  OpenSSL::Digest.new('sha1')
-          digest =  OpenSSL::HMAC.digest(digVer, key, stringToSign)
+          digVer = OpenSSL::Digest.new('sha1')
+          digest = OpenSSL::HMAC.digest(digVer, key, stringToSign)
           signature = Base64.encode64(digest)
           signature[-1] = ''
           encodedSig = URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/eip_addresses.rb 0.3.2-2/lib/fog/aliyun/models/compute/eip_addresses.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/eip_addresses.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/eip_addresses.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/eip_address'
 
@@ -18,9 +20,7 @@ module Fog
         end
 
         def get(allocation_id)
-          if allocation_id
-            self.class.new(service: service).all(allocation_id: allocation_id)[0]
-          end
+          self.class.new(service: service).all(allocation_id: allocation_id)[0] if allocation_id
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/eip_address.rb 0.3.2-2/lib/fog/aliyun/models/compute/eip_address.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/eip_address.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/eip_address.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,18 +1,20 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
     class Aliyun
       class EipAddress < Fog::Model
-        identity :id,             aliases: 'AllocationId'
+        identity :id, aliases: 'AllocationId'
 
-        attribute :allocated_at,  aliases: 'AllocationTime'
-        attribute :bandwidth,     aliases: 'Bandwidth'
-        attribute :server_id,     aliases: 'InstanceId'
-        attribute :charge_type,   aliases: 'InternetChargeType'
-        attribute :ip_address,    aliases: %w(IpAddress EipAddress)
+        attribute :allocated_at, aliases: 'AllocationTime'
+        attribute :bandwidth, aliases: 'Bandwidth'
+        attribute :server_id, aliases: 'InstanceId'
+        attribute :charge_type, aliases: 'InternetChargeType'
+        attribute :ip_address, aliases: %w[IpAddress EipAddress]
         attribute :opertion_locks, aliases: 'OperationLocks'
-        attribute :region_id,     aliases: 'RegionId'
-        attribute :state,         aliases: 'Status'
+        attribute :region_id, aliases: 'RegionId'
+        attribute :state, aliases: 'Status'
 
         def destroy
           requires :id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/image.rb 0.3.2-2/lib/fog/aliyun/models/compute/image.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/image.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/image.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,30 +1,32 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
     class Aliyun
       class Image < Fog::Model
-        identity :id,                     aliases: 'ImageId'
+        identity :id, aliases: 'ImageId'
 
-        attribute :description,           aliases: 'Description'
-        attribute :product_code,          aliases: 'ProductCode'
-        attribute :os_type,               aliases: 'OSType'
-        attribute :architecture,          aliases: 'Architecture'
-        attribute :os_name,               aliases: 'OSName'
-        attribute :disk_device_mappings,  aliases: 'DiskDeviceMappings'
-        attribute :owner_alias,           aliases: 'ImageOwnerAlias'
-        attribute :progress,              aliases: 'Progress'
-        attribute :usage,                 aliases: 'Usage'
-        attribute :created_at,            aliases: 'CreationTime'
-        attribute :tags,                  aliases: 'Tags'
-        attribute :version,               aliases: 'ImageVersion'
-        attribute :state,                 aliases: 'Status'
-        attribute :name,                  aliases: 'ImageName'
-        attribute :is_self_shared,        aliases: 'IsSelfShared'
-        attribute :is_copied,             aliases: 'IsCopied'
-        attribute :is_subscribed,         aliases: 'IsSubscribed'
-        attribute :platform,              aliases: 'Platform'
-        attribute :size,                  aliases: 'Size'
-        attribute :snapshot_id,           aliases: 'SnapshotId'
+        attribute :description, aliases: 'Description'
+        attribute :product_code, aliases: 'ProductCode'
+        attribute :os_type, aliases: 'OSType'
+        attribute :architecture, aliases: 'Architecture'
+        attribute :os_name, aliases: 'OSName'
+        attribute :disk_device_mappings, aliases: 'DiskDeviceMappings'
+        attribute :owner_alias, aliases: 'ImageOwnerAlias'
+        attribute :progress, aliases: 'Progress'
+        attribute :usage, aliases: 'Usage'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :tags, aliases: 'Tags'
+        attribute :version, aliases: 'ImageVersion'
+        attribute :state, aliases: 'Status'
+        attribute :name, aliases: 'ImageName'
+        attribute :is_self_shared, aliases: 'IsSelfShared'
+        attribute :is_copied, aliases: 'IsCopied'
+        attribute :is_subscribed, aliases: 'IsSubscribed'
+        attribute :platform, aliases: 'Platform'
+        attribute :size, aliases: 'Size'
+        attribute :snapshot_id, aliases: 'SnapshotId'
 
         def initialize(attributes)
           self.snapshot_id = attributes['DiskDeviceMappings']['DiskDeviceMapping'][0]['SnapshotId']
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/images.rb 0.3.2-2/lib/fog/aliyun/models/compute/images.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/images.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/images.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/image'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/route_entry.rb 0.3.2-2/lib/fog/aliyun/models/compute/route_entry.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/route_entry.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/route_entry.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
@@ -11,11 +13,11 @@ module Fog
         #    {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"100.64.0.0/10"},
         #    {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"10.0.0.0/8"}]},
         #  "RouteTableId"=>"vtb-2504onoxh", "RouteTableType"=>"System", "VRouterId"=>"vrt-25azmd2wm"}]}
-        identity :cidr_block,         aliases: 'DestinationCidrBlock'
-        attribute :state,             aliases: 'Status'
-        attribute :server_id,         aliases: 'InstanceId'
-        attribute :type,              aliases: 'Type'
-        attribute :route_table_id,    aliases: 'RouteTableId'
+        identity :cidr_block, aliases: 'DestinationCidrBlock'
+        attribute :state, aliases: 'Status'
+        attribute :server_id, aliases: 'InstanceId'
+        attribute :type, aliases: 'Type'
+        attribute :route_table_id, aliases: 'RouteTableId'
 
         # def save
         #   requires :cidr_block,:route_table_id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/route_entrys.rb 0.3.2-2/lib/fog/aliyun/models/compute/route_entrys.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/route_entrys.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/route_entrys.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/route_entry'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/route_table.rb 0.3.2-2/lib/fog/aliyun/models/compute/route_table.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/route_table.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/route_table.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
@@ -11,10 +13,10 @@ module Fog
         #   {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"100.64.0.0/10"},
         #   {"Status"=>"Available", "Type"=>"System", "InstanceId"=>"", "RouteTableId"=>"vtb-2504onoxh", "DestinationCidrBlock"=>"10.0.0.0/8"}]},
         #  "RouteTableId"=>"vtb-2504onoxh", "RouteTableType"=>"System", "VRouterId"=>"vrt-25azmd2wm"}]}
-        identity :id,             aliases: 'RouteTableId'
-        attribute :created_at,    aliases: 'CreationTime'
-        attribute :type,          aliases: 'RouteTableType'
-        attribute :v_router_id,   aliases: 'VRouterId'
+        identity :id, aliases: 'RouteTableId'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :type, aliases: 'RouteTableType'
+        attribute :v_router_id, aliases: 'VRouterId'
         # collection Fog::Compute::Aliyun::RouteEntrys
         def route_entrys
           @route_entrys ||= begin
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/route_tables.rb 0.3.2-2/lib/fog/aliyun/models/compute/route_tables.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/route_tables.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/route_tables.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/route_table'
 
@@ -17,9 +19,7 @@ module Fog
 
         def get(routeTableId)
           requires :v_router
-          if routeTableId
-            self.class.new(service: service, v_router: v_router).all(routeTableId: routeTableId)[0]
-          end
+          self.class.new(service: service, v_router: v_router).all(routeTableId: routeTableId)[0] if routeTableId
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/security_group.rb 0.3.2-2/lib/fog/aliyun/models/compute/security_group.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/security_group.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/security_group.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,14 +1,16 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 
 module Fog
   module Compute
     class Aliyun
       class SecurityGroup < Fog::Model
-        identity  :id,           aliases: 'SecurityGroupId'
-        attribute :name,         aliases: 'SecurityGroupName'
-        attribute :description,  aliases: 'Description'
-        attribute :created_at,   aliases: 'CreationTime'
-        attribute :vpc_id,       aliases: 'VpcId'
+        identity :id, aliases: 'SecurityGroupId'
+        attribute :name, aliases: 'SecurityGroupName'
+        attribute :description, aliases: 'Description'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :vpc_id, aliases: 'VpcId'
 
         def vpc
           requires :vpc_id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/security_group_rule.rb 0.3.2-2/lib/fog/aliyun/models/compute/security_group_rule.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/security_group_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/security_group_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,22 +1,24 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 
 module Fog
   module Compute
     class Aliyun
       class SecurityGroupRule < Fog::Model
-        attribute :security_group_id,         aliases: 'SecurityGroupId'
-        attribute :source_cidr_ip,            aliases: 'SourceCidrIp'
-        attribute :source_owner,              aliases: 'SourceGroupOwnerAccount'
-        attribute :source_group_id,           aliases: 'SourceGroupId'
-        attribute :ip_protocol,               aliases: 'IpProtocol'
-        attribute :dest_cidr_ip,              aliases: 'DestCidrIp'
-        attribute :dest_owner,                aliases: 'DestGroupOwnerAccount'
-        attribute :dest_group_id,             aliases: 'DestGroupId'
-        attribute :nic_type,                  aliases: 'NicType'
-        attribute :policy,                    aliases: 'Policy'
-        attribute :port_range,                aliases: 'PortRange'
-        attribute :direction,                 aliases: 'Direction'
-        attribute :priority,                  aliases: 'Priority'
+        attribute :security_group_id, aliases: 'SecurityGroupId'
+        attribute :source_cidr_ip, aliases: 'SourceCidrIp'
+        attribute :source_owner, aliases: 'SourceGroupOwnerAccount'
+        attribute :source_group_id, aliases: 'SourceGroupId'
+        attribute :ip_protocol, aliases: 'IpProtocol'
+        attribute :dest_cidr_ip, aliases: 'DestCidrIp'
+        attribute :dest_owner, aliases: 'DestGroupOwnerAccount'
+        attribute :dest_group_id, aliases: 'DestGroupId'
+        attribute :nic_type, aliases: 'NicType'
+        attribute :policy, aliases: 'Policy'
+        attribute :port_range, aliases: 'PortRange'
+        attribute :direction, aliases: 'Direction'
+        attribute :priority, aliases: 'Priority'
 
         def save
           requires :security_group_id, :ip_protocol, :port_range, :direction
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/security_group_rules.rb 0.3.2-2/lib/fog/aliyun/models/compute/security_group_rules.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/security_group_rules.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/security_group_rules.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/security_group_rule'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/security_groups.rb 0.3.2-2/lib/fog/aliyun/models/compute/security_groups.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/security_groups.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/security_groups.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/security_group'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/server.rb 0.3.2-2/lib/fog/aliyun/models/compute/server.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/server.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/server.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,37 +1,39 @@
+# frozen_string_literal: true
+
 require 'fog/compute/models/server'
 
 module Fog
   module Compute
     class Aliyun
       class Server < Fog::Compute::Server
-        identity :id,                 aliases: 'InstanceId'
-        attribute :image_id,          aliases: 'ImageId'
-        attribute :inner_ip,          aliases: 'InnerIpAddress'
-        attribute :vlan_id,           aliases: 'VlanId'
-        attribute :eip,               aliases: 'EipAddress'
-        attribute :max_bandwidth_in,  aliases: 'InternetMaxBandwidthIn'
-        attribute :zone_id,           aliases: 'ZoneId'
-        attribute :internet_charge_type,       aliases: 'InternetChargeType'
-        attribute :serial_number,     aliases: 'SerialNumber'
-        attribute :io_optimized,      aliases: 'IoOptimized'
+        identity :id, aliases: 'InstanceId'
+        attribute :image_id, aliases: 'ImageId'
+        attribute :inner_ip, aliases: 'InnerIpAddress'
+        attribute :vlan_id, aliases: 'VlanId'
+        attribute :eip, aliases: 'EipAddress'
+        attribute :max_bandwidth_in, aliases: 'InternetMaxBandwidthIn'
+        attribute :zone_id, aliases: 'ZoneId'
+        attribute :internet_charge_type, aliases: 'InternetChargeType'
+        attribute :serial_number, aliases: 'SerialNumber'
+        attribute :io_optimized, aliases: 'IoOptimized'
         attribute :max_bandwidth_out, aliases: 'InternetMaxBandwidthOut'
-        attribute :vpc_attributes,    aliases: 'VpcAttributes'
-        attribute :device_available,  aliases: 'DeviceAvailable'
-        attribute :private_ip,        aliases: 'PrivateIpAddress'
+        attribute :vpc_attributes, aliases: 'VpcAttributes'
+        attribute :device_available, aliases: 'DeviceAvailable'
+        attribute :private_ip, aliases: 'PrivateIpAddress'
         attribute :security_group_ids, aliases: 'SecurityGroupIds'
-        attribute :name,              aliases: 'InstanceName'
-        attribute :description,       aliases: 'Description'
-        attribute :network_type,      aliases: 'InstanceNetworkType'
-        attribute :public_ip,         aliases: 'PublicIpAddress'
-        attribute :host_name,         aliases: 'HostName'
-        attribute :type,              aliases: 'InstanceType'
-        attribute :created_at,        aliases: 'CreationTime'
-        attribute :state,             aliases: 'Status'
-        attribute :cluster_id,        aliases: 'ClusterId'
-        attribute :region_id,         aliases: 'RegionId'
-        attribute :charge_type,       aliases: 'InstanceChargeType'
-        attribute :operation_locks,   aliases: 'OperationLocks'
-        attribute :expired_at,        aliases: 'ExpiredTime'
+        attribute :name, aliases: 'InstanceName'
+        attribute :description, aliases: 'Description'
+        attribute :network_type, aliases: 'InstanceNetworkType'
+        attribute :public_ip, aliases: 'PublicIpAddress'
+        attribute :host_name, aliases: 'HostName'
+        attribute :type, aliases: 'InstanceType'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :state, aliases: 'Status'
+        attribute :cluster_id, aliases: 'ClusterId'
+        attribute :region_id, aliases: 'RegionId'
+        attribute :charge_type, aliases: 'InstanceChargeType'
+        attribute :operation_locks, aliases: 'OperationLocks'
+        attribute :expired_at, aliases: 'ExpiredTime'
 
         def image
           requires image_id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/servers.rb 0.3.2-2/lib/fog/aliyun/models/compute/servers.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/servers.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/servers.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/server'
 
@@ -32,9 +34,7 @@ module Fog
         #        end
 
         def get(server_id)
-          if server_id
-            self.class.new(service: service).all(instanceId: server_id)[0]
-          end
+          self.class.new(service: service).all(instanceId: server_id)[0] if server_id
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/snapshot.rb 0.3.2-2/lib/fog/aliyun/models/compute/snapshot.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/snapshot.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/snapshot.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,20 +1,22 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
     class Aliyun
       class Snapshot < Fog::Model
-        identity  :id,          aliases: 'SnapshotId'
-        attribute :name,        aliases: 'SnapshotName'
+        identity :id, aliases: 'SnapshotId'
+        attribute :name, aliases: 'SnapshotName'
         attribute :description, aliases: 'Description'
-        attribute :progress,    aliases: 'Progress'
-        attribute :volume_id,     aliases: 'SourceDiskId'
-        attribute :volume_size,   aliases: 'SourceDiskSize'
-        attribute :volume_type,   aliases: 'SourceDiskType'
+        attribute :progress, aliases: 'Progress'
+        attribute :volume_id, aliases: 'SourceDiskId'
+        attribute :volume_size, aliases: 'SourceDiskSize'
+        attribute :volume_type, aliases: 'SourceDiskType'
         attribute :product_code, aliases: 'ProductCode'
-        attribute :created_at,  aliases: 'CreationTime'
-        attribute :state,       aliases: 'Status'
-        attribute :usage,       aliases: 'Usage'
-        attribute :tags,        aliases: 'Tags'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :state, aliases: 'Status'
+        attribute :usage, aliases: 'Usage'
+        attribute :tags, aliases: 'Tags'
 
         def destroy
           requires :id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/snapshots.rb 0.3.2-2/lib/fog/aliyun/models/compute/snapshots.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/snapshots.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/snapshots.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/snapshot'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/volume.rb 0.3.2-2/lib/fog/aliyun/models/compute/volume.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/volume.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/volume.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
@@ -16,31 +18,31 @@ module Fog
         # "Status": "Available",
         # "Type": "data",
 
-        identity  :id,                    aliases: 'DiskId'
-        attribute :region_id,             aliases: 'RegionId'
-        attribute :zone_id,               aliases: 'ZoneId'
-        attribute :name,                  aliases: 'DiskName'
-        attribute :description,           aliases: 'Description'
-        attribute :type,                  aliases: 'Type'
-        attribute :category,              aliases: 'Category'
-        attribute :size,                  aliases: 'Size'
-        attribute :image_id,              aliases: 'ImageId'
-        attribute :snapshot_id,           aliases: 'SourceSnapshotId'
-        attribute :product_code,          aliases: 'ProductCode'
-        attribute :portable,              aliases: 'Portable'
-        attribute :state,                 aliases: 'Status'
-        attribute :operation_locks,       aliases: 'OperationLocks'
-        attribute :server_id,             aliases: 'InstanceId'
-        attribute :device,                aliases: 'Device'
-        attribute :delete_with_instance,  aliases: 'DeleteWithInstance'
-        attribute :delete_auto_snapshot,  aliases: 'DeleteAutoSnapshot'
-        attribute :enable_auto_snapshot,  aliases: 'EnableAutoSnapshot'
-        attribute :created_at,            aliases: 'CreationTime'
-        attribute :attached_at,           aliases: 'AttachedTime'
-        attribute :detached_at,           aliases: 'DetachedTime'
-        attribute :expired_at,            aliases: 'ExpiredTime'
-        attribute :charge_type,           aliases: 'DiskChargeType'
-        attribute :tags,                  aliases: 'Tags'
+        identity :id, aliases: 'DiskId'
+        attribute :region_id, aliases: 'RegionId'
+        attribute :zone_id, aliases: 'ZoneId'
+        attribute :name, aliases: 'DiskName'
+        attribute :description, aliases: 'Description'
+        attribute :type, aliases: 'Type'
+        attribute :category, aliases: 'Category'
+        attribute :size, aliases: 'Size'
+        attribute :image_id, aliases: 'ImageId'
+        attribute :snapshot_id, aliases: 'SourceSnapshotId'
+        attribute :product_code, aliases: 'ProductCode'
+        attribute :portable, aliases: 'Portable'
+        attribute :state, aliases: 'Status'
+        attribute :operation_locks, aliases: 'OperationLocks'
+        attribute :server_id, aliases: 'InstanceId'
+        attribute :device, aliases: 'Device'
+        attribute :delete_with_instance, aliases: 'DeleteWithInstance'
+        attribute :delete_auto_snapshot, aliases: 'DeleteAutoSnapshot'
+        attribute :enable_auto_snapshot, aliases: 'EnableAutoSnapshot'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :attached_at, aliases: 'AttachedTime'
+        attribute :detached_at, aliases: 'DetachedTime'
+        attribute :expired_at, aliases: 'ExpiredTime'
+        attribute :charge_type, aliases: 'DiskChargeType'
+        attribute :tags, aliases: 'Tags'
 
         def destroy
           requires :id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/volumes.rb 0.3.2-2/lib/fog/aliyun/models/compute/volumes.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/volumes.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/volumes.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/volume'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/vpc.rb 0.3.2-2/lib/fog/aliyun/models/compute/vpc.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/vpc.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/vpc.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,18 +1,20 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
     class Aliyun
       class VPC < Fog::Model
-        identity  :id,                aliases: 'VpcId'
-        attribute :name,              aliases: 'VpcName'
-        attribute :state,             aliases: 'Status'
-        attribute :cidr_block,        aliases: 'CidrBlock'
-        attribute :v_switch_ids,      aliases: 'VSwitchIds'
-        attribute :description,       aliases: 'Description'
-        attribute :user_cidrs,        aliases: 'UserCidrs'
-        attribute :region_id,         aliases: 'RegionId'
-        attribute :v_router_id,       aliases: 'VRouterId'
-        attribute :create_at,         aliases: 'CreationTime'
+        identity :id, aliases: 'VpcId'
+        attribute :name, aliases: 'VpcName'
+        attribute :state, aliases: 'Status'
+        attribute :cidr_block, aliases: 'CidrBlock'
+        attribute :v_switch_ids, aliases: 'VSwitchIds'
+        attribute :description, aliases: 'Description'
+        attribute :user_cidrs, aliases: 'UserCidrs'
+        attribute :region_id, aliases: 'RegionId'
+        attribute :v_router_id, aliases: 'VRouterId'
+        attribute :create_at, aliases: 'CreationTime'
 
         def ready?
           requires :state
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/vpcs.rb 0.3.2-2/lib/fog/aliyun/models/compute/vpcs.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/vpcs.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/vpcs.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/vpc'
 
@@ -70,9 +72,7 @@ module Fog
         #
 
         def get(vpcId)
-          if vpcId
-            $vpc = self.class.new(service: service).all('vpcId' => vpcId)[0]
-          end
+          $vpc = self.class.new(service: service).all('vpcId' => vpcId)[0] if vpcId
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/vrouter.rb 0.3.2-2/lib/fog/aliyun/models/compute/vrouter.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/vrouter.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/vrouter.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,16 +1,18 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
     class Aliyun
       class VRouter < Fog::Model
-        identity :id,               aliases: 'VRouterId'
+        identity :id, aliases: 'VRouterId'
 
-        attribute :name,            aliases: 'VRouterName'
+        attribute :name, aliases: 'VRouterName'
         attribute :route_table_ids, aliases: 'RouteTableIds'
-        attribute :created_at,      aliases: 'CreationTime'
-        attribute :description,     aliases: 'Description'
-        attribute :region_id,       aliases: 'RegionId'
-        attribute :vpc_id,          aliases: 'VpcId'
+        attribute :created_at, aliases: 'CreationTime'
+        attribute :description, aliases: 'Description'
+        attribute :region_id, aliases: 'RegionId'
+        attribute :vpc_id, aliases: 'VpcId'
 
         def vpc
           requires :vpc_id
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/vrouters.rb 0.3.2-2/lib/fog/aliyun/models/compute/vrouters.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/vrouters.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/vrouters.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/vrouter'
 
@@ -51,9 +53,7 @@ module Fog
         #
 
         def get(vRouterId)
-          if vRouterId
-            self.class.new(service: service).all('vRouterId' => vRouterId)[0]
-          end
+          self.class.new(service: service).all('vRouterId' => vRouterId)[0] if vRouterId
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/vswitches.rb 0.3.2-2/lib/fog/aliyun/models/compute/vswitches.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/vswitches.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/vswitches.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/compute/vswitch'
 
@@ -70,9 +72,7 @@ module Fog
 
         def get(vswitchId)
           requires :vpc
-          if vswitchId
-            self.class.new(service: service, vpc: vpc).all(vSwitchId: vswitchId)[0]
-          end
+          self.class.new(service: service, vpc: vpc).all(vSwitchId: vswitchId)[0] if vswitchId
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/compute/vswitch.rb 0.3.2-2/lib/fog/aliyun/models/compute/vswitch.rb
--- 0.2.0-1/lib/fog/aliyun/models/compute/vswitch.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/compute/vswitch.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,17 +1,19 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 module Fog
   module Compute
     class Aliyun
       class Vswitch < Fog::Model
-        identity  :id,                  aliases: 'VSwitchId'
-        attribute :vpc_id,              aliases: 'VpcId'
-        attribute :zone_id,             aliases: 'ZoneId'
-        attribute :name,                aliases: 'VSwitchName'
-        attribute :available_ip_count,  aliases: 'AvailableIpAddressCount'
-        attribute :state,               aliases: 'Status'
-        attribute :cidr_block,          aliases: 'CidrBlock'
-        attribute :description,      aliases: 'Description'
-        attribute :region_id,        aliases: 'RegionId'
+        identity :id, aliases: 'VSwitchId'
+        attribute :vpc_id, aliases: 'VpcId'
+        attribute :zone_id, aliases: 'ZoneId'
+        attribute :name, aliases: 'VSwitchName'
+        attribute :available_ip_count, aliases: 'AvailableIpAddressCount'
+        attribute :state, aliases: 'Status'
+        attribute :cidr_block, aliases: 'CidrBlock'
+        attribute :description, aliases: 'Description'
+        attribute :region_id, aliases: 'RegionId'
         attribute :create_at, aliases: 'CreationTime'
         def initialize(attributes = {})
           super
diff -pruN 0.2.0-1/lib/fog/aliyun/models/storage/directories.rb 0.3.2-2/lib/fog/aliyun/models/storage/directories.rb
--- 0.2.0-1/lib/fog/aliyun/models/storage/directories.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/storage/directories.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/storage/directory'
 
@@ -9,7 +11,7 @@ module Fog
 
         def all
           containers = service.get_containers
-          return nil if nil == containers
+          return nil if containers.nil?
           data = []
           i = 0
           containers.each do |entry|
diff -pruN 0.2.0-1/lib/fog/aliyun/models/storage/directory.rb 0.3.2-2/lib/fog/aliyun/models/storage/directory.rb
--- 0.2.0-1/lib/fog/aliyun/models/storage/directory.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/storage/directory.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 require 'fog/aliyun/models/storage/files'
 
diff -pruN 0.2.0-1/lib/fog/aliyun/models/storage/file.rb 0.3.2-2/lib/fog/aliyun/models/storage/file.rb
--- 0.2.0-1/lib/fog/aliyun/models/storage/file.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/storage/file.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,27 +1,30 @@
+# frozen_string_literal: true
+
 require 'fog/core/model'
 
 module Fog
   module Storage
     class Aliyun
       class File < Fog::Model
-        identity  :key,                 aliases: 'name'
-        attribute :date,                aliases: 'Date'
-        attribute :content_length,      aliases: 'Content-Length', type: :integer
-        attribute :content_type,        aliases: 'Content-Type'
-        attribute :connection,          aliases: 'Connection'
+        identity :key, aliases: 'name'
+        attribute :date, aliases: 'Date'
+        attribute :content_length, aliases: 'Content-Length', type: :integer
+        attribute :content_type, aliases: 'Content-Type'
+        attribute :connection, aliases: 'Connection'
         attribute :content_disposition, aliases: 'Content-Disposition'
-        attribute :etag,                aliases: 'Etag'
-        attribute :last_modified,       aliases: 'Last-Modified', type: :time
-        attribute :accept_ranges,       aliases: 'Accept-Ranges'
-        attribute :server,              aliases: 'Server'
-        attribute :object_type,         aliases: 'x-oss-object-type'
+        attribute :etag, aliases: 'Etag'
+        attribute :last_modified, aliases: 'Last-Modified', type: :time
+        attribute :accept_ranges, aliases: 'Accept-Ranges'
+        attribute :server, aliases: 'Server'
+        attribute :object_type, aliases: 'x-oss-object-type'
 
         def body
-          attributes[:body] ||= if last_modified
-                                  collection.get(identity).body
-                                else
-                                  ''
-          end
+          attributes[:body] ||=
+            if last_modified
+              collection.get(identity).body
+            else
+              ''
+            end
         end
 
         def body=(new_body)
@@ -37,11 +40,11 @@ module Fog
                           else
                             directory.key + '/' + key
                           end
-          if target_directory_key == ''
-            target_object = target_file_key
-          else
-            target_object = target_directory_key + '/' + target_file_key
-          end
+          target_object = if target_directory_key == ''
+                            target_file_key
+                          else
+                            target_directory_key + '/' + target_file_key
+                          end
           service.copy_object(nil, source_object, nil, target_object, options)
           target_directory = service.directories.new(key: target_directory_key)
           target_directory.files.get(target_file_key)
@@ -169,7 +172,7 @@ module Fog
                      end
 
             headers = service.head_object(object).data[:headers]
-            headers.reject! { |k, _v| !metadata_attribute?(k) }
+            headers.select! { |k, _v| metadata_attribute?(k) }
           else
             {}
           end
diff -pruN 0.2.0-1/lib/fog/aliyun/models/storage/files.rb 0.3.2-2/lib/fog/aliyun/models/storage/files.rb
--- 0.2.0-1/lib/fog/aliyun/models/storage/files.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/models/storage/files.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'fog/core/collection'
 require 'fog/aliyun/models/storage/file'
 
@@ -15,11 +17,9 @@ module Fog
 
         def all(_options = {})
           requires :directory
-          if directory.key != '' && directory.key != '.' && !directory.key.nil?
-            prefix = directory.key + '/'
-          end
+          prefix = directory.key + '/' if directory.key != '' && directory.key != '.' && !directory.key.nil?
           files = service.list_objects(prefix: prefix)['Contents']
-          return if nil == files
+          return if files.nil?
           data = []
           i = 0
           files.each do |file|
@@ -27,9 +27,7 @@ module Fog
             content_length = file['Size'][0].to_i
             key = file['Key'][0]
             lastModified = file['LastModified'][0]
-            last_modified = if !lastModified.nil? && lastModified != ''
-                              Time.parse(lastModified).localtime
-                            end
+            last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '')
             type = file['Type'][0]
             data[i] = { content_length: content_length,
                         key: key,
@@ -66,6 +64,18 @@ module Fog
                    else
                      directory.key + '/' + key
                    end
+          begin
+            data = service.get_object(object)
+          rescue StandardError => error
+            case error.response.body
+            when %r{<Code>NoSuchKey</Code>}
+              nil
+            else
+              raise(error)
+            end
+          end
+
+          contentLen = data[:headers]['Content-Length'].to_i
 
           if block_given?
             pagesNum = (contentLen + Excon::CHUNK_SIZE - 1) / Excon::CHUNK_SIZE
@@ -80,16 +90,11 @@ module Fog
               body = nil
             end
           else
-            data = service.get_object(object)
             body = data[:body]
           end
 
-          contentLen = data[:headers]['Content-Length'].to_i
-          return nil if data[:status] != 200
           lastModified = data[:headers]['Last-Modified']
-          last_modified = if !lastModified.nil? && lastModified != ''
-                            Time.parse(lastModified).localtime
-                          end
+          last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '')
 
           date = data[:headers]['Date']
           date = (Time.parse(date).localtime if !date.nil? && date != '')
@@ -150,9 +155,7 @@ module Fog
                    end
           data = service.head_object(object).data
           lastModified = data[:headers]['Last-Modified']
-          last_modified = if !lastModified.nil? && lastModified != ''
-                            Time.parse(lastModified).localtime
-                          end
+          last_modified = (Time.parse(lastModified).localtime if !lastModified.nil? && lastModified != '')
 
           date = data[:headers]['Date']
           date = (Time.parse(date).localtime if !date.nil? && date != '')
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/allocate_eip_address.rb 0.3.2-2/lib/fog/aliyun/requests/compute/allocate_eip_address.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/allocate_eip_address.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/allocate_eip_address.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -35,7 +37,7 @@ module Fog
           end
 
           _InternetChargeType = options[:internet_charge_type]
-          _InternetChargeType = 'PayByTraffic' unless _InternetChargeType
+          _InternetChargeType ||= 'PayByTraffic'
           _parameters['InternetChargeType'] = _InternetChargeType
           _pathURL += '&InternetChargeType=' + _InternetChargeType
 
@@ -49,6 +51,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/allocate_public_ip_address.rb 0.3.2-2/lib/fog/aliyun/requests/compute/allocate_public_ip_address.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/allocate_public_ip_address.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/allocate_public_ip_address.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -34,6 +36,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/associate_eip_address.rb 0.3.2-2/lib/fog/aliyun/requests/compute/associate_eip_address.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/associate_eip_address.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/associate_eip_address.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -44,6 +46,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/attach_disk.rb 0.3.2-2/lib/fog/aliyun/requests/compute/attach_disk.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/attach_disk.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/attach_disk.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -17,12 +19,12 @@ module Fog
         #
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.201.106.DGkmH7#/pub/ecs/open-api/disk&attachdisk]
         def attach_disk(instanceId, diskId, options = {})
-          action   = 'AttachDisk'
+          action = 'AttachDisk'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['InstanceId'] = instanceId
           pathUrl += '&InstanceId='
@@ -33,9 +35,9 @@ module Fog
           pathUrl += diskId
 
           deleteWithInstance = options[:deleteWithInstance]
-          device             = options[:device]
+          device = options[:device]
 
-          deleteWithInstance = 'true' unless deleteWithInstance
+          deleteWithInstance ||= 'true'
 
           parameters['DeleteWithInstance'] = deleteWithInstance
           pathUrl += '&DeleteWithInstance='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_disk.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_disk.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_disk.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_disk.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -19,12 +21,12 @@ module Fog
         #
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.201.106.DGkmH7#/pub/ecs/open-api/disk&createdisk]
         def create_disk(size, options = {})
-          action   = 'CreateDisk'
+          action = 'CreateDisk'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['ZoneId'] = @aliyun_zone_id
           pathUrl += '&ZoneId='
@@ -34,8 +36,8 @@ module Fog
           pathUrl += '&Size='
           pathUrl += size
 
-          name  = options[:name]
-          desc  = options[:description]
+          name = options[:name]
+          desc = options[:description]
           category = options[:category]
 
           if name
@@ -84,12 +86,12 @@ module Fog
         #
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.201.106.DGkmH7#/pub/ecs/open-api/disk&createdisk]
         def create_disk_by_snapshot(snapshotId, options = {})
-          action   = 'CreateDisk'
+          action = 'CreateDisk'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['ZoneId'] = @aliyun_zone_id
           pathUrl += '&ZoneId='
@@ -99,8 +101,8 @@ module Fog
           pathUrl += '&SnapshotId='
           pathUrl += snapshotId
 
-          name  = options[:name]
-          desc  = options[:description]
+          name = options[:name]
+          desc = options[:description]
           category = options[:category]
 
           if name
@@ -132,6 +134,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_image.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_image.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_image.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_image.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SnapshotId'] = snapshotId
           pathUrl += '&SnapshotId='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_egress_ip_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&authorizesecuritygroup]
         def create_security_group_egress_ip_rule(securitygroup_id, destCidrIp, nicType, option = {})
-          action   = 'AuthorizeSecurityGroupEgress'
+          action = 'AuthorizeSecurityGroupEgress'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -18,31 +20,31 @@ module Fog
           parameters['DestCidrIp'] = destCidrIp
           pathUrl += '&DestCidrIp='
           pathUrl += URI.encode(destCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
-          nicType = 'intranet' unless nicType
+          nicType ||= 'intranet'
           parameters['NicType'] = nicType
           pathUrl += '&NicType='
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -58,6 +60,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_egress_sg_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&authorizesecuritygroup]
         def create_security_group_egress_sg_rule(securitygroup_id, dest_group_id, option = {})
-          action   = 'AuthorizeSecurityGroupEgress'
+          action = 'AuthorizeSecurityGroupEgress'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -25,13 +27,13 @@ module Fog
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
@@ -44,13 +46,13 @@ module Fog
           end
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -66,6 +68,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_ip_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&authorizesecuritygroup]
         def create_security_group_ip_rule(securitygroup_id, sourceCidrIp, nicType, option = {})
-          action   = 'AuthorizeSecurityGroup'
+          action = 'AuthorizeSecurityGroup'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -18,31 +20,31 @@ module Fog
           parameters['SourceCidrIp'] = sourceCidrIp
           pathUrl += '&SourceCidrIp='
           pathUrl += URI.encode(sourceCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
-          nicType = 'intranet' unless nicType
+          nicType ||= 'intranet'
           parameters['NicType'] = nicType
           pathUrl += '&NicType='
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -58,6 +60,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,18 +1,20 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.201.106.DGkmH7#/pub/ecs/open-api/securitygroup&createsecuritygroup]
         def create_security_group(options = {})
-          action   = 'CreateSecurityGroup'
+          action = 'CreateSecurityGroup'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
-          name  = options[:name]
-          desc  = options[:description]
+          name = options[:name]
+          desc = options[:description]
           vpcid = options[:vpcId]
 
           if name
@@ -71,7 +73,7 @@ module Fog
           }
           response
         end
-      end # mock
-    end # aliyun
-  end # compute
-end # fog
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_security_group_sg_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&authorizesecuritygroup]
         def create_security_group_sg_rule(securitygroup_id, source_securitygroup_id, option = {})
-          action   = 'AuthorizeSecurityGroup'
+          action = 'AuthorizeSecurityGroup'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -25,13 +27,13 @@ module Fog
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
@@ -44,13 +46,13 @@ module Fog
           end
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -66,6 +68,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_server.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_server.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_server.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_server.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -103,14 +105,18 @@ module Fog
             u.name == @openstack_username
           end
 
-          user_id = if user
-                      user.id
-                    else
-                      response = identity.create_user(@openstack_username,
-                                                      'password',
-                                                      "#{@openstack_username}@example.com")
-                      response.body['user']['id']
-          end
+          user_id =
+            if user
+              user.id
+            else
+              response =
+                identity.create_user(
+                  @openstack_username,
+                  'password',
+                  "#{@openstack_username}@example.com"
+                )
+              response.body['user']['id']
+            end
 
           mock_data = {
             'addresses'    => { 'Private' => [{ 'addr' => Fog::Mock.random_ip }] },
@@ -140,15 +146,15 @@ module Fog
           end
 
           response_data = {}
-          if options['return_reservation_id'] == 'True'
-            response_data = { 'reservation_id' => "r-#{Fog::Mock.random_numbers(6)}" }
-          else
-            response_data = {
-              'adminPass'       => 'password',
-              'id'              => server_id,
-              'links'           => mock_data['links']
-            }
-          end
+          response_data = if options['return_reservation_id'] == 'True'
+                            { 'reservation_id' => "r-#{Fog::Mock.random_numbers(6)}" }
+                          else
+                            {
+                              'adminPass'       => 'password',
+                              'id'              => server_id,
+                              'links'           => mock_data['links']
+                            }
+                          end
 
           if block_devices = options['block_device_mapping_v2']
             block_devices.each { |bd| compute.volumes.get(bd[:uuid]).attach(server_id, bd[:device_name]) }
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_snapshot.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_snapshot.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_snapshot.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_snapshot.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['DiskId'] = diskId
           pathUrl += '&DiskId='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_vpc.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_vpc.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_vpc.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_vpc.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['CidrBlock'] = cidrBlock
           pathUrl += '&CidrBlock='
@@ -41,6 +43,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_vpn_connection.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_vpn_connection.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_vpn_connection.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_vpn_connection.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,60 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        def create_vpn_connection(customergatewayId, vpngatewayId, localsubnet, remotesubnet, options = {})
+          # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vswitch&createvswitch]
+          action = 'CreateVpnConnection'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          parameters['CustomerGatewayId'] = customergatewayId
+          pathUrl += '&CustomerGatewayId='
+          pathUrl += customergatewayId
+
+          parameters['VpnGatewayId'] = vpngatewayId
+          pathUrl += '&VpnGatewayId='
+          pathUrl += vpngatewayId
+
+          parameters['LocalSubnet'] = localsubnet
+          pathUrl += '&LocalSubnet='
+          pathUrl += localsubnet
+
+          parameters['RemoteSubnet'] = remotesubnet
+          pathUrl += '&RemoteSubnet='
+          pathUrl += remotesubnet
+
+          name = options[:name]
+          ipsecconfig = options[:ipsecconfig]
+
+          if name
+            parameters['Name'] = name
+            pathUrl += '&Name='
+            pathUrl += name
+          end
+
+          if ipsecconfig
+            parameters['IpsecConfig'] = ipsecconfig
+            pathUrl += '&IpsecConfig='
+            pathUrl += ipsecconfig
+          end
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_vpn_customergateway.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_vpn_customergateway.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_vpn_customergateway.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_vpn_customergateway.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,48 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        def create_vpn_customergateway(ipaddress, options = {})
+          # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vswitch&createvswitch]
+          action = 'CreateCustomerGateway'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          parameters['IpAddress'] = ipaddress
+          pathUrl += '&IpAddress='
+          pathUrl += ipaddress
+
+          name = options[:name]
+          desc = options[:description]
+
+          if name
+            parameters['Name'] = name
+            pathUrl += '&Name='
+            pathUrl += name
+          end
+
+          if desc
+            parameters['Description'] = desc
+            pathUrl += '&Description='
+            pathUrl += desc
+          end
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/create_vswitch.rb 0.3.2-2/lib/fog/aliyun/requests/compute/create_vswitch.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/create_vswitch.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/create_vswitch.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['VpcId'] = vpcId
           pathUrl += '&VpcId='
@@ -49,6 +51,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_disk.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_disk.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_disk.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_disk.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -14,12 +16,12 @@ module Fog
         #
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.201.106.DGkmH7#/pub/ecs/open-api/disk&deletedisk]
         def delete_disk(diskId)
-          action   = 'DeleteDisk'
+          action = 'DeleteDisk'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['DiskId'] = diskId
           pathUrl += '&DiskId='
@@ -36,6 +38,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_image.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_image.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_image.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_image.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['ImageId'] = imageId
           pathUrl += '&ImageId='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_egress_ip_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&authorizesecuritygroup]
         def delete_security_group_egress_ip_rule(securitygroup_id, destCidrIp, nicType, option = {})
-          action   = 'RevokeSecurityGroupEgress'
+          action = 'RevokeSecurityGroupEgress'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -18,31 +20,31 @@ module Fog
           parameters['DestCidrIp'] = destCidrIp
           pathUrl += '&DestCidrIp='
           pathUrl += URI.encode(destCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
-          nicType = 'intranet' unless nicType
+          nicType ||= 'intranet'
           parameters['NicType'] = nicType
           pathUrl += '&NicType='
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -58,6 +60,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_egress_sg_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&authorizesecuritygroup]
         def delete_security_group_egress_sg_rule(securitygroup_id, dest_group_id, option = {})
-          action   = 'RevokeSecurityGroupEgress'
+          action = 'RevokeSecurityGroupEgress'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -25,13 +27,13 @@ module Fog
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
@@ -44,13 +46,13 @@ module Fog
           end
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -66,6 +68,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_ip_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         def delete_security_group_ip_rule(securitygroup_id, sourceCidrIp, nicType, option = {})
           # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&revokesecuritygroup]
-          action   = 'RevokeSecurityGroup'
+          action = 'RevokeSecurityGroup'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -18,31 +20,31 @@ module Fog
           parameters['SourceCidrIp'] = sourceCidrIp
           pathUrl += '&SourceCidrIp='
           pathUrl += URI.encode(sourceCidrIp, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
-          nicType = 'intranet' unless nicType
+          nicType ||= 'intranet'
           parameters['NicType'] = nicType
           pathUrl += '&NicType='
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -58,6 +60,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           if security_group_id
             parameters['SecurityGroupId'] = security_group_id
@@ -45,7 +47,7 @@ module Fog
           response.body = {}
           response
         end
-      end # mock
-    end # aliyun
-  end # compute
-end # fog
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_security_group_sg_rule.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         def delete_security_group_sg_rule(securitygroup_id, source_securitygroup_id, option = {})
           # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/securitygroup&revokesecuritygroup]
-          action   = 'RevokeSecurityGroup'
+          action = 'RevokeSecurityGroup'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SecurityGroupId'] = securitygroup_id
           pathUrl += '&SecurityGroupId='
@@ -25,13 +27,13 @@ module Fog
           pathUrl += nicType
 
           portRange = option[:portRange]
-          portRange = '-1/-1' unless portRange
+          portRange ||= '-1/-1'
           parameters['PortRange'] = portRange
           pathUrl += '&PortRange='
           pathUrl += URI.encode(portRange, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
 
           protocol = option[:protocol]
-          protocol = 'all' unless protocol
+          protocol ||= 'all'
           parameters['IpProtocol'] = protocol
           pathUrl += '&IpProtocol='
           pathUrl += protocol
@@ -44,13 +46,13 @@ module Fog
           end
 
           policy = option[:policy]
-          policy = 'accept' unless policy
+          policy ||= 'accept'
           parameters['Policy'] = policy
           pathUrl += '&Policy='
           pathUrl += policy
 
           priority = option[:priority]
-          priority = '1' unless priority
+          priority ||= '1'
           parameters['Priority'] = priority
           pathUrl += '&Priority='
           pathUrl += priority
@@ -66,6 +68,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_server.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_server.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_server.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_server.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_snapshot.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_snapshot.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_snapshot.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_snapshot.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['SnapshotId'] = snapshotId
           pathUrl += '&SnapshotId='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vpc.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vpc.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vpc.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vpc.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           if vpc_id
             parameters['VpcId'] = vpc_id
@@ -30,6 +32,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vpn_connection.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vpn_connection.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vpn_connection.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vpn_connection.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        def delete_vpn_connection(vpn_connectionid)
+          # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vswitch&deletevswitch]
+          action = 'DeleteVpnConnection'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          if vpn_connectionid
+            parameters['VpnConnectionId'] = vpn_connectionid
+            pathUrl += '&VpnConnectionId='
+            pathUrl += vpn_connectionid
+          else
+            raise ArgumentError, 'Missing required vpn_connectionid'
+          end
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,37 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        def delete_vpn_customergateway(vpn_customergatewayid)
+          # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vswitch&deletevswitch]
+          action = 'DeleteCustomerGateway'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          if vpn_customergatewayid
+            parameters['CustomerGatewayId'] = vpn_customergatewayid
+            pathUrl += '&CustomerGatewayId='
+            pathUrl += vpn_customergatewayid
+          else
+            raise ArgumentError, 'Missing required vpn_customergatewayid'
+          end
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vswitch.rb 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vswitch.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/delete_vswitch.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/delete_vswitch.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           if vswitch_id
             parameters['VSwitchId'] = vswitch_id
@@ -30,6 +32,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/detach_disk.rb 0.3.2-2/lib/fog/aliyun/requests/compute/detach_disk.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/detach_disk.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/detach_disk.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,15 +1,17 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
       class Real
         # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/disk&detachdisk]
         def detach_disk(instanceId, diskId, _options = {})
-          action   = 'DetachDisk'
+          action = 'DetachDisk'
           sigNonce = randonStr
-          time     = Time.new.utc
+          time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['InstanceId'] = instanceId
           pathUrl += '&InstanceId='
@@ -19,6 +21,7 @@ module Fog
           pathUrl += '&DiskId='
           pathUrl += diskId
 
+          device = _options[:device]
           if device
             parameters['Device'] = device
             pathUrl += '&Device='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/join_security_group.rb 0.3.2-2/lib/fog/aliyun/requests/compute/join_security_group.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/join_security_group.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/join_security_group.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -27,14 +29,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def join_security_group(_server_id, _group_id)
-          response = Excon::Response.new
-          response.status = 200
-          response
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/leave_security_group.rb 0.3.2-2/lib/fog/aliyun/requests/compute/leave_security_group.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/leave_security_group.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/leave_security_group.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -27,14 +29,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def add_security_group(_server_id, _group_name)
-          response = Excon::Response.new
-          response.status = 200
-          response
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_disks.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_disks.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_disks.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_disks.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -33,10 +35,10 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
+          pageSize = options[:pageSize]
           instanceId = options[:instanceId]
           diskIds = options[:diskIds]
           diskType = options[:diskType]
@@ -129,7 +131,7 @@ module Fog
           end
 
           pageSize = options[:pageSize]
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_eip_addresses.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_eip_addresses.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_eip_addresses.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_eip_addresses.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -36,7 +38,7 @@ module Fog
           end
 
           _PageSize = options[:page_size]
-          _PageSize = '50' unless _PageSize
+          _PageSize ||= '50'
           _parameters['PageSize'] = _PageSize
           _pathURL += '&PageSize=' + _PageSize
 
@@ -50,6 +52,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_images.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_images.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_images.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_images.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           pageNumber = options[:pageNumber]
           if pageNumber
@@ -19,7 +21,7 @@ module Fog
           end
 
           pageSize = options[:pageSize]
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
@@ -70,7 +72,7 @@ module Fog
           data = list_images_detail.body['images']
           images = []
           for image in data
-            images << image.reject { |key, _value| !%w(id name links).include?(key) }
+            images << image.select { |key, _value| %w[id name links].include?(key) }
           end
           response.status = [200, 203][rand(1)]
           response.body = { 'images' => images }
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_route_tables.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_route_tables.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_route_tables.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_route_tables.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,14 +11,14 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['VRouterId'] = vrouterid
           pathUrl += '&VRouterId='
           pathUrl += vrouterid
 
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
+          pageSize = options[:pageSize]
           routeTableId = options[:routeTableId]
           if routeTableId
             parameters['RouteTableId'] = routeTableId
@@ -29,7 +31,7 @@ module Fog
             pathUrl += pageNumber
           end
 
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
@@ -52,7 +54,7 @@ module Fog
           data = list_images_detail.body['images']
           images = []
           for image in data
-            images << image.reject { |key, _value| !%w(id name links).include?(key) }
+            images << image.select { |key, _value| %w[id name links].include?(key) }
           end
           response.status = [200, 203][rand(1)]
           response.body = { 'images' => images }
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_security_group_rules.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_security_group_rules.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_security_group_rules.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_security_group_rules.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -22,7 +24,7 @@ module Fog
             pathUrl += nicType
           end
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
+          pageSize = options[:pageSize]
           if pageNumber
             parameters['PageNumber'] = pageNumber
             pathUrl += '&PageNumber='
@@ -67,7 +69,7 @@ module Fog
           end
           response
         end
-      end # mock
-    end # aliyun
-  end # compute
-end # fog
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_security_groups.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_security_groups.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_security_groups.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_security_groups.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,11 +11,11 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
-          vpcId      = options[:vpcId]
+          pageSize = options[:pageSize]
+          vpcId = options[:vpcId]
 
           if vpcId
             parameters['VpcId'] = vpcId
@@ -28,7 +30,7 @@ module Fog
           end
 
           pageSize = options[:pageSize]
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
@@ -72,7 +74,7 @@ module Fog
             status: 200
           )
         end
-      end # mock
-    end # aliyun
-  end # compute
-end # fog
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_servers.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_servers.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_servers.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_servers.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -38,7 +40,7 @@ module Fog
             _pathURL += '&PageNumber=' + _PageNumber
           end
 
-          _PageSize = '50' unless _PageSize
+          _PageSize ||= '50'
           _parameters['PageSize'] = _PageSize
           _pathURL += '&PageSize=' + _PageSize
 
@@ -59,7 +61,7 @@ module Fog
           data = list_servers_detail.body['servers']
           servers = []
           for server in data
-            servers << server.reject { |key, _value| !%w(id name links).include?(key) }
+            servers << server.select { |key, _value| %w[id name links].include?(key) }
           end
           response.status = [200, 203][rand(1)]
           response.body = { 'servers' => servers }
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_server_types.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_server_types.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_server_types.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_server_types.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -19,14 +21,7 @@ module Fog
             method: 'GET',
             path: _pathURL
           )
-
-          # _InstanceType = Hash.new
-          # _InstanceTypeList =  Fog::JSON.decode(response.body)["InstanceTypes"]["InstanceType"]
-          # _InstanceTypeList.each do |instanceType|
-          #  _InstanceType[[instanceType["CpuCoreCount"], instanceType["MemorySize"]]] = instanceType["InstanceTypeId"]
-          # end
-          # _InstanceType
-        end # end list_server_types
+        end
 
         def get_instance_type(cpuCount, memorySize)
           _action = 'DescribeInstanceTypes'
@@ -47,31 +42,15 @@ module Fog
 
           _InstanceTypeId = nil
           _InstanceTypeList = Fog::JSON.decode(response.body)['InstanceTypes']['InstanceType']
-          _InstanceTypeList.each do |instanceType|
-            next unless (instanceType['CpuCoreCount'] == cpuCount) && (instanceType['MemorySize'] == memorySize)
-            _InstanceTypeId = instanceType['InstanceTypeId']
+          _InstanceTypeList.each do |instance_type|
+            next unless (instance_type['CpuCoreCount'] == cpuCount) && (instance_type['MemorySize'] == memorySize)
+            _InstanceTypeId = instance_type['InstanceTypeId']
             puts '_instanceTypeId: ' + _InstanceTypeId
             break
-            # end if
-          end # end each
+          end
           _InstanceTypeId
-        end # end get_instance_type
-      end # end class Real
-
-      #      class Mock
-      #        def list_servers(options = {})
-      #          response = Excon::Response.new
-      #          data = list_servers_detail.body['servers']
-      #          servers = []
-      #          for server in data
-      #            servers << server.reject { |key, value| !['id', 'name', 'links'].include?(key) }
-      #          end
-      #          response.status = [200, 203][rand(1)]
-      #          response.body = { 'servers' => servers }
-      #          response
-      #        end
-      #      end
-    end # end class Aliyun
-  end # end module Compute
-  # end module Fog
+        end
+      end
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_snapshots.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_snapshots.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_snapshots.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_snapshots.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           pageNumber = options[:pageNumber]
           pageSize = options[:pageSize]
@@ -76,7 +78,7 @@ module Fog
             pathUrl += pageNumber
           end
 
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpcs.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpcs.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpcs.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpcs.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           _VpcId = options[:vpcId]
           if _VpcId
@@ -19,14 +21,14 @@ module Fog
           end
 
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
+          pageSize = options[:pageSize]
           if pageNumber
             parameters['PageNumber'] = pageNumber
             pathUrl += '&PageNumber='
             pathUrl += pageNumber
           end
 
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpn_connections.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpn_connections.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpn_connections.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpn_connections.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vpc&describevpcs]
+        def list_vpn_connections(options = {})
+          action = 'DescribeVpnConnections'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          _VpnGatewayId = options[:vpngatewayId]
+          if _VpnGatewayId
+            parameters['VpnGatewayId'] = _VpnGatewayId
+            pathUrl += '&VpnGatewayId='
+            pathUrl += _VpnGatewayId
+          end
+
+          pageNumber = options[:pageNumber]
+          pageSize = options[:pageSize]
+          if pageNumber
+            parameters['PageNumber'] = pageNumber
+            pathUrl += '&PageNumber='
+            pathUrl += pageNumber
+          end
+
+          pageSize ||= '50'
+          parameters['PageSize'] = pageSize
+          pathUrl += '&PageSize='
+          pathUrl += pageSize
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpn_customergateways.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpn_customergateways.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpn_customergateways.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpn_customergateways.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,42 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vpc&describevpcs]
+        def list_vpn_customergateways(options = {})
+          action = 'DescribeCustomerGateways'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          pageNumber = options[:pageNumber]
+          pageSize = options[:pageSize]
+          if pageNumber
+            parameters['PageNumber'] = pageNumber
+            pathUrl += '&PageNumber='
+            pathUrl += pageNumber
+          end
+
+          pageSize ||= '50'
+          parameters['PageSize'] = pageSize
+          pathUrl += '&PageSize='
+          pathUrl += pageSize
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpn_gateways.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpn_gateways.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_vpn_gateways.rb	1970-01-01 00:00:00.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_vpn_gateways.rb	2018-06-22 23:00:57.000000000 +0000
@@ -0,0 +1,49 @@
+# frozen_string_literal: true
+
+module Fog
+  module Compute
+    class Aliyun
+      class Real
+        # {Aliyun API Reference}[https://docs.aliyun.com/?spm=5176.100054.3.1.DGkmH7#/pub/ecs/open-api/vpc&describevpcs]
+        def list_vpn_gateways(options = {})
+          action = 'DescribeVpnGateways'
+          sigNonce = randonStr
+          time = Time.new.utc
+
+          parameters = defalutVPCParameters(action, sigNonce, time)
+          pathUrl = defaultAliyunVPCUri(action, sigNonce, time)
+
+          _VpcId = options[:vpcId]
+          if _VpcId
+            parameters['VpcId'] = _VpcId
+            pathUrl += '&VpcId='
+            pathUrl += _VpcId
+          end
+
+          pageNumber = options[:pageNumber]
+          pageSize = options[:pageSize]
+          if pageNumber
+            parameters['PageNumber'] = pageNumber
+            pathUrl += '&PageNumber='
+            pathUrl += pageNumber
+          end
+
+          pageSize ||= '50'
+          parameters['PageSize'] = pageSize
+          pathUrl += '&PageSize='
+          pathUrl += pageSize
+
+          signature = sign(@aliyun_accesskey_secret, parameters)
+          pathUrl += '&Signature='
+          pathUrl += signature
+
+          VPCrequest(
+            expects: [200, 203],
+            method: 'GET',
+            path: pathUrl
+          )
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_vrouters.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_vrouters.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_vrouters.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_vrouters.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           _VRouterId = options[:vRouterId]
           if _VRouterId
@@ -19,14 +21,14 @@ module Fog
           end
 
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
+          pageSize = options[:pageSize]
           if pageNumber
             parameters['PageNumber'] = pageNumber
             pathUrl += '&PageNumber='
             pathUrl += pageNumber
           end
 
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
@@ -49,7 +51,7 @@ module Fog
           data = list_images_detail.body['VRouters']
           images = []
           for image in data
-            images << image.reject { |key, _value| !%w(id name links).include?(key) }
+            images << image.select { |key, _value| %w[id name links].include?(key) }
           end
           response.status = [200, 203][rand(1)]
           response.body = { 'VRouter' => images }
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_vswitchs.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_vswitchs.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_vswitchs.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_vswitchs.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,15 +11,15 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['VpcId'] = vpcid
           pathUrl += '&VpcId='
           pathUrl += vpcid
 
           pageNumber = options[:pageNumber]
-          pageSize   = options[:pageSize]
-          vswitchId  = options[:vSwitchId]
+          pageSize = options[:pageSize]
+          vswitchId = options[:vSwitchId]
           if vswitchId
             parameters['VSwitchId'] = vswitchId
             pathUrl += '&VSwitchId='
@@ -29,7 +31,7 @@ module Fog
             pathUrl += pageNumber
           end
 
-          pageSize = '50' unless pageSize
+          pageSize ||= '50'
           parameters['PageSize'] = pageSize
           pathUrl += '&PageSize='
           pathUrl += pageSize
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/list_zones.rb 0.3.2-2/lib/fog/aliyun/requests/compute/list_zones.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/list_zones.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/list_zones.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           signature = sign(@aliyun_accesskey_secret, parameters)
           pathUrl += '&Signature='
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/modify_vpc.rb 0.3.2-2/lib/fog/aliyun/requests/compute/modify_vpc.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/modify_vpc.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/modify_vpc.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['VpcId'] = vpcId
           pathUrl += '&VpcId='
@@ -67,7 +69,7 @@ module Fog
           }
           response
         end
-      end # mock
-    end # aliyun
-  end # compute
-end # fog
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/modify_vswitch.rb 0.3.2-2/lib/fog/aliyun/requests/compute/modify_vswitch.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/modify_vswitch.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/modify_vswitch.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -9,7 +11,7 @@ module Fog
           time = Time.new.utc
 
           parameters = defalutParameters(action, sigNonce, time)
-          pathUrl    = defaultAliyunUri(action, sigNonce, time)
+          pathUrl = defaultAliyunUri(action, sigNonce, time)
 
           parameters['VSwitchId'] = vSwitchId
           pathUrl += '&VSwitchId='
@@ -40,6 +42,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
-end # fog
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/reboot_server.rb 0.3.2-2/lib/fog/aliyun/requests/compute/reboot_server.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/reboot_server.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/reboot_server.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -30,14 +32,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def reboot_server(_server_id, _type = 'SOFT')
-          response = Excon::Response.new
-          response.status = 202
-          response
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/release_eip_address.rb 0.3.2-2/lib/fog/aliyun/requests/compute/release_eip_address.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/release_eip_address.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/release_eip_address.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -24,6 +26,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/start_server.rb 0.3.2-2/lib/fog/aliyun/requests/compute/start_server.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/start_server.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/start_server.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -28,14 +30,8 @@ module Fog
             method: 'GET',
             path: _pathURL
           )
-        end # def start_server
-      end # class Real
-
-      class Mock
-        def start_server(_server_id)
-          true
-        end # def start_server
-      end # class Mock
-    end # class aliyun
-  end # module Compute
-end # module Fog
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/stop_server.rb 0.3.2-2/lib/fog/aliyun/requests/compute/stop_server.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/stop_server.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/stop_server.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -28,14 +30,8 @@ module Fog
             method: 'GET',
             path: _pathURL
           )
-        end # def stop_server
-      end # class Real
-
-      class Mock
-        def stop_server(_server_id)
-          true
-        end # def stop_server
-      end # class Mock
-    end # class aliyun
-  end # module Compute
-end # module Fog
+        end
+      end
+    end
+  end
+end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/compute/unassociate_eip_address.rb 0.3.2-2/lib/fog/aliyun/requests/compute/unassociate_eip_address.rb
--- 0.2.0-1/lib/fog/aliyun/requests/compute/unassociate_eip_address.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/compute/unassociate_eip_address.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Compute
     class Aliyun
@@ -44,6 +46,6 @@ module Fog
           )
         end
       end
-    end # aliyun
-  end # compute
+    end
+  end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/copy_object.rb 0.3.2-2/lib/fog/aliyun/requests/storage/copy_object.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/copy_object.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/copy_object.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -29,11 +31,6 @@ module Fog
                   endpoint: endpoint)
         end
       end
-
-      class Mock
-        def copy_object(source_bucket, source_object, target_bucket, target_object)
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/delete_bucket.rb 0.3.2-2/lib/fog/aliyun/requests/storage/delete_bucket.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/delete_bucket.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/delete_bucket.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -20,11 +22,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def delete_bucket(bucket)
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/delete_container.rb 0.3.2-2/lib/fog/aliyun/requests/storage/delete_container.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/delete_container.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/delete_container.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -26,10 +28,6 @@ module Fog
           )
         end
       end
-      class Mock
-        def delete_container(container, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/delete_object.rb 0.3.2-2/lib/fog/aliyun/requests/storage/delete_object.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/delete_object.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/delete_object.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -24,7 +26,7 @@ module Fog
         end
 
         def abort_multipart_upload(bucket, object, endpoint, uploadid)
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
@@ -41,11 +43,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def delete_object(object, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/get_bucket.rb 0.3.2-2/lib/fog/aliyun/requests/storage/get_bucket.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/get_bucket.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/get_bucket.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -14,7 +16,7 @@ module Fog
             endpoint: endpoint
           )
           xml = ret.data[:body]
-          result = XmlSimple.xml_in(xml)
+          XmlSimple.xml_in(xml)
         end
 
         def get_bucket_location(bucket)
@@ -27,7 +29,7 @@ module Fog
             bucket: bucket,
             resource: resource
           )
-          location = XmlSimple.xml_in(ret.data[:body])
+          XmlSimple.xml_in(ret.data[:body])
         end
 
         def get_bucket_acl(bucket)
@@ -43,7 +45,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          acl = XmlSimple.xml_in(ret.data[:body])['AccessControlList'][0]['Grant'][0]
+          XmlSimple.xml_in(ret.data[:body])['AccessControlList'][0]['Grant'][0]
         end
 
         def get_bucket_CORSRules(bucket)
@@ -59,9 +61,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          if 404 != ret.data[:status]
-            cors = XmlSimple.xml_in(ret.data[:body])['CORSRule'][0]
-          end
+          XmlSimple.xml_in(ret.data[:body])['CORSRule'][0] if ret.data[:status] != 404
         end
 
         def get_bucket_lifecycle(bucket)
@@ -77,9 +77,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          if 404 != ret.data[:status]
-            lifecycle = XmlSimple.xml_in(ret.data[:body])['Rule'][0]
-          end
+          XmlSimple.xml_in(ret.data[:body])['Rule'][0] if ret.data[:status] != 404
         end
 
         def get_bucket_logging(bucket)
@@ -95,7 +93,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          logging = XmlSimple.xml_in(ret.data[:body])['LoggingEnabled'][0]['TargetPrefix']
+          XmlSimple.xml_in(ret.data[:body])['LoggingEnabled'][0]['TargetPrefix']
         end
 
         def get_bucket_referer(bucket)
@@ -111,7 +109,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          referer = XmlSimple.xml_in(ret.data[:body])
+          XmlSimple.xml_in(ret.data[:body])
         end
 
         def get_bucket_website(bucket)
@@ -127,13 +125,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          if 404 != ret.data[:status]
-            website = XmlSimple.xml_in(ret.data[:body])
-          end
-        end
-      end
-      class Mock
-        def get_bucket(bucket)
+          XmlSimple.xml_in(ret.data[:body]) if ret.data[:status] != 404
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/get_container.rb 0.3.2-2/lib/fog/aliyun/requests/storage/get_container.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/get_container.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/get_container.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -37,7 +39,6 @@ module Fog
           end
 
           location = get_bucket_location(bucket)
-          endpoint = 'http://' + location + '.aliyuncs.com'
           resource = bucket + '/'
           ret = request(
             expects: [200, 203, 400],
@@ -47,12 +48,7 @@ module Fog
             bucket: bucket
           )
           xml = ret.data[:body]
-          result = XmlSimple.xml_in(xml)['CommonPrefixes']
-        end
-      end
-
-      class Mock
-        def get_container(container, options = {})
+          XmlSimple.xml_in(xml)['CommonPrefixes']
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/get_containers.rb 0.3.2-2/lib/fog/aliyun/requests/storage/get_containers.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/get_containers.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/get_containers.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -41,7 +43,6 @@ module Fog
           end
 
           location = get_bucket_location(bucket)
-          endpoint = 'http://' + location + '.aliyuncs.com'
           resource = bucket + '/'
           ret = request(
             expects: [200, 203, 400],
@@ -51,12 +52,7 @@ module Fog
             bucket: bucket
           )
           xml = ret.data[:body]
-          result = XmlSimple.xml_in(xml)['CommonPrefixes']
-        end
-      end
-
-      class Mock
-        def get_containers(options = {})
+          XmlSimple.xml_in(xml)['CommonPrefixes']
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/get_object_https_url.rb 0.3.2-2/lib/fog/aliyun/requests/storage/get_object_https_url.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/get_object_https_url.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/get_object_https_url.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -19,25 +21,20 @@ module Fog
           acl = get_bucket_acl(bucket)
           location = get_bucket_location(bucket)
 
-          if 'private' == acl
+          if acl == 'private'
             expires_time = (Time.now.to_i + expires).to_s
             resource = bucket + '/' + object
             signature = sign('GET', expires_time, nil, resource)
-            url = 'https://' + bucket + '.' + location + '.aliyuncs.com/' + object +
-                  '?OSSAccessKeyId=' + @aliyun_accesskey_id + '&Expires=' + expires_time +
-                  '&Signature=' + URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
-          elsif 'public-read' == acl || 'public-read-write' == acl
-            url = 'https://' + bucket + '.' + location + '.aliyuncs.com/' + object
+            'https://' + bucket + '.' + location + '.aliyuncs.com/' + object +
+              '?OSSAccessKeyId=' + @aliyun_accesskey_id + '&Expires=' + expires_time +
+              '&Signature=' + URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
+          elsif acl == 'public-read' || acl == 'public-read-write'
+            'https://' + bucket + '.' + location + '.aliyuncs.com/' + object
           else
-            url = 'acl is wrong with value:' + acl
+            'acl is wrong with value:' + acl
           end
         end
       end
-
-      class Mock
-        def get_object_https_url_public(object, expires, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/get_object_http_url.rb 0.3.2-2/lib/fog/aliyun/requests/storage/get_object_http_url.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/get_object_http_url.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/get_object_http_url.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -19,25 +21,20 @@ module Fog
           acl = get_bucket_acl(bucket)
           location = get_bucket_location(bucket)
 
-          if 'private' == acl
+          if acl == 'private'
             expires_time = (Time.now.to_i + expires).to_s
             resource = bucket + '/' + object
             signature = sign('GET', expires_time, nil, resource)
-            url = 'http://' + bucket + '.' + location + '.aliyuncs.com/' + object +
-                  '?OSSAccessKeyId=' + @aliyun_accesskey_id + '&Expires=' + expires_time +
-                  '&Signature=' + URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
-          elsif 'public-read' == acl || 'public-read-write' == acl
-            url = 'http://' + bucket + '.' + location + '.aliyuncs.com/' + object
+            'http://' + bucket + '.' + location + '.aliyuncs.com/' + object +
+              '?OSSAccessKeyId=' + @aliyun_accesskey_id + '&Expires=' + expires_time +
+              '&Signature=' + URI.encode(signature, '/[^!*\'()\;?:@#&%=+$,{}[]<>`" ')
+          elsif acl == 'public-read' || acl == 'public-read-write'
+            'http://' + bucket + '.' + location + '.aliyuncs.com/' + object
           else
-            url = 'acl is wrong with value:' + acl
+            'acl is wrong with value:' + acl
           end
         end
       end
-
-      class Mock
-        def get_object_http_url_public(object, expires, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/get_object.rb 0.3.2-2/lib/fog/aliyun/requests/storage/get_object.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/get_object.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/get_object.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -12,7 +14,7 @@ module Fog
           bucket = options[:bucket]
           bucket ||= @aliyun_oss_bucket
           endpoint = options[:endpoint]
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
@@ -35,11 +37,6 @@ module Fog
           response.data
         end
       end
-
-      class Mock
-        def get_object(object, range = nil, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/head_object.rb 0.3.2-2/lib/fog/aliyun/requests/storage/head_object.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/head_object.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/head_object.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -24,11 +26,6 @@ module Fog
           ret
         end
       end
-
-      class Mock
-        def head_object(object, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/list_buckets.rb 0.3.2-2/lib/fog/aliyun/requests/storage/list_buckets.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/list_buckets.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/list_buckets.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -27,12 +29,7 @@ module Fog
             path: path
           )
           xml = ret.data[:body]
-          result = XmlSimple.xml_in(xml)['Buckets'][0]
-        end
-      end
-
-      class Mock
-        def list_buckets(options = {})
+          XmlSimple.xml_in(xml)['Buckets'][0]
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/list_objects.rb 0.3.2-2/lib/fog/aliyun/requests/storage/list_objects.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/list_objects.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/list_objects.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -29,8 +31,6 @@ module Fog
             path += '?delimiter=' + delimiter
           end
 
-          location = get_bucket_location(bucket)
-          endpoint = 'http://' + location + '.aliyuncs.com'
           resource = bucket + '/'
           ret = request(
             expects: [200, 203, 400],
@@ -40,11 +40,11 @@ module Fog
             bucket: bucket
           )
           xml = ret.data[:body]
-          result = XmlSimple.xml_in(xml)
+          XmlSimple.xml_in(xml)
         end
 
         def list_multipart_uploads(bucket, endpoint, _options = {})
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
@@ -59,11 +59,11 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          uploadid = XmlSimple.xml_in(ret.data[:body])['Upload']
+          XmlSimple.xml_in(ret.data[:body])['Upload']
         end
 
         def list_parts(bucket, object, endpoint, uploadid, _options = {})
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
@@ -78,12 +78,7 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          parts = XmlSimple.xml_in(ret.data[:body])['Part']
-        end
-      end
-
-      class Mock
-        def list_objects(options = {})
+          XmlSimple.xml_in(ret.data[:body])['Part']
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/put_bucket.rb 0.3.2-2/lib/fog/aliyun/requests/storage/put_bucket.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/put_bucket.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/put_bucket.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,10 +1,12 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
       class Real
         def put_bucket(bucketName)
           resource = bucketName + '/'
-          ret = request(
+          request(
             expects: [200, 203],
             method: 'PUT',
             resource: resource,
@@ -12,11 +14,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def put_bucket(bucketName)
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/put_container.rb 0.3.2-2/lib/fog/aliyun/requests/storage/put_container.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/put_container.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/put_container.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -25,11 +27,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def put_container(name, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/requests/storage/put_object.rb 0.3.2-2/lib/fog/aliyun/requests/storage/put_object.rb
--- 0.2.0-1/lib/fog/aliyun/requests/storage/put_object.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/requests/storage/put_object.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 module Fog
   module Storage
     class Aliyun
@@ -12,17 +14,15 @@ module Fog
           bucket ||= @aliyun_oss_bucket
           location = get_bucket_location(bucket)
           endpoint = 'http://' + location + '.aliyuncs.com'
-          return put_folder(bucket, object, endpoint) if nil == file
+          return put_folder(bucket, object, endpoint) if file.nil?
 
           # put multiparts if object's size is over 100m
-          if file.size > 104_857_600
-            return put_multipart_object(bucket, object, file)
-          end
+          return put_multipart_object(bucket, object, file) if file.size > 104_857_600
 
           body = file.read
 
           resource = bucket + '/' + object
-          ret = request(
+          request(
             expects: [200, 203],
             method: 'PUT',
             path: object,
@@ -40,7 +40,7 @@ module Fog
           endpoint = 'http://' + location + '.aliyuncs.com'
 
           resource = bucket + '/' + object
-          ret = request(
+          request(
             expects: [200, 203],
             method: 'PUT',
             path: object,
@@ -49,16 +49,16 @@ module Fog
             body: body,
             endpoint: endpoint
           )
-      end
+        end
 
         def put_folder(bucket, folder, endpoint)
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
           path = folder + '/'
           resource = bucket + '/' + folder + '/'
-          ret = request(
+          request(
             expects: [200, 203],
             method: 'PUT',
             path: path,
@@ -74,19 +74,14 @@ module Fog
 
           # find the right uploadid
           uploads = list_multipart_uploads(bucket, endpoint)
-          if nil != uploads
-            upload = uploads.find { |tmpupload| tmpupload['Key'][0] == object }
-          else
-            upload = nil
-          end
+          upload = (uploads&.find { |tmpupload| tmpupload['Key'][0] == object })
 
-          parts = nil
           uploadedSize = 0
           start_partNumber = 1
-          if nil != upload
+          if !upload.nil?
             uploadId = upload['UploadId'][0]
             parts = list_parts(bucket, object, endpoint, uploadId)
-            if (nil != parts) && !parts.empty?
+            if !parts.nil? && !parts.empty?
               if parts[-1]['Size'][0].to_i != 5_242_880
                 # the part is the last one, if its size is over 5m, then finish this upload
                 complete_multipart_upload(bucket, object, endpoint, uploadId)
@@ -117,7 +112,7 @@ module Fog
         end
 
         def initiate_multipart_upload(bucket, object, endpoint)
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
@@ -131,17 +126,17 @@ module Fog
             resource: resource,
             endpoint: endpoint
           )
-          uploadid = XmlSimple.xml_in(ret.data[:body])['UploadId'][0]
+          XmlSimple.xml_in(ret.data[:body])['UploadId'][0]
         end
 
         def upload_part(bucket, object, endpoint, partNumber, uploadId, body)
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
           path = object + '?partNumber=' + partNumber + '&uploadId=' + uploadId
           resource = bucket + '/' + path
-          ret = request(
+          request(
             expects: [200, 203],
             method: 'PUT',
             path: path,
@@ -153,7 +148,7 @@ module Fog
         end
 
         def complete_multipart_upload(bucket, object, endpoint, uploadId)
-          if nil == endpoint
+          if endpoint.nil?
             location = get_bucket_location(bucket)
             endpoint = 'http://' + location + '.aliyuncs.com'
           end
@@ -168,7 +163,7 @@ module Fog
 
           path = object + '?uploadId=' + uploadId
           resource = bucket + '/' + path
-          ret = request(
+          request(
             expects: 200,
             method: 'POST',
             path: path,
@@ -179,11 +174,6 @@ module Fog
           )
         end
       end
-
-      class Mock
-        def put_object(object, file = nil, options = {})
-        end
-      end
     end
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun/storage.rb 0.3.2-2/lib/fog/aliyun/storage.rb
--- 0.2.0-1/lib/fog/aliyun/storage.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/storage.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,19 +1,30 @@
+# frozen_string_literal: true
+
 require 'xmlsimple'
 
 module Fog
   module Storage
     class Aliyun < Fog::Service
+      DEFAULT_REGION = 'cn-hangzhou'
+
+      DEFAULT_SCHEME = 'http'
+      DEFAULT_SCHEME_PORT = {
+        'http' => 80,
+        'https' => 443
+      }.freeze
+
       recognizes :aliyun_oss_endpoint,
                  :aliyun_oss_location,
-                 :aliyun_oss_bucket
-      requires   :aliyun_accesskey_id,
-                 :aliyun_accesskey_secret
+                 :aliyun_region_id
+      requires :aliyun_accesskey_id,
+               :aliyun_accesskey_secret,
+               :aliyun_oss_bucket
 
       model_path 'fog/aliyun/models/storage'
-      model       :directory
-      collection  :directories
-      model       :file
-      collection  :files
+      model :directory
+      collection :directories
+      model :file
+      collection :files
 
       request_path 'fog/aliyun/requests/storage'
       request :copy_object
@@ -37,9 +48,9 @@ module Fog
         # 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',
@@ -55,32 +66,35 @@ module Fog
         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_accesskey_id     = options[:aliyun_accesskey_id]
+          @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]
+          @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
+
+          @aliyun_oss_endpoint = "#{DEFAULT_SCHEME}://#{endpoint}" unless endpoint.start_with?(DEFAULT_SCHEME)
+
           uri = URI.parse(@aliyun_oss_endpoint)
-          @host   = uri.host
-          @path   = uri.path
-          @port   = uri.port
-          @scheme = uri.scheme
+          @host = uri.host
+          @path = uri.path
+          @scheme = uri.scheme || DEFAULT_SCHEME
+          @port = uri.port || DEFAULT_SCHEME_PORT[@scheme]
 
           @persistent = options[:persistent] || false
         end
@@ -89,6 +103,15 @@ module Fog
           @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
@@ -97,14 +120,14 @@ module Fog
           endpoint = params[:endpoint]
           if endpoint
             uri = URI.parse(endpoint)
-            host   = uri.host
-            path   = uri.path
-            port   = uri.port
+            host = uri.host
+            path = uri.path
+            port = uri.port
             scheme = uri.scheme
           else
-            host   = @host
-            path   = @path
-            port   = @port
+            host = @host
+            path = @path
+            port = @port
             scheme = @scheme
           end
 
@@ -120,10 +143,8 @@ module Fog
 
           begin
             headers = ''
-            if params[:headers]
-              params[:headers].each do |k, v|
-                headers += "#{k}:#{v}\n" if k != 'Range'
-              end
+            params[:headers]&.each do |k, v|
+              headers += "#{k}:#{v}\n" if k != 'Range'
             end
             signature = sign(method, date, contentType, params[:resource], headers)
             response = @connection.request(params.merge(headers: {
@@ -139,7 +160,7 @@ module Fog
                     Fog::Storage::Aliyun::NotFound.slurp(error)
                   else
                     error
-              end
+                  end
           end
 
           response
@@ -155,22 +176,14 @@ module Fog
                                     '/'
                                   end
 
-          canonicalizedOSSHeaders = if headers
-                                      headers
-                                    else
-                                      ''
-                                    end
-
-          contentTypeStr = if contentType
-                             contentType
-                           else
-                             ''
-                           end
+          canonicalizedOSSHeaders = headers || ''
+
+          contentTypeStr = contentType || ''
 
           stringToSign = method + "\n" + contentmd5 + "\n" + contentTypeStr + "\n" + date + "\n" + canonicalizedOSSHeaders + canonicalizedResource
 
-          digVer =  OpenSSL::Digest.new('sha1')
-          digest =  OpenSSL::HMAC.digest(digVer, @aliyun_accesskey_secret, stringToSign)
+          digVer = OpenSSL::Digest.new('sha1')
+          digest = OpenSSL::HMAC.digest(digVer, @aliyun_accesskey_secret, stringToSign)
           signature = Base64.encode64(digest)
           signature[-1] = ''
 
@@ -180,28 +193,13 @@ module Fog
 
       class Mock
         def initialize(options = {})
-          @aliyun_oss_endpoint     = options[:aliyun_oss_endpoint]
-          @aliyun_oss_location     = options[:aliyun_oss_location]
-          @aliyun_accesskey_id     = options[:aliyun_accesskey_id]
+          @aliyun_oss_endpoint = options[:aliyun_oss_endpoint]
+          @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_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?
+          @aliyun_oss_bucket = options[:aliyun_oss_bucket]
 
           @connection_options = options[:connection_options] || {}
-
-          # uri = URI.parse(@aliyun_oss_endpoint)
-          # @host   = uri.host
-          # @path   = uri.path
-          # @port   = uri.port
-          # @scheme = uri.scheme
-
-          # @persistent = options[:persistent] || false
         end
       end
     end
diff -pruN 0.2.0-1/lib/fog/aliyun/version.rb 0.3.2-2/lib/fog/aliyun/version.rb
--- 0.2.0-1/lib/fog/aliyun/version.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun/version.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,5 +1,7 @@
+# frozen_string_literal: true
+
 module Fog
   module Aliyun
-    VERSION = '0.2.0'.freeze
+    VERSION = '0.3.2'
   end
 end
diff -pruN 0.2.0-1/lib/fog/aliyun.rb 0.3.2-2/lib/fog/aliyun.rb
--- 0.2.0-1/lib/fog/aliyun.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/aliyun.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,14 +1,16 @@
+# frozen_string_literal: true
+
 require 'fog/core'
 require 'fog/json'
 require 'fog/aliyun/version'
 
 module Fog
   module Compute
-    ret = autoload :Aliyun, 'fog/aliyun/compute'
+    autoload :Aliyun, 'fog/aliyun/compute'
   end
 
   module Storage
-    ret = autoload :Aliyun, 'fog/aliyun/storage'
+    autoload :Aliyun, 'fog/aliyun/storage'
   end
 
   module Aliyun
diff -pruN 0.2.0-1/lib/fog/bin/aliyun.rb 0.3.2-2/lib/fog/bin/aliyun.rb
--- 0.2.0-1/lib/fog/bin/aliyun.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/lib/fog/bin/aliyun.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 class Aliyun < Fog::Bin
   class << self
     def class_for(key)
@@ -13,13 +15,14 @@ class Aliyun < Fog::Bin
 
     def [](service)
       @@connections ||= Hash.new do |hash, key|
-        hash[key] = case key
-                    when :storage
-                      Fog::Logger.warning('Aliyun[:storage] is not recommended, use Storage[:openstack] for portability')
-                      Fog::Storage.new(provider: 'aliyun')
-                    else
-                      raise ArgumentError, "Unrecognized service: #{key.inspect}"
-        end
+        hash[key] =
+          case key
+          when :storage
+            Fog::Logger.warning('Aliyun[:storage] is not recommended, use Storage[:openstack] for portability')
+            Fog::Storage.new(provider: 'aliyun')
+          else
+            raise ArgumentError, "Unrecognized service: #{key.inspect}"
+          end
       end
       @@connections[service]
     end
diff -pruN 0.2.0-1/Rakefile 0.3.2-2/Rakefile
--- 0.2.0-1/Rakefile	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/Rakefile	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'bundler/gem_tasks'
 require 'rspec/core/rake_task'
 
diff -pruN 0.2.0-1/README.md 0.3.2-2/README.md
--- 0.2.0-1/README.md	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/README.md	2018-06-22 23:00:57.000000000 +0000
@@ -32,9 +32,7 @@ Since it's a bad practice to have your c
 default:
   :aliyun_accesskey_id:     <YOUR_ACCESS_KEY_ID>,
   :aliyun_accesskey_secret: <YOUR_SECRET_ACCESS_KEY>,
-  :aliyun_oss_endpoint:     <YOUR_OSS_ENDPOINT>,
-  :aliyun_oss_location:     <YOUR_OSS_LOACTION>,
-  :aliyun_oss_bucket:       <YOUR_OSS_BUCKET>
+  :aliyun_region_id:        <YOUR_TARGET_REGION>
 ```
 
 ### Connecting to OSS
@@ -48,12 +46,17 @@ opt = {
   :provider                => 'aliyun',
   :aliyun_accesskey_id     => <YOUR_ACCESS_KEY_ID>,
   :aliyun_accesskey_secret => <YOUR_SECRET_ACCESS_KEY>,
-  :aliyun_oss_endpoint     => <YOUR_OSS_ENDPOINT>,
-  :aliyun_oss_location     => <YOUR_OSS_LOACTION>,
   :aliyun_oss_bucket       => <YOUR_OSS_BUCKET>,
+  :aliyun_region_id        => <YOUR_TARGET_REGION>,
+  :aliyun_oss_endpoint     => <YOUR_OSS_ENDPOINT>,
 }
 conn = Fog::Storage.new(opt)
 ```
+**-> Note:** `:aliyun_region_id` is optional and  default to "cn-hangzhou".
+**-> Note:** `:aliyun_oss_endpoint` is optional. If it is not specified, it will be generated automatically by `:aliyun_region_id`.
+Its basic format is "oss-<region-id>.aliyuncs.com" and with default schema "http" and default port "80".
+If you want to use https or 443 port, you can use a format "<schema>://oss-<region-id>.aliyuncs.com:<port>".
+
 
 ## Fog::Aliyun Abstractions
 
diff -pruN 0.2.0-1/.rubocop_todo.yml 0.3.2-2/.rubocop_todo.yml
--- 0.2.0-1/.rubocop_todo.yml	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/.rubocop_todo.yml	2018-06-22 23:00:57.000000000 +0000
@@ -1,6 +1,6 @@
 # This configuration was generated by
 # `rubocop --auto-gen-config`
-# on 2016-05-12 13:44:44 +0800 using RuboCop version 0.40.0.
+# on 2018-06-22 19:29:12 -0300 using RuboCop version 0.57.2.
 # The point is for the user to remove these configuration records
 # one by one as the offenses are removed from the code base.
 # Note that changes in the inspected code, or installation of new
@@ -13,20 +13,6 @@ Lint/AssignmentInCondition:
     - 'lib/fog/aliyun/requests/compute/create_server.rb'
     - 'lib/fog/aliyun/requests/compute/delete_server.rb'
 
-# Offense count: 1
-# Cop supports --auto-correct.
-# Configuration parameters: AlignWith, SupportedStyles, AutoCorrect.
-# SupportedStyles: start_of_line, def
-Lint/DefEndAlignment:
-  Enabled: false
-
-# Offense count: 5
-# Cop supports --auto-correct.
-# Configuration parameters: AlignWith, SupportedStyles, AutoCorrect.
-# SupportedStyles: keyword, variable, start_of_line
-Lint/EndAlignment:
-  Enabled: false
-
 # Offense count: 4
 Lint/RandOne:
   Exclude:
@@ -35,19 +21,19 @@ Lint/RandOne:
     - 'lib/fog/aliyun/requests/compute/list_servers.rb'
     - 'lib/fog/aliyun/requests/compute/list_vrouters.rb'
 
-# Offense count: 127
-Lint/UnderscorePrefixedVariableName:
-  Enabled: false
-
 # Offense count: 1
 Lint/UnreachableCode:
   Exclude:
     - 'lib/fog/aliyun/models/storage/directory.rb'
 
-# Offense count: 38
+# Offense count: 26
+Lint/UriEscapeUnescape:
+  Enabled: false
+
+# Offense count: 37
 Lint/UselessAssignment:
   Exclude:
-    - 'lib/fog/aliyun.rb'
+    - 'lib/fog/aliyun/requests/compute/create_server.rb'
     - 'lib/fog/aliyun/requests/compute/list_disks.rb'
     - 'lib/fog/aliyun/requests/compute/list_security_groups.rb'
     - 'lib/fog/aliyun/requests/storage/delete_object.rb'
@@ -62,30 +48,17 @@ Lint/UselessAssignment:
     - 'lib/fog/aliyun/requests/storage/put_object.rb'
     - 'lib/fog/aliyun/storage.rb'
 
-# Offense count: 78
-Metrics/AbcSize:
-  Max: 100
-
-# Offense count: 5
+# Offense count: 7
 # Configuration parameters: CountComments.
 Metrics/ClassLength:
   Max: 154
 
-# Offense count: 18
-Metrics/CyclomaticComplexity:
-  Max: 15
-
-# Offense count: 257
-# Configuration parameters: AllowHeredoc, AllowURI, URISchemes.
+# Offense count: 87
+# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
 # URISchemes: http, https
 Metrics/LineLength:
   Max: 247
 
-# Offense count: 110
-# Configuration parameters: CountComments.
-Metrics/MethodLength:
-  Max: 97
-
 # Offense count: 1
 # Configuration parameters: CountKeywordArgs.
 Metrics/ParameterLists:
@@ -95,20 +68,45 @@ Metrics/ParameterLists:
 Metrics/PerceivedComplexity:
   Max: 19
 
+# Offense count: 7
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: snake_case, camelCase
+Naming/MethodName:
+  Exclude:
+    - 'lib/fog/aliyun/compute.rb'
+    - 'lib/fog/aliyun/requests/storage/get_bucket.rb'
+
+# Offense count: 48
+# Configuration parameters: MinNameLength, AllowNamesEndingInNumbers, AllowedNames, ForbiddenNames.
+# AllowedNames: io, id, to, by, on, in, at
+Naming/UncommunicativeMethodParamName:
+  Enabled: false
+
+# Offense count: 5
+Performance/Caller:
+  Exclude:
+    - 'lib/fog/aliyun/models/compute/images.rb'
+    - 'lib/fog/aliyun/models/compute/snapshots.rb'
+    - 'lib/fog/aliyun/models/compute/volumes.rb'
+    - 'lib/fog/aliyun/models/compute/vpcs.rb'
+    - 'lib/fog/aliyun/models/compute/vrouters.rb'
+
 # Offense count: 1
 Style/ClassVars:
   Exclude:
     - 'lib/fog/bin/aliyun.rb'
 
-# Offense count: 138
-Style/Documentation:
-  Enabled: false
-
 # Offense count: 7
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: for, each
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: each, for
 Style/For:
-  Enabled: false
+  Exclude:
+    - 'lib/fog/aliyun/models/storage/files.rb'
+    - 'lib/fog/aliyun/requests/compute/list_images.rb'
+    - 'lib/fog/aliyun/requests/compute/list_route_tables.rb'
+    - 'lib/fog/aliyun/requests/compute/list_servers.rb'
+    - 'lib/fog/aliyun/requests/compute/list_vrouters.rb'
+    - 'lib/fog/aliyun/requests/storage/put_object.rb'
 
 # Offense count: 4
 # Configuration parameters: AllowedVariables.
@@ -119,12 +117,21 @@ Style/GlobalVars:
     - 'lib/fog/aliyun/models/compute/vrouter.rb'
     - 'lib/fog/aliyun/models/compute/vswitch.rb'
 
-# Offense count: 2
+# Offense count: 11
 # Configuration parameters: MinBodyLength.
 Style/GuardClause:
   Exclude:
+    - 'lib/fog/aliyun/models/compute/security_groups.rb'
+    - 'lib/fog/aliyun/models/compute/snapshots.rb'
+    - 'lib/fog/aliyun/models/compute/volumes.rb'
+    - 'lib/fog/aliyun/models/storage/file.rb'
+    - 'lib/fog/aliyun/requests/compute/delete_security_group.rb'
+    - 'lib/fog/aliyun/requests/compute/delete_server.rb'
     - 'lib/fog/aliyun/requests/compute/delete_vpc.rb'
+    - 'lib/fog/aliyun/requests/compute/delete_vpn_connection.rb'
+    - 'lib/fog/aliyun/requests/compute/delete_vpn_customergateway.rb'
     - 'lib/fog/aliyun/requests/compute/delete_vswitch.rb'
+    - 'lib/fog/aliyun/requests/compute/list_security_group_rules.rb'
 
 # Offense count: 2
 Style/IdenticalConditionalBranches:
@@ -136,14 +143,8 @@ Style/IfInsideElse:
   Exclude:
     - 'lib/fog/aliyun/models/compute/security_group_rule.rb'
 
-# Offense count: 4
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: snake_case, camelCase
-Style/MethodName:
-  Enabled: false
-
-# Offense count: 741
-# Configuration parameters: EnforcedStyle, SupportedStyles.
-# SupportedStyles: snake_case, camelCase
-Style/VariableName:
-  Enabled: false
+# Offense count: 2
+Style/MultipleComparison:
+  Exclude:
+    - 'lib/fog/aliyun/requests/storage/get_object_http_url.rb'
+    - 'lib/fog/aliyun/requests/storage/get_object_https_url.rb'
diff -pruN 0.2.0-1/.rubocop.yml 0.3.2-2/.rubocop.yml
--- 0.2.0-1/.rubocop.yml	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/.rubocop.yml	2018-06-22 23:00:57.000000000 +0000
@@ -1,5 +1,35 @@
-AllCops:
-  Exclude:
-    - bin/**/*
+inherit_from: .rubocop_todo.yml
 
-# inherit_from: .rubocop_todo.yml
+Style/Documentation:
+  Enabled: false
+
+Metrics/MethodLength:
+  Enabled: false
+
+Metrics/AbcSize:
+  Enabled: false
+
+Metrics/LineLength:
+  Max: 120
+
+Metrics/BlockLength:
+  Enabled: false
+
+Layout/ExtraSpacing:
+  AllowForAlignment: false
+  ForceEqualSignAlignment: false
+
+Style/ExpandPathArguments:
+  Enabled: false
+
+Metrics/CyclomaticComplexity:
+  Enabled: false
+
+Naming/VariableName:
+  Enabled: false
+
+Lint/UnderscorePrefixedVariableName:
+  Enabled: false
+
+Metrics/LineLength:
+  Enabled: false
\ No newline at end of file
diff -pruN 0.2.0-1/.ruby-version 0.3.2-2/.ruby-version
--- 0.2.0-1/.ruby-version	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/.ruby-version	2018-06-22 23:00:57.000000000 +0000
@@ -1 +1 @@
-2.4
+2.5.1
diff -pruN 0.2.0-1/spec/fog/aliyun_spec.rb 0.3.2-2/spec/fog/aliyun_spec.rb
--- 0.2.0-1/spec/fog/aliyun_spec.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/spec/fog/aliyun_spec.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,3 +1,5 @@
+# frozen_string_literal: true
+
 require 'spec_helper'
 
 describe Fog::Aliyun do
diff -pruN 0.2.0-1/spec/spec_helper.rb 0.3.2-2/spec/spec_helper.rb
--- 0.2.0-1/spec/spec_helper.rb	2017-07-21 18:06:02.000000000 +0000
+++ 0.3.2-2/spec/spec_helper.rb	2018-06-22 23:00:57.000000000 +0000
@@ -1,2 +1,4 @@
+# frozen_string_literal: true
+
 $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
 require 'fog/aliyun'
