oneaccess 1.0.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 82306ca46cc7a7e935b6529372830fb81a21604c
4
- data.tar.gz: 4986da59b1bd7c098d24b397c445d254ec318c58
3
+ metadata.gz: 839afdde8249236a6efc2785eea68230f972507b
4
+ data.tar.gz: c178bab91d1fa090d03220d14c0370a26191e72f
5
5
  SHA512:
6
- metadata.gz: 56c4dc41834ef5daeb61fa09d3b44a03609a7d9266556819cede79addf5f48b59eedfb12f23a70e8c149957734a911ea44c984dcf0f9de478d50f2e3f998045f
7
- data.tar.gz: fdfa80e8f2a1670b801bcb7f3bb979f799c523eb839c2fe5e6075e895f7bbae0e33863aa5de895068b3f66250f714afb90890e5133192768762608d6fa320191
6
+ metadata.gz: 740bfae1d5e4545efba40f1a9406ac0451de90bb272ed2dc3c3d3bd2ff9581d744b5126503f953fcc445fddf4d4a4fcf051c87c2e3469ee9df0aa79d1ebc909b
7
+ data.tar.gz: 23a0a0f6e43fa55e59ce5dc30b4ef81b389a3070ae28a3b98c020710a7a7013f3656f15dbe9288cde3e1ca3d238ae83912852c2cfe07ab115bc27bbc9d4c985c
data/Gemfile.lock CHANGED
@@ -2,9 +2,9 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  oneaccess (0.0.0)
5
+ faraday (~> 0.13)
5
6
  multi_json (~> 1.12.0)
6
7
  representable (~> 3.0.4)
7
- rest-client (~> 2.0.0)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
@@ -20,18 +20,13 @@ GEM
20
20
  declarative-option (0.1.0)
21
21
  diff-lcs (1.3)
22
22
  docile (1.1.5)
23
- domain_name (0.5.20170404)
24
- unf (>= 0.0.5, < 1.0.0)
23
+ faraday (0.15.0)
24
+ multipart-post (>= 1.2, < 3)
25
25
  hashdiff (0.3.5)
26
26
  hirb (0.7.3)
27
- http-cookie (1.0.3)
28
- domain_name (~> 0.5)
29
27
  json (2.1.0)
30
- mime-types (3.1)
31
- mime-types-data (~> 3.2015)
32
- mime-types-data (3.2016.0521)
33
- multi_json (1.12.1)
34
- netrc (0.11.0)
28
+ multi_json (1.12.2)
29
+ multipart-post (2.0.0)
35
30
  parallel (1.12.1)
36
31
  parser (2.5.1.0)
37
32
  ast (~> 2.4.0)
@@ -43,10 +38,6 @@ GEM
43
38
  declarative (< 0.1.0)
44
39
  declarative-option (< 0.2.0)
45
40
  uber (< 0.2.0)
46
- rest-client (2.0.2)
47
- http-cookie (>= 1.0.2, < 2.0)
48
- mime-types (>= 1.16, < 4.0)
49
- netrc (~> 0.8)
50
41
  rspec (3.7.0)
51
42
  rspec-core (~> 3.7.0)
52
43
  rspec-expectations (~> 3.7.0)
@@ -79,9 +70,6 @@ GEM
79
70
  simplecov
80
71
  simplecov-html (0.10.2)
81
72
  uber (0.1.0)
82
- unf (0.1.4)
83
- unf_ext
84
- unf_ext (0.0.7.4)
85
73
  unicode-display_width (1.3.2)
86
74
  webmock (3.0.1)
87
75
  addressable (>= 2.3.6)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "rest-client"
3
+ require "faraday"
4
4
  require "json"
5
5
  require_relative "../response/api_error"
6
6
  require_relative "../error/api_error"
@@ -14,7 +14,7 @@ module ONEAccess
14
14
  end
15
15
 
16
16
  def send_post(method, body)
17
- Http::HttpClient.post(api_url(method), body, content_type: :json)
17
+ Http::HttpClient.post(api_url(method), body, "Content-Type" => "application/json")
18
18
  end
19
19
 
20
20
  def resource_api_path
@@ -19,12 +19,12 @@ module ONEAccess
19
19
  receivedate: receive_date
20
20
  }.reject { |_, v| v.nil? }
21
21
 
22
- resp = send_post("inducements", inducement: params)
23
-
24
- Response::InducementResponse.from_json(resp.body)
22
+ response = send_post("inducements", inducement: params)
23
+ Response::InducementResponse.from_json(response.body)
25
24
  end
26
25
 
27
- def users_details( # rubocop:disable Metrics/MethodLength
26
+ # rubocop:disable Metrics/MethodLength
27
+ def users_details(
28
28
  buy_side_org_id:,
29
29
  provider_id:,
30
30
  contract_status_id: nil,
@@ -35,8 +35,6 @@ module ONEAccess
35
35
  reverse_entitlement_status: nil
36
36
  )
37
37
 
38
- provider_id = comma_separated_values(provider_id)
39
-
40
38
  params = {
41
39
  buysideorgid: buy_side_org_id,
42
40
  contractstatusid: contract_status_id,
@@ -45,12 +43,12 @@ module ONEAccess
45
43
  userreverseentitlementstatus: user_reverse_entitlement_status,
46
44
  vendorid: vendor_id,
47
45
  reverseentitlementstatus: reverse_entitlement_status
48
- }.reject { |_, value| value.nil? }
49
-
50
- resp = send_get("GetProviderUserDetails?providerid=#{provider_id}", params)
46
+ }.compact!
51
47
 
48
+ resp = send_get("GetProviderUserDetails?providerid=#{comma_separated_values(provider_id)}", params)
52
49
  Response::ProvidersUsersDetailsResponse.from_json(resp.body)
53
50
  end
51
+ # rubocop:enable Metrics/MethodLength
54
52
 
55
53
  private
56
54
 
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "logger"
4
+
3
5
  module ONEAccess
4
6
  class Configuration
5
7
  DEFAULT_BASE_URL = "http://ws.oneaccess.io"
@@ -10,6 +12,7 @@ module ONEAccess
10
12
  attr_accessor :base_url
11
13
  attr_accessor :api_key
12
14
  attr_accessor :master_api_key
15
+ attr_writer :logger
13
16
 
14
17
  def base_v1_1_url
15
18
  "#{base_url}#{DEFAULT_BASE_V1_1_PATH}"
@@ -24,6 +27,10 @@ module ONEAccess
24
27
  self.api_key = nil
25
28
  self.master_api_key = nil
26
29
  end
30
+
31
+ def logger
32
+ @logger ||= Logger.new(STDOUT)
33
+ end
27
34
  end
28
35
 
29
36
  reset!
@@ -4,24 +4,85 @@ module ONEAccess
4
4
  module Http
5
5
  class HttpClient
6
6
  class << self
7
- def get(url, params = {})
8
- RestClient.get(url, { params: params }.merge(auth_headers))
9
- rescue RestClient::Exception => e
7
+ DEFAULT_TIMEOUT = 10
8
+
9
+ def get(url, params = {}, headers = {})
10
+ response = connection.get do |request|
11
+ request.url url
12
+ request.params.merge!(params)
13
+ request.headers.merge!(headers)
14
+ end
15
+ handle_response(response)
16
+ rescue Faraday::TimeoutError => e
17
+ raise create_timeout_error(e, url)
18
+ rescue Faraday::Error => e
10
19
  raise create_api_error(e)
11
20
  end
12
21
 
13
22
  def post(url, body, headers = {})
14
- RestClient.post(url, body.to_json, headers.merge(auth_headers))
15
- rescue RestClient::Exception => e
23
+ response = connection.post do |request|
24
+ request.url url
25
+ request.headers.merge!(headers)
26
+ request.body = body.to_json
27
+ end
28
+ handle_response(response)
29
+ rescue Faraday::TimeoutError => e
30
+ raise create_timeout_error(e, url)
31
+ rescue Faraday::Error => e
16
32
  raise create_api_error(e)
17
33
  end
18
34
 
19
35
  private
20
36
 
37
+ def handle_response(response)
38
+ # make sure we have a valid JSON in the response
39
+ if response.headers["Content-Type"] == "application/json"
40
+ begin
41
+ MultiJson.load(response.body)
42
+ rescue MultiJson::ParseError
43
+ raise Error::APIError.new(500, response.code, "Invalid JSON Response:'#{message.body}'")
44
+ end
45
+ end
46
+ response
47
+ end
48
+
49
+ def connection
50
+ Faraday.new(url: Configuration.base_url,
51
+ headers: auth_headers,
52
+ request: { timeout: DEFAULT_TIMEOUT }) do |faraday|
53
+ faraday.response :raise_error
54
+ faraday.response :logger, Configuration.logger, bodies: true do |logger|
55
+ logger.filter(/(Api-Key)([\s:"]*)(.+)(\"{1})/, "[REMOVED]")
56
+ end
57
+ faraday.adapter(detect_adapter)
58
+ end
59
+ end
60
+
61
+ def create_timeout_error(_error, url)
62
+ Error::APIError.new(408, 408, "Timeout #{DEFAULT_TIMEOUT} at #{url}")
63
+ end
64
+
21
65
  def create_api_error(error)
66
+ status = error.response[:status]
67
+ body = error.response[:body]
68
+ headers = error.response[:headers]
69
+ if headers["Content-Type"] == "application/json"
70
+ handle_json_error(body, status)
71
+ else
72
+ Error::APIError.new(status, status, "API Response body:'#{body}'")
73
+ end
74
+ end
75
+
76
+ def handle_json_error(body, status)
22
77
  api_error_data = Response::APIError.new
23
- Response::Representer::APIError.new(api_error_data).from_json(error.http_body)
24
- Error::APIError.new(error.http_code, api_error_data.api_status_code, api_error_data.api_status_message)
78
+ Response::Representer::APIError.new(api_error_data).from_json(body)
79
+ Error::APIError.new(
80
+ status,
81
+ api_error_data.api_status_code,
82
+ api_error_data.api_status_message
83
+ )
84
+ rescue MultiJson::ParseError
85
+ Error::APIError.new(500, 500, "Invalid JSON:'#{body}'")
25
86
  end
26
87
 
27
88
  def auth_headers
@@ -30,6 +91,24 @@ module ONEAccess
30
91
  "Authorization" => "X-One-Access-Master-Api-Key #{Configuration.master_api_key}"
31
92
  }
32
93
  end
94
+
95
+ # Auto-detect the best adapter (HTTP "driver") available, based on libraries
96
+ # loaded by the user, preferring those with persistent connections ("keep-alive") by default
97
+ # rubocop:disable Metrics/MethodLength
98
+ def detect_adapter
99
+ if defined?(::Patron)
100
+ :patron
101
+ elsif defined?(::Typhoeus)
102
+ :typhoeus
103
+ elsif defined?(::HTTPClient)
104
+ :httpclient
105
+ elsif defined?(::Net::HTTP::Persistent)
106
+ :net_http_persistent
107
+ else
108
+ ::Faraday.default_adapter
109
+ end
110
+ end
111
+ # rubocop:enable Metrics/MethodLength
33
112
  end
34
113
  end
35
114
  end
data/oneaccess.gemspec CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "oneaccess"
5
- s.version = "1.0.0"
6
- s.date = "2018-04-23"
5
+ s.version = "1.0.1"
6
+ s.date = "2018-05-07"
7
7
  s.summary = "ONEAccess API wrapper"
8
8
  s.description = "Easily communicate with ONEAccess API"
9
9
  s.homepage = "https://github.com/AlphaExchange/oneaccess-rb"
@@ -24,7 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_development_dependency "simplecov-console"
25
25
  s.add_development_dependency "webmock", "~> 3.0.1"
26
26
 
27
+ s.add_runtime_dependency "faraday", "~> 0.13"
27
28
  s.add_runtime_dependency "multi_json", "~> 1.12.0"
28
29
  s.add_runtime_dependency "representable", "~> 3.0.4"
29
- s.add_runtime_dependency "rest-client", "~> 2.0.0"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oneaccess
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Correia Santos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-23 00:00:00.000000000 Z
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -123,47 +123,47 @@ dependencies:
123
123
  - !ruby/object:Gem::Version
124
124
  version: 3.0.1
125
125
  - !ruby/object:Gem::Dependency
126
- name: multi_json
126
+ name: faraday
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.12.0
131
+ version: '0.13'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.12.0
138
+ version: '0.13'
139
139
  - !ruby/object:Gem::Dependency
140
- name: representable
140
+ name: multi_json
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 3.0.4
145
+ version: 1.12.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 3.0.4
152
+ version: 1.12.0
153
153
  - !ruby/object:Gem::Dependency
154
- name: rest-client
154
+ name: representable
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
157
  - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: 2.0.0
159
+ version: 3.0.4
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
164
  - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: 2.0.0
166
+ version: 3.0.4
167
167
  description: Easily communicate with ONEAccess API
168
168
  email:
169
169
  - alex@alpha-exchange.com