whiplash-app 0.6.2 → 0.8.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -2
- data/lib/whiplash/app/connections.rb +52 -5
- data/lib/whiplash/app/signing.rb +5 -1
- data/lib/whiplash/app/version.rb +1 -1
- data/lib/whiplash/app.rb +27 -16
- data/whiplash-app.gemspec +3 -3
- metadata +14 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f264f95fe30e26b24988d6f8db597a349259a79ab9fb446402a3528569112fed
|
4
|
+
data.tar.gz: a07d6c73760ec2d98107b0510c7f7d9b3566a217afe364b2b53e9044eebe940f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34d77d907ea7d03b60483b3fd7f6177e1a9c1d502cef48e27bccc77c8694849ded0a47e9f1155025602c4dcadb78af0753502e0ab46305ad7f411caa32a992ca
|
7
|
+
data.tar.gz: 356479891eb004b6beb00437452ed0b55190176618aff587fb3d5d9370c8689673a2388d1c6ae08e69f4c6472f8c0e134f910e152706aa8e04ac0c6e36143dc3
|
data/.travis.yml
CHANGED
@@ -2,6 +2,8 @@ module Whiplash
|
|
2
2
|
class App
|
3
3
|
module Connections
|
4
4
|
|
5
|
+
PER_PAGE_REQUEST_LIMIT = 50
|
6
|
+
|
5
7
|
def base_app_request(options={})
|
6
8
|
if options[:params][:id]
|
7
9
|
endpoint = [options[:endpoint], options[:params].delete(:id)].join('/')
|
@@ -11,6 +13,7 @@ module Whiplash
|
|
11
13
|
options[:headers] ||= {}
|
12
14
|
options[:headers][:customer_id] ||= customer_id if customer_id
|
13
15
|
options[:headers][:shop_id] ||= shop_id if shop_id
|
16
|
+
options[:headers][:version] ||= 2
|
14
17
|
|
15
18
|
args = [
|
16
19
|
options[:method],
|
@@ -56,6 +59,47 @@ module Whiplash
|
|
56
59
|
end
|
57
60
|
end
|
58
61
|
|
62
|
+
def multi_page_get!(endpoint, params = {}, headers = nil)
|
63
|
+
results = []
|
64
|
+
page = 1
|
65
|
+
params[:per_page] = PER_PAGE_REQUEST_LIMIT
|
66
|
+
response = nil
|
67
|
+
|
68
|
+
loop do
|
69
|
+
partial_results_request = app_request!(
|
70
|
+
method: :get,
|
71
|
+
endpoint: endpoint,
|
72
|
+
params: params,
|
73
|
+
headers: headers
|
74
|
+
)
|
75
|
+
|
76
|
+
if !partial_results_request.success?
|
77
|
+
response = Faraday::Response.new(
|
78
|
+
body: partial_results_request.body,
|
79
|
+
status: partial_results_request.status,
|
80
|
+
method: :get
|
81
|
+
)
|
82
|
+
break
|
83
|
+
end
|
84
|
+
|
85
|
+
results << partial_results_request.body
|
86
|
+
results.flatten!
|
87
|
+
|
88
|
+
page += 1
|
89
|
+
params[:page] = page
|
90
|
+
|
91
|
+
break if partial_results_request.body.size == 0
|
92
|
+
break if partial_results_request.body.size < PER_PAGE_REQUEST_LIMIT
|
93
|
+
end
|
94
|
+
|
95
|
+
response ||= Faraday::Response.new(
|
96
|
+
body: results,
|
97
|
+
status: 200,
|
98
|
+
method: :get
|
99
|
+
)
|
100
|
+
|
101
|
+
end
|
102
|
+
|
59
103
|
def delete(endpoint, params = {}, headers = nil)
|
60
104
|
app_request(method: :delete,
|
61
105
|
endpoint: endpoint,
|
@@ -138,15 +182,18 @@ module Whiplash
|
|
138
182
|
|
139
183
|
def get_context(endpoint)
|
140
184
|
parts = endpoint.split('/').compact
|
141
|
-
return 'member'
|
185
|
+
return 'member' unless (parts.last =~ /\d+/).nil?
|
142
186
|
return 'aggregate' if parts.include?('aggregate')
|
143
187
|
'collection'
|
144
188
|
end
|
145
189
|
|
146
190
|
def sanitize_headers(headers)
|
147
|
-
if headers
|
148
|
-
|
149
|
-
|
191
|
+
return if headers.nil? || headers.empty?
|
192
|
+
out = {}.tap do |hash|
|
193
|
+
headers.each do |k,v|
|
194
|
+
if k.to_s == 'version'
|
195
|
+
hash['Accept-Version'] = "v#{v}"
|
196
|
+
else
|
150
197
|
hash["X-#{k.to_s.upcase.gsub('_','-')}"] = v.to_s
|
151
198
|
end
|
152
199
|
end
|
@@ -155,7 +202,7 @@ module Whiplash
|
|
155
202
|
|
156
203
|
def store_whiplash_error!(error, options={})
|
157
204
|
return unless defined?(Appsignal)
|
158
|
-
options
|
205
|
+
options.transform_keys!(&:to_sym)
|
159
206
|
Appsignal.increment_counter(
|
160
207
|
"whiplash_error",
|
161
208
|
1.0,
|
data/lib/whiplash/app/signing.rb
CHANGED
@@ -15,7 +15,11 @@ module Whiplash
|
|
15
15
|
private
|
16
16
|
|
17
17
|
def request_body(body)
|
18
|
-
|
18
|
+
begin
|
19
|
+
(body.nil? || body.empty?) ? ENV["WHIPLASH_CLIENT_ID"] : body
|
20
|
+
rescue NoMethodError => e
|
21
|
+
ENV["WHIPLASH_CLIENT_ID"]
|
22
|
+
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
data/lib/whiplash/app/version.rb
CHANGED
data/lib/whiplash/app.rb
CHANGED
@@ -19,11 +19,11 @@ module Whiplash
|
|
19
19
|
attr_accessor :customer_id, :shop_id, :token
|
20
20
|
|
21
21
|
def initialize(token=nil, options={})
|
22
|
-
opts = options.with_indifferent_access
|
23
22
|
token ||= cache_store["whiplash_api_token"]
|
24
23
|
@token = format_token(token) unless token.nil?
|
25
24
|
@customer_id = options[:customer_id]
|
26
25
|
@shop_id = options[:shop_id]
|
26
|
+
@api_version = options[:api_version] || 2 # can be 2_1
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.whiplash_api_token
|
@@ -36,8 +36,12 @@ module Whiplash
|
|
36
36
|
OAuth2::Client.new(ENV["WHIPLASH_CLIENT_ID"], ENV["WHIPLASH_CLIENT_SECRET"], site: api_url)
|
37
37
|
end
|
38
38
|
|
39
|
+
def versioned_api_url
|
40
|
+
"api/v#{@api_version}"
|
41
|
+
end
|
42
|
+
|
39
43
|
def connection
|
40
|
-
out = Faraday.new [api_url,
|
44
|
+
out = Faraday.new [api_url, versioned_api_url].join("/") do |conn|
|
41
45
|
conn.request :oauth2, token.token, token_type: "bearer"
|
42
46
|
conn.request :json
|
43
47
|
conn.response :json, :content_type => /\bjson$/
|
@@ -52,34 +56,41 @@ module Whiplash
|
|
52
56
|
end
|
53
57
|
|
54
58
|
def refresh_token!
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
+
case ENV["WHIPLASH_CLIENT_SCOPE"]
|
60
|
+
when /app_(manage|read)/
|
61
|
+
begin
|
62
|
+
access_token = client.client_credentials.get_token(scope: ENV["WHIPLASH_CLIENT_SCOPE"])
|
63
|
+
new_token = access_token.to_hash
|
64
|
+
cache_store["whiplash_api_token"] = new_token
|
65
|
+
rescue URI::InvalidURIError => e
|
66
|
+
raise StandardError, "The provide URL (#{ENV["WHIPLASH_API_URL"]}) is not valid"
|
67
|
+
end
|
59
68
|
else
|
69
|
+
raise StandardError, "You must request an access token before you can refresh it" if token.nil?
|
70
|
+
raise StandardError, "Token must either be a Hash or an OAuth2::AccessToken" unless token.is_a?(OAuth2::AccessToken)
|
60
71
|
access_token = token.refresh!
|
61
72
|
end
|
62
73
|
self.token = access_token
|
63
74
|
end
|
64
75
|
|
65
76
|
def token_expired?
|
66
|
-
return token.expired? unless token.
|
77
|
+
return token.expired? unless token.nil?
|
67
78
|
return true unless cache_store.key?("whiplash_api_token")
|
68
|
-
return true if cache_store["whiplash_api_token"].
|
79
|
+
return true if cache_store["whiplash_api_token"].nil?
|
80
|
+
return true if cache_store["whiplash_api_token"].empty?
|
69
81
|
false
|
70
82
|
end
|
71
83
|
|
72
84
|
private
|
73
85
|
def format_token(oauth_token)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
end
|
81
|
-
oauth_token = OAuth2::AccessToken.from_hash(client, oauth_token)
|
86
|
+
return oauth_token if oauth_token.is_a?(OAuth2::AccessToken)
|
87
|
+
raise StandardError, "Token must either be a Hash or an OAuth2::AccessToken" unless oauth_token.is_a?(Hash)
|
88
|
+
oauth_token['expires'] = oauth_token['expires'].to_s # from_hash expects 'true'
|
89
|
+
if oauth_token.has_key?('token')
|
90
|
+
oauth_token['access_token'] = oauth_token['token']
|
91
|
+
oauth_token.delete('token')
|
82
92
|
end
|
93
|
+
oauth_token = OAuth2::AccessToken.from_hash(client, oauth_token)
|
83
94
|
end
|
84
95
|
|
85
96
|
end
|
data/whiplash-app.gemspec
CHANGED
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "oauth2", "~>
|
22
|
-
spec.add_dependency "faraday_middleware", "~>
|
21
|
+
spec.add_dependency "oauth2", "~> 2.0.4"
|
22
|
+
spec.add_dependency "faraday_middleware", "~> 1.2.0"
|
23
23
|
spec.add_dependency "moneta", "~> 0.8.0"
|
24
24
|
|
25
|
-
spec.add_development_dependency "bundler", "
|
25
|
+
spec.add_development_dependency "bundler", ">= 2.2"
|
26
26
|
spec.add_development_dependency "rake", ">= 12.3.3"
|
27
27
|
spec.add_development_dependency "rspec", "~> 3.0"
|
28
28
|
spec.add_development_dependency "pry" , '~> 0.12.2'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: whiplash-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Don Sullivan, Mark Dickson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: oauth2
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 2.0.4
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 2.0.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: faraday_middleware
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.2.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: moneta
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.2'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -138,7 +138,7 @@ files:
|
|
138
138
|
homepage: https://github.com/whiplashmerch/whiplash-app
|
139
139
|
licenses: []
|
140
140
|
metadata: {}
|
141
|
-
post_install_message:
|
141
|
+
post_install_message:
|
142
142
|
rdoc_options: []
|
143
143
|
require_paths:
|
144
144
|
- lib
|
@@ -153,9 +153,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
153
153
|
- !ruby/object:Gem::Version
|
154
154
|
version: '0'
|
155
155
|
requirements: []
|
156
|
-
|
157
|
-
|
158
|
-
signing_key:
|
156
|
+
rubygems_version: 3.0.9
|
157
|
+
signing_key:
|
159
158
|
specification_version: 4
|
160
159
|
summary: this gem provides connectivity to the Whiplash API for authentication and
|
161
160
|
REST requests.
|