blackbook_client 0.1.6 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0783110099725e64738025e82b866b8ec931f6c7df14127470cb7e009788f20
4
- data.tar.gz: 03cc321bd8a086a9524375aa253d87d9fa7a6640e6dfae4f3b66cfe5158f2211
3
+ metadata.gz: a6d4a163c604ddf01c779e2cb4d322526ba0afa761a946f97d31cdfdf6cc7fe9
4
+ data.tar.gz: e6420e605c22211a1e1ac690195e7556fcc6680361622e7706ef0617fb931fe7
5
5
  SHA512:
6
- metadata.gz: 8f0ba156518d25270303373f292a3166ed18bac5b4e2566f524aee2de949965da4097fe808d131e8334a0da1449a0fac12367132ded67eaeffb25a1635ab84b5
7
- data.tar.gz: b2a5b0927df231fcfdca58509f8f11929d7a636d3d117114375087264bbe1781dbc5f3bce22e599a3c9eebe2440a74e0ff23e0fda4b546d918cc5bf37efb37c6
6
+ metadata.gz: 515f6675b02aa459fc822885cdf73434019c58a240ac8f361c9406165afd6a042d62054ee4ab0f7f755578c27433d8eaf777aa067a03c34b7d8923ae4a7de1dd
7
+ data.tar.gz: 6b06de98b0e06adecdbebc3d431e2ef0cbb0e565b24c102be06bc4f1a0f75bde07ce3cd89d30b75f384b6191342182f2f5331bdf6cb5e2a39c7240538e407ddb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- blackbook_client (0.1.6)
4
+ blackbook_client (0.2.0)
5
5
  httparty (~> 0.15)
6
6
 
7
7
  GEM
@@ -54,4 +54,4 @@ DEPENDENCIES
54
54
  webmock (~> 3.3)
55
55
 
56
56
  BUNDLED WITH
57
- 1.16.1
57
+ 1.16.6
@@ -1,3 +1,3 @@
1
1
  class BlackbookClient
2
- VERSION = '0.1.6'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -0,0 +1,15 @@
1
+ module RangeValuesMapper
2
+ def self.map_fields(response)
3
+ return {} unless response&.dig('used_vehicles', 'used_vehicle_list')
4
+ vehicle_range = response['used_vehicles']['used_vehicle_list'][0]
5
+
6
+ return {
7
+ range: {
8
+ xclean: vehicle_range['adjusted_whole_xclean'],
9
+ clean: vehicle_range['adjusted_whole_clean'],
10
+ average: vehicle_range['adjusted_whole_avg'],
11
+ rough: vehicle_range['adjusted_whole_rough']
12
+ }
13
+ }
14
+ end
15
+ end
@@ -0,0 +1,8 @@
1
+ module SpecPdfMapper
2
+ def self.map_fields(response)
3
+ return {} unless file_contents = response['spec_pdf']['file_contents']
4
+ return {
5
+ file_contents: file_contents
6
+ }
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ module UvcMapper
2
+ def self.map_fields(response)
3
+ return {} unless response&.dig('used_vehicles', 'used_vehicle_list')
4
+ vehicle_range = response['used_vehicles']['used_vehicle_list'][0]
5
+
6
+ return {
7
+ uvc: vehicle_range['uvc']
8
+ }
9
+ end
10
+ end
data/lib/rest_client.rb CHANGED
@@ -1,4 +1,6 @@
1
+
1
2
  module RestClient
3
+
2
4
  BASE_URL = 'https://service.blackbookcloud.com'.freeze
3
5
 
4
6
  def headers
@@ -6,6 +8,29 @@ module RestClient
6
8
  { Authorization: "Basic #{token}" }
7
9
  end
8
10
 
11
+ def make_request(method, url, query_params = {})
12
+ return unless [:get].include?(method)
13
+ begin
14
+ response = JSON.parse(HTTParty.send(method, url, headers: headers, query: query_params))
15
+ status = 200
16
+
17
+ if response['error_count'].positive? || message_with_error(response)
18
+ response = { error: response['message_list'][0]['description'] }
19
+ status = 400
20
+ end
21
+
22
+ [response, status]
23
+
24
+ rescue => e
25
+ [ { error: e.to_s }, 500]
26
+ end
27
+ end
28
+
29
+ def message_with_error(response)
30
+ response['message_list'].any? && response['message_list'][0]['type'] == 'Error'
31
+ end
32
+
33
+ # TODO: deprecate this and start using make_request in services as it is used in vin_service and uvc_service
9
34
  def process_response(response, transformer = nil)
10
35
  status = 200
11
36
 
@@ -19,6 +44,7 @@ module RestClient
19
44
  [response, status]
20
45
  end
21
46
 
47
+ # TODO: deprecate and start using mappers lib/mappers as in vin_service and uvc_service
22
48
  def map_fields(response)
23
49
  return {} unless response && response['used_vehicles'] && response['used_vehicles']['used_vehicle_list']
24
50
  vehicle_range = response['used_vehicles']['used_vehicle_list'][0]
data/lib/uvc_service.rb CHANGED
@@ -1,17 +1,37 @@
1
+ require 'mappers/spec_pdf_mapper'
2
+ require 'vin_service'
3
+
1
4
  module UVCService
2
5
  include RestClient
6
+ include SpecPdfMapper
7
+ include VinService
3
8
 
4
9
  VEHICLE_BY_UVC_URL =
5
10
  "#{BASE_URL}/UsedCarWS/UsedCarWS/UsedVehicle/UVC".freeze
6
11
 
12
+ PDF_SPEC_BY_UVC_URL =
13
+ "#{BASE_URL}/UsedCarWS/UsedCarWS/PDFSpecs".freeze
14
+
7
15
  def vehicle_by_uvc(uvc_id, query_params = {})
8
16
  url = "#{VEHICLE_BY_UVC_URL}/#{uvc_id}"
9
17
 
10
- begin
11
- response = HTTParty.get(url, headers: headers, query: query_params)
12
- process_response(JSON.parse(response), :map_fields)
13
- rescue => e
14
- [{ error: e.to_s }, 500]
15
- end
18
+ response = make_request(:get, url, query_params)
19
+ return response unless response.last == 200
20
+ [RangeValuesMapper.map_fields(response.first), response.last]
21
+ end
22
+
23
+ def spec_pdf_data(uvc, query_params = {})
24
+ url = "#{PDF_SPEC_BY_UVC_URL}/#{uvc}"
25
+
26
+ response = make_request(:get, url, query_params)
27
+ return response unless response.last == 200
28
+ [SpecPdfMapper.map_fields(response.first), response.last]
29
+ end
30
+
31
+ # This method is used by web-system to generate vehicle spec pdfs for appraisers
32
+ def pdf_data_by_vin(vin, query_params = {})
33
+ response = uvc_by_vin(vin, query_params)
34
+ return response unless response.last == 200
35
+ spec_pdf_data(response.first[:uvc], query_params)
16
36
  end
17
37
  end
data/lib/vin_service.rb CHANGED
@@ -1,18 +1,27 @@
1
1
  require 'rest_client'
2
+ require 'mappers/uvc_mapper'
3
+ require 'mappers/range_values_mapper'
2
4
 
3
5
  module VinService
4
6
  include RestClient
7
+ include UvcMapper
8
+ include RangeValuesMapper
5
9
 
6
10
  VEHICLE_BY_VIN_URL = "#{BASE_URL}/UsedCarWS/UsedCarWS/UsedVehicle/VIN".freeze
7
11
 
8
12
  def range_by_vin(vin, query_params = {})
9
13
  url = "#{VEHICLE_BY_VIN_URL}/#{vin}"
10
14
 
11
- begin
12
- response = HTTParty.get(url, headers: headers, query: query_params)
13
- process_response(JSON.parse(response), :map_fields)
14
- rescue => e
15
- [{ error: e.to_s }, 500]
16
- end
15
+ response = make_request(:get, url, query_params)
16
+ return response unless response.last == 200
17
+ [RangeValuesMapper.map_fields(response.first), response.last]
18
+ end
19
+
20
+ def uvc_by_vin(vin, query_params = {})
21
+ url = "#{VEHICLE_BY_VIN_URL}/#{vin}"
22
+
23
+ response = make_request(:get, url, query_params)
24
+ return response unless response.last == 200
25
+ [UvcMapper.map_fields(response.first), response.last]
17
26
  end
18
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blackbook_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.6
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Schmeichel
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-29 00:00:00.000000000 Z
11
+ date: 2019-02-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: httparty
@@ -118,6 +118,9 @@ files:
118
118
  - lib/blackbook_client.rb
119
119
  - lib/blackbook_client/version.rb
120
120
  - lib/chromedata_service.rb
121
+ - lib/mappers/range_values_mapper.rb
122
+ - lib/mappers/spec_pdf_mapper.rb
123
+ - lib/mappers/uvc_mapper.rb
121
124
  - lib/rest_client.rb
122
125
  - lib/trade_service.rb
123
126
  - lib/uvc_service.rb
@@ -142,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
145
  version: '0'
143
146
  requirements: []
144
147
  rubyforge_project:
145
- rubygems_version: 2.7.3
148
+ rubygems_version: 2.7.8
146
149
  signing_key:
147
150
  specification_version: 4
148
151
  summary: Blackbook Client