blackbook_client 0.1.6 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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