class Aliyun::Services::Base
Attributes
access_key_id[RW]
access_key_secret[RW]
Public Class Methods
new(options)
click to toggle source
# File lib/aliyun/services/base.rb, line 17 def initialize(options) self.access_key_id = options[:access_key_id] self.access_key_secret = options[:access_key_secret] end
Private Class Methods
load_service_action_definitions(service_name)
click to toggle source
# File lib/aliyun/services/base.rb, line 166 def self.load_service_action_definitions(service_name) @@service_action_definitions ||= {} @@service_action_definitions[service_name] ||= Dir["#{api_definition_dir}/#{service_name}/*.yml"].map do |file| File.basename(file, '.yml') end.reduce({}) do |actions, action_name| actions[action_name.to_sym] = Aliyun::Utils.symbolize_hash_keys( YAML::load_file("#{api_definition_dir}/#{service_name}/#{action_name}.yml") ) actions end end
load_service_definition(service_name)
click to toggle source
# File lib/aliyun/services/base.rb, line 158 def self.load_service_definition(service_name) @@service_definition ||= {} @@service_definition[service_name] ||= Aliyun::Utils.symbolize_hash_keys( YAML::load_file("#{api_definition_dir}/#{service_name}.yml") ) end
Public Instance Methods
api_version()
click to toggle source
# File lib/aliyun/services/base.rb, line 63 def api_version service_definition[:version] end
base_url()
click to toggle source
# File lib/aliyun/services/base.rb, line 39 def base_url "#{request_schema}://#{request_host}" end
http_method()
click to toggle source
# File lib/aliyun/services/base.rb, line 71 def http_method 'GET' end
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
# File lib/aliyun/services/base.rb, line 22 def method_missing(method, *args, &block) if service_actions.include?(action = method.to_sym) params = args[0].nil? ? {} : args[0] send_request(action, params) else super end end
name()
click to toggle source
# File lib/aliyun/services/base.rb, line 47 def name self.class::NAME end
request_host()
click to toggle source
# File lib/aliyun/services/base.rb, line 51 def request_host service_definition[:host] end
request_schema()
click to toggle source
# File lib/aliyun/services/base.rb, line 55 def request_schema service_definition[:schema] || Aliyun.config.default_schema || 'https' end
respond_to?(method, include_private = false)
click to toggle source
Calls superclass method
# File lib/aliyun/services/base.rb, line 31 def respond_to?(method, include_private = false) if service_actions.include?(method.to_sym) true else super end end
response_format()
click to toggle source
# File lib/aliyun/services/base.rb, line 59 def response_format service_definition[:format] || Aliyun.config.default_format || 'JSON' end
secure?()
click to toggle source
# File lib/aliyun/services/base.rb, line 43 def secure? request_schema == 'https' end
separator()
click to toggle source
# File lib/aliyun/services/base.rb, line 67 def separator "&" end
service_action_definitions()
click to toggle source
# File lib/aliyun/services/base.rb, line 87 def service_action_definitions self.class.load_service_action_definitions(name) end
service_actions()
click to toggle source
# File lib/aliyun/services/base.rb, line 83 def service_actions service_action_definitions.keys end
service_definition()
click to toggle source
# File lib/aliyun/services/base.rb, line 79 def service_definition self.class.load_service_definition(name) end
signature_method()
click to toggle source
# File lib/aliyun/services/base.rb, line 75 def signature_method Aliyun::SignatureMethods[service_definition[:signature_method]] end
Private Instance Methods
default_params(action)
click to toggle source
# File lib/aliyun/services/base.rb, line 141 def default_params(action) { 'Format' => response_format, 'Version' => api_version, 'Action' => service_action_definitions[action][:action], 'AccessKeyId' => access_key_id, 'Timestamp' => Time.now.utc.iso8601, 'SignatureMethod' => signature_method.name, 'SignatureVersion' => signature_method.version, 'SignatureNonce' => SecureRandom.uuid } end
generate_request_params(action, params)
click to toggle source
# File lib/aliyun/services/base.rb, line 113 def generate_request_params(action, params) params = process_params(action, params) logger.debug params params = params.merge(default_params(action)) logger.debug params params['Signature'] = signature_method.generate(params, self) logger.debug params params end
logger()
click to toggle source
# File lib/aliyun/services/base.rb, line 154 def logger Aliyun.config.logger || Logger.new(STDOUT) end
process_data(action, data)
click to toggle source
# File lib/aliyun/services/base.rb, line 133 def process_data(action, data) JSON.parse(data) end
process_error(action, error_code, error_message)
click to toggle source
# File lib/aliyun/services/base.rb, line 137 def process_error(action, error_code, error_message) Aliyun::Errors::Base.new("Response code: #{error_code}, message: #{error_message}") end
process_params(action, params)
click to toggle source
# File lib/aliyun/services/base.rb, line 123 def process_params(action, params) param_definitions = service_action_definitions[action][:parameters] params.reduce({}) do |new_params, (k,v)| unless param_definitions[k].nil? new_params[param_definitions[k][:parameter]] = v end new_params end end
send_request(action, params)
click to toggle source
# File lib/aliyun/services/base.rb, line 93 def send_request(action, params) uri = URI(base_url) uri.query = URI.encode_www_form(generate_request_params(action, params)) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = secure? http.verify_mode = OpenSSL::SSL::VERIFY_NONE request = Net::HTTP::Get.new(uri.request_uri) logger.debug uri.request_uri response = http.request(request) case response when Net::HTTPSuccess return process_data(action, response.body) else raise process_error(action, response.code, response.body) end end