awis-sdk-ruby 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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