rpc_client 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +8 -0
  3. data/lib/rpc_client.rb +134 -0
  4. metadata +45 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: b8b16241f6144db2eda702bded0b1195f92f27244c142b38dd7001ef23496a63
4
+ data.tar.gz: 5494ba5d25629cb0bbe07ddaa284b94f52b879944caff3318af1b6c6488b8f15
5
+ SHA512:
6
+ metadata.gz: 98391aeac69e88be60751f185ba09755e4f0ea9cba1021e43766158f2c92b7db8cefedde1ddace1591d321093103a8213e4857d0c431a7fec29dffe0057d8cd8
7
+ data.tar.gz: 72ebcb51725728142ec5f2bcdddbde1519c0071d71d352bd41021c06c50cb7b4f1983e4437bb0e6e40985528b64fd70f2505e8f467cc7593ad58e333d17afa94
data/README.md ADDED
@@ -0,0 +1,8 @@
1
+ RPC Client for Ruby
2
+ ===================
3
+
4
+ This is a Client that used by Alibaba Cloud RPC OpenAPI.
5
+
6
+ ## License
7
+
8
+ The Apache License 2.0
data/lib/rpc_client.rb ADDED
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'securerandom'
4
+ require 'base64'
5
+ require 'openssl'
6
+ require 'json'
7
+
8
+ # The AliyunSDK module
9
+ module AliyunSDK
10
+ VERSION = '0.0.1'
11
+
12
+ def replace_repeat_list(target, key, repeat)
13
+ repeat.each_with_index do |item, index|
14
+ if item&.instance_of?(Hash)
15
+ item.each_key do |k|
16
+ target["#{key}.#{index.next}.#{k}"] = item[k].to_s
17
+ end
18
+ else
19
+ target["#{key}.#{index.next}"] = item.to_s
20
+ end
21
+ end
22
+ target
23
+ end
24
+
25
+ def self.flat_params(params)
26
+ target = {}
27
+ params.each do |key, value|
28
+ if value.instance_of?(Array)
29
+ replace_repeat_list(target, key, value)
30
+ else
31
+ target[key.to_s] = value
32
+ end
33
+ end
34
+ target
35
+ end
36
+
37
+ def self.canonicalize(normalized)
38
+ normalized.map { |element| "#{element.first}=#{element.last}" }.join('&')
39
+ end
40
+
41
+ def self.normalize(params)
42
+ flat_params(params)
43
+ .sort
44
+ .to_h
45
+ .map { |key, value| [encode(key), encode(value)] }
46
+ end
47
+
48
+ def self.encode(string)
49
+ encoded = CGI.escape string
50
+ encoded.gsub(/[\+]/, '%20')
51
+ end
52
+
53
+ # The RPCClient class
54
+ class RPCClient
55
+ attr_accessor :__access_key_id, :__access_key_secret, :__region_id,
56
+ :__endpoint, :__version, :credential, :codes
57
+
58
+ def initialize(config)
59
+ self.__access_key_id = config[:accessKeyId]
60
+ self.__access_key_secret = config[:accessKeySecret]
61
+ self.__version = config[:apiVersion]
62
+ self.credential = config[:credential]
63
+ self.__endpoint = config[:endpoint]
64
+ self.__regionId = config[:regionId]
65
+ self.codes = Set.new [200, '200', 'OK', 'Success']
66
+ codes.merge config[:codes] if config[:codes]
67
+ end
68
+
69
+ def __get_timestamp
70
+ Time.now.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
71
+ end
72
+
73
+ def __get_nonce
74
+ SecureRandom.hex(16)
75
+ end
76
+
77
+ def __get_access_key_id
78
+ __accessKeyId
79
+ end
80
+
81
+ def __get_access_key_secret
82
+ __accessKeySecret
83
+ end
84
+
85
+ def __get_endpoint(product, region_id)
86
+ return __endpoint if __endpoint
87
+
88
+ "#{product}.#{region_id}.aliyuncs.com"
89
+ end
90
+
91
+ def __is5xx(response)
92
+ code = response.code.to_i
93
+ code >= 500 && code < 600
94
+ end
95
+
96
+ def __has_error(body)
97
+ code = body['Code']
98
+ code && !codes.include?(code)
99
+ end
100
+
101
+ def __json(response)
102
+ JSON.parse(response.body)
103
+ end
104
+
105
+ def __query(query)
106
+ target = {}
107
+ query.each do |key, value|
108
+ if value.instance_of?(Array)
109
+ replace_repeat_list(target, key, value)
110
+ else
111
+ target[key] = value.to_s
112
+ end
113
+ end
114
+ target
115
+ end
116
+
117
+ def __default_number(input, default)
118
+ input || default
119
+ end
120
+
121
+ def __default(input, default)
122
+ input || default
123
+ end
124
+
125
+ def __get_signature(request, access_key_secret)
126
+ method = (request[:method] || 'GET').upcase
127
+ normalized = AliyunSDK.normalize(request['query'])
128
+ canonicalized = AliyunSDK.canonicalize(normalized)
129
+ string2sign = "#{method}&#{AliyunSDK.encode('/')}&#{AliyunSDK.encode(canonicalized)}"
130
+ key = access_key_secret + '&'
131
+ Base64.encode64(OpenSSL::HMAC.digest('sha1', key, string2sign)).strip
132
+ end
133
+ end
134
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rpc_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Alibaba Cloud SDK
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-07-22 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: RPC Core SDK for Ruby
14
+ email:
15
+ - sdk-team@alibabacloud.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.md
21
+ - lib/rpc_client.rb
22
+ homepage: http://www.alibabacloud.com/
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.0.4
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: RPC Core SDK for Ruby
45
+ test_files: []