awis-sdk-ruby 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Awis
2
4
  module Utils
3
5
  module Extra
4
6
  def camelize(string)
5
- string.split("_").map { |w| w.capitalize }.join
7
+ string.split('_').map(&:capitalize).join
6
8
  end
7
9
 
8
10
  module_function :camelize
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Hash
2
4
  def deep_find(key, object = self, found = nil)
3
5
  return object[key] if object.respond_to?(:key?) && object.key?(key)
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Awis
2
4
  module Utils
3
5
  module Variable
4
6
  def custom_instance_variables(options)
5
7
  options.each do |key, value|
6
- value = (value.class == String && value.empty?) ? nil : value
8
+ value = value.class == String && value.empty? ? nil : value
7
9
 
8
10
  instance_variable_set("@#{key}", value)
9
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Awis
2
4
  module Utils
3
5
  class XML
@@ -11,7 +13,7 @@ module Awis
11
13
 
12
14
  reader.each do |node|
13
15
  if node.node_type == Nokogiri::XML::Reader::TYPE_ELEMENT
14
- if attributes_in_path && node.attributes.size > 0
16
+ if attributes_in_path && !node.attributes.empty?
15
17
  attributes = []
16
18
 
17
19
  node.attributes.sort.each do |name, value|
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Awis
2
- VERSION = "1.0.0"
4
+ VERSION = '1.1.0'
3
5
  end
metadata CHANGED
@@ -1,110 +1,125 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: awis-sdk-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Encore Shao
9
8
  autorequire:
10
9
  bindir: exe
11
10
  cert_chain: []
12
- date: 2017-12-26 00:00:00.000000000 Z
11
+ date: 2018-10-02 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: aws-sigv4
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: multi_xml
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
- - - ! '>='
31
+ - - ">="
20
32
  - !ruby/object:Gem::Version
21
- version: 0.5.0
33
+ version: '0'
22
34
  type: :runtime
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
- - - ! '>='
38
+ - - ">="
28
39
  - !ruby/object:Gem::Version
29
- version: 0.5.0
40
+ version: '0'
30
41
  - !ruby/object:Gem::Dependency
31
42
  name: nokogiri
32
43
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
44
  requirements:
35
- - - ~>
45
+ - - ">="
36
46
  - !ruby/object:Gem::Version
37
- version: 1.6.8
47
+ version: '0'
38
48
  type: :runtime
39
49
  prerelease: false
40
50
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
51
  requirements:
43
- - - ~>
52
+ - - ">="
44
53
  - !ruby/object:Gem::Version
45
- version: 1.6.8
54
+ version: '0'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: minitest
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
- - - ! '>='
59
+ - - ">="
52
60
  - !ruby/object:Gem::Version
53
61
  version: '0'
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
- - - ! '>='
66
+ - - ">="
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: mocha
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
- - - ! '>='
73
+ - - ">="
68
74
  - !ruby/object:Gem::Version
69
75
  version: '0'
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
- - - ! '>='
80
+ - - ">="
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
78
83
  - !ruby/object:Gem::Dependency
79
- name: webmock
84
+ name: pry
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ! '>='
87
+ - - ">="
84
88
  - !ruby/object:Gem::Version
85
89
  version: '0'
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ! '>='
94
+ - - ">="
92
95
  - !ruby/object:Gem::Version
93
96
  version: '0'
94
97
  - !ruby/object:Gem::Dependency
95
- name: pry
98
+ name: rubocop
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ! '>='
101
+ - - ">="
100
102
  - !ruby/object:Gem::Version
101
103
  version: '0'
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ! '>='
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
108
123
  - !ruby/object:Gem::Version
109
124
  version: '0'
110
125
  description: Ruby - Amazon Alexa Web Information Service Library (AWIS)
@@ -114,8 +129,9 @@ executables: []
114
129
  extensions: []
115
130
  extra_rdoc_files: []
116
131
  files:
117
- - .gitignore
118
- - .travis.yml
132
+ - ".gitignore"
133
+ - ".rubocop.yml"
134
+ - ".travis.yml"
119
135
  - Gemfile
120
136
  - README.md
121
137
  - Rakefile
@@ -146,35 +162,30 @@ files:
146
162
  - lib/awis/utils.rb
147
163
  - lib/awis/utils/extra.rb
148
164
  - lib/awis/utils/hash.rb
149
- - lib/awis/utils/request.rb
150
165
  - lib/awis/utils/variable.rb
151
166
  - lib/awis/utils/xml.rb
152
167
  - lib/awis/version.rb
153
168
  homepage: https://github.com/encoreshao/amazon-awis
154
169
  licenses: []
170
+ metadata: {}
155
171
  post_install_message:
156
172
  rdoc_options: []
157
173
  require_paths:
158
174
  - lib
159
175
  required_ruby_version: !ruby/object:Gem::Requirement
160
- none: false
161
176
  requirements:
162
- - - ! '>='
177
+ - - ">="
163
178
  - !ruby/object:Gem::Version
164
- version: 1.9.3
179
+ version: '0'
165
180
  required_rubygems_version: !ruby/object:Gem::Requirement
166
- none: false
167
181
  requirements:
168
- - - ! '>='
182
+ - - ">="
169
183
  - !ruby/object:Gem::Version
170
184
  version: '0'
171
- segments:
172
- - 0
173
- hash: -1995395337547775
174
185
  requirements: []
175
186
  rubyforge_project:
176
- rubygems_version: 1.8.23.2
187
+ rubygems_version: 2.6.11
177
188
  signing_key:
178
- specification_version: 3
189
+ specification_version: 4
179
190
  summary: Ruby - Amazon Alexa Web Information Service Library (AWIS)
180
191
  test_files: []
@@ -1,153 +0,0 @@
1
- require "cgi"
2
- require "base64"
3
- require "openssl"
4
- require "uri"
5
- require "net/https"
6
- require "time"
7
- require 'pry'
8
-
9
- module Awis
10
- module Utils
11
- module Request
12
- def signature_key(key, date_stamp, region_name, service_name)
13
- kDate = openssl_hmac_digest(encryption_method, aws4 + key, date_stamp)
14
- kRegion = openssl_hmac_digest(encryption_method, kDate, region_name)
15
- kService = openssl_hmac_digest(encryption_method, kRegion, service_name)
16
- kSigning = openssl_hmac_digest(encryption_method, kService, aws4_request)
17
- kSigning
18
- end
19
-
20
- # escape str to RFC 3986
21
- def escapeRFC3986(str)
22
- URI.escape(str, /[^A-Za-z0-9\-_.~]/)
23
- end
24
-
25
- def timestamp
26
- Time::now.utc.strftime("%Y%m%dT%H%M%SZ")
27
- end
28
-
29
- def datestamp
30
- Time::now.utc.strftime("%Y%m%d")
31
- end
32
-
33
- def headers
34
- {
35
- "host" => Awis::SERVICE_ENDPOINT,
36
- "x-amz-date" => timestamp
37
- }
38
- end
39
-
40
- def query_str
41
- params.sort.map{|k,v| k + "=" + escapeRFC3986(v.to_s())}.join('&')
42
- end
43
-
44
- def headers_str
45
- headers.sort.map{|k,v| k + ":" + v}.join("\n") + "\n"
46
- end
47
-
48
- def headers_lst
49
- headers.sort.map{|k,v| k}.join(";")
50
- end
51
-
52
- def payload_hash
53
- digest_sha256_hexdigest ""
54
- end
55
-
56
- def canonical_request
57
- "GET" + "\n" + Awis::SERVICE_URI + "\n" + query_str + "\n" + headers_str + "\n" + headers_lst + "\n" + payload_hash
58
- end
59
-
60
- def algorithm
61
- "AWS4-HMAC-SHA256"
62
- end
63
-
64
- def credential_scope
65
- datestamp + "/" + Awis::SERVICE_REGION + "/" + Awis::SERVICE_NAME + "/" + aws4_request
66
- end
67
-
68
- def string_to_sign
69
- algorithm + "\n" + timestamp + "\n" + credential_scope + "\n" + digest_sha256_hexdigest(canonical_request)
70
- end
71
-
72
- def signing_key
73
- signature_key(Awis.config.secret_access_key, datestamp, Awis::SERVICE_REGION, Awis::SERVICE_NAME)
74
- end
75
-
76
- def signature
77
- OpenSSL::HMAC.hexdigest(encryption_method, signing_key, string_to_sign)
78
- end
79
-
80
- def authorization_header
81
- algorithm + " " +
82
- "Credential=" + Awis.config.access_key_id + "/" + credential_scope + ", " +
83
- "SignedHeaders=" + headers_lst + ", " +
84
- "Signature=" + signature;
85
- end
86
-
87
- def uri
88
- URI(url + url_params)
89
- end
90
-
91
- def request
92
- req = Net::HTTP::Get.new(uri.to_s)
93
- req["Accept"] = "application/xml"
94
- req["Content-Type"] = "application/xml"
95
- req["x-amz-date"] = timestamp
96
- req["Authorization"] = authorization_header
97
-
98
- response = Net::HTTP.start(uri.host, uri.port,
99
- use_ssl: uri.scheme == 'https',
100
- ssl_timeout: @timeout,
101
- open_timeout: @open_timeout) { |http|
102
- http.request(req)
103
- }
104
-
105
- response
106
- end
107
-
108
- def handle_response(response)
109
- case response.code.to_i
110
- when 200...300
111
- response
112
- when 300...600
113
- if response.body.nil?
114
- raise ResponseError.new(nil, response)
115
- else
116
- error_message = MultiXml.parse(response.body).deep_find('ErrorCode')
117
- raise ResponseError.new(error_message, response)
118
- end
119
- else
120
- raise ResponseError.new("Unknown code: #{respnse.code}", response)
121
- end
122
- end
123
-
124
- def aws4
125
- "AWS4"
126
- end
127
-
128
- def aws4_request
129
- "aws4_request"
130
- end
131
-
132
- def encryption_method
133
- 'sha256'
134
- end
135
-
136
- def url
137
- protocol + '://' + Awis::SERVICE_HOST + Awis::SERVICE_URI
138
- end
139
-
140
- def url_params
141
- '?' + query_str
142
- end
143
-
144
- def openssl_hmac_digest(method, key, secret)
145
- OpenSSL::HMAC.digest(method, key, secret)
146
- end
147
-
148
- def digest_sha256_hexdigest(key)
149
- Digest::SHA256.hexdigest key
150
- end
151
- end
152
- end
153
- end