edmunds 0.0.5 → 0.0.6
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/lib/edmunds.rb +2 -0
- data/lib/edmunds/api.rb +4 -4
- data/lib/edmunds/api/request.rb +76 -0
- data/lib/edmunds/vehicle.rb +24 -1
- data/lib/edmunds/vehicle/specification/color.rb +25 -2
- data/lib/edmunds/vehicle/specification/engine.rb +69 -0
- data/lib/edmunds/vehicle/specification/equipment.rb +70 -0
- data/lib/edmunds/vehicle/specification/make.rb +47 -3
- data/lib/edmunds/vehicle/specification/model.rb +51 -3
- data/lib/edmunds/vehicle/specification/model_year.rb +51 -3
- data/lib/edmunds/vehicle/specification/option.rb +25 -2
- data/lib/edmunds/vehicle/specification/style.rb +84 -6
- data/lib/edmunds/vehicle/specification/transmission.rb +0 -0
- data/lib/edmunds/vehicle/specification/vin_decoding.rb +14 -23
- data/lib/edmunds/version.rb +1 -1
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 210055290ec0dcd043bfa54a7d763137ff6d20fb
|
4
|
+
data.tar.gz: 555399acb19d97445abeef73a6c27e105dd47bcf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e310fca939433ed0a4f60c161fba186445f8ac89700912dfe564f66cc8ec0e395174f179d7b1314c08a83d83818d004a519b0e9cfb480555f9289f68ab1c4be
|
7
|
+
data.tar.gz: f089f5e839ed148eaa28491244ab4f70a1331283252e5c67b9e718f10f2854a0b5ab654a4b68cbf49884361033e5ab705339264dcd1cbb0b00b25435f123cfc7
|
data/lib/edmunds.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'edmunds/version'
|
2
2
|
require_relative 'edmunds/api'
|
3
|
+
require_relative 'edmunds/api/request'
|
3
4
|
require_relative 'edmunds/vehicle'
|
4
5
|
require_relative 'edmunds/vehicle/specification/make'
|
5
6
|
require_relative 'edmunds/vehicle/specification/model'
|
@@ -8,6 +9,7 @@ require_relative 'edmunds/vehicle/specification/style'
|
|
8
9
|
require_relative 'edmunds/vehicle/specification/color'
|
9
10
|
require_relative 'edmunds/vehicle/specification/option'
|
10
11
|
require_relative 'edmunds/vehicle/specification/vin_decoding'
|
12
|
+
require_relative 'edmunds/vehicle/specification/equipment'
|
11
13
|
|
12
14
|
module Edmunds
|
13
15
|
end
|
data/lib/edmunds/api.rb
CHANGED
@@ -4,10 +4,10 @@ module Edmunds
|
|
4
4
|
URL_V1 = "#{URL}/v1"
|
5
5
|
|
6
6
|
# Wrapper around Faraday.get that passses the API key
|
7
|
-
def self.get(url
|
8
|
-
|
9
|
-
|
10
|
-
response =
|
7
|
+
def self.get(url)
|
8
|
+
request = Request.new(url)
|
9
|
+
yield request
|
10
|
+
response = request.get
|
11
11
|
|
12
12
|
if not response.success?
|
13
13
|
raise Exception.new(response)
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'active_support/core_ext/hash'
|
2
|
+
|
3
|
+
module Edmunds
|
4
|
+
module Api
|
5
|
+
class Request
|
6
|
+
attr_writer :raw_parameters, :allowed_parameters, :default_parameters, :required_parameters
|
7
|
+
attr_reader :path
|
8
|
+
|
9
|
+
def initialize(path)
|
10
|
+
@path = path
|
11
|
+
end
|
12
|
+
|
13
|
+
def parameters
|
14
|
+
sanitized_parameters
|
15
|
+
end
|
16
|
+
|
17
|
+
def get
|
18
|
+
Faraday.get(@path, parameters)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def sanitized_parameters
|
24
|
+
@allowed_parameters = @allowed_parameters.with_indifferent_access
|
25
|
+
params = @raw_parameters.with_indifferent_access
|
26
|
+
|
27
|
+
# merge in default parameters
|
28
|
+
params.reverse_merge! @default_parameters
|
29
|
+
|
30
|
+
# throw away unknown parameters
|
31
|
+
params.slice! *@allowed_parameters.keys
|
32
|
+
|
33
|
+
# confirm required parameters are present
|
34
|
+
check_required(params)
|
35
|
+
|
36
|
+
# confirm parameter values are allowed
|
37
|
+
check_values(params)
|
38
|
+
|
39
|
+
# merge or override api_key
|
40
|
+
params.merge! api_key
|
41
|
+
end
|
42
|
+
|
43
|
+
def check_required(params)
|
44
|
+
@required_parameters.each do |param|
|
45
|
+
raise "missing required parameter #{param}" if params[param].blank?
|
46
|
+
end
|
47
|
+
params
|
48
|
+
end
|
49
|
+
|
50
|
+
def check_values(params)
|
51
|
+
params.each do |param, value|
|
52
|
+
raise "bad parameter value #{value} for param #{param}" unless valid_param?(param, value)
|
53
|
+
end
|
54
|
+
params
|
55
|
+
end
|
56
|
+
|
57
|
+
def valid_param?(param, value)
|
58
|
+
constraint = @allowed_parameters[param]
|
59
|
+
|
60
|
+
if constraint == :anything
|
61
|
+
true
|
62
|
+
elsif constraint.respond_to?(:cover?)
|
63
|
+
constraint.cover?(value)
|
64
|
+
elsif constraint.respond_to?(:match)
|
65
|
+
!! constraint.match(value)
|
66
|
+
else
|
67
|
+
constraint.include?(value)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def api_key
|
72
|
+
{ api_key: ENV['EDMUNDS_API_KEY'] }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/edmunds/vehicle.rb
CHANGED
@@ -2,7 +2,30 @@ require 'edmunds'
|
|
2
2
|
|
3
3
|
module Edmunds
|
4
4
|
module Vehicle
|
5
|
-
|
5
|
+
# Static Vehicle API data
|
6
6
|
API_URL_V2 = Edmunds::Api::URL + '/vehicle/v2'
|
7
|
+
VEHICLE_TYPES = %w[ Car Truck SUV Van Minivan ]
|
8
|
+
VEHICLE_CATEGORIES = %w[ 4dr\ Hatchback 2dr\ Hatchback 2dr\ SUV 4dr\ SUV
|
9
|
+
Cargo\ Minivan Cargo\ Van Convertible Convertible\ SUV
|
10
|
+
Coupe Crew\ Cab\ Pickup Extended\ Cab\ Pickup Passenger\ Minivan
|
11
|
+
Passenger\ Van Regular\ Cab\ Pickup Sedan Wagon ]
|
12
|
+
VEHICLE_SIZES = %w[ Compact Midsize Large ]
|
13
|
+
FUEL_TYPES = %w[ Electric Natural-gas-cng gas hybrid Flex-fuel-ffv diesel]
|
14
|
+
DRIVEN_WHEELS = %w[ all-wheel-drive four-wheel-drive front-wheel-drive rear-wheel-drive ]
|
15
|
+
|
16
|
+
#http://rubular.com/r/QODEdKNxjB
|
17
|
+
SUBMODEL_REGEX = /^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$/
|
18
|
+
EQUIPMENT_AVAILABILITY = %w[ standard optional used]
|
19
|
+
EQUIPMENT_TYPE = %w[ AUDIO_SYSTEM COLOR ENGINE MANUFACTURER MIRRORS OPTION OTHER TELEMATICS TIRES]
|
20
|
+
EQUIPMENT_NAME = %w[ 1ST_ROW_SEATS 2ND_ROW_SEATS 3RD_ROW_SEATS 4TH_ROW_SEATS 5TH_ROW_SEATS AIR_CONDITIONING
|
21
|
+
AIRBAGS AUDIO_SYSTEM BRAKE_SYSTEM CARGO_DIMENSIONS COLLISION_SAFETY_SYSTEM COLOR
|
22
|
+
CONVERTIBLE_ROOF DIFFERENTIAL DOORS DRIVE_TYPE DRIVER_SEAT ENGINE EXTERIOR_DIMENSIONS
|
23
|
+
EXTERIOR_LIGHTS FRONT_PASSENGER_SEAT INSTRUMENTATION INTERIOR_DIMENSIONS MANUFACTURER
|
24
|
+
MIRRORS MOBILE_CONNECTIVITY NAVIGATION_SYSTEM PARKING_AID POWER_OUTLETS SEATBELTS
|
25
|
+
SEATING_CONFIGURATION SECURITY SPARE_TIRE/WHEEL SPECIFICATIONS STEERING STEERING_WHEEL
|
26
|
+
STORAGE SUSPENSION TECHNOLOGY_FEATURE TELEMATICS TIRES TRAILER_TOWING_EQUIPMENT
|
27
|
+
TRANSMISSION TRUCK_BED TRUNK VIDEO_SYSTEM WARRANTY WHEELS WINDOWS]
|
28
|
+
|
29
|
+
ENGINE_AVAILABILITY = %w[ standard optional ]
|
7
30
|
end
|
8
31
|
end
|
@@ -18,7 +18,19 @@ module Edmunds
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def self.find(style_id, api_params = {})
|
21
|
-
response = Edmunds::Api.get("#{STYLE_API_URL}/#{style_id}/colors"
|
21
|
+
response = Edmunds::Api.get("#{STYLE_API_URL}/#{style_id}/colors") do |request|
|
22
|
+
request.raw_parameters = api_params
|
23
|
+
|
24
|
+
request.allowed_parameters = {
|
25
|
+
category: %w[Interior Exterior],
|
26
|
+
fmt: %w[json]
|
27
|
+
}
|
28
|
+
|
29
|
+
request.default_parameters = { fmt: 'json' }
|
30
|
+
|
31
|
+
request.required_parameters = %w[fmt]
|
32
|
+
end
|
33
|
+
|
22
34
|
attributes = JSON.parse(response.body)
|
23
35
|
new(attributes)
|
24
36
|
end
|
@@ -47,7 +59,18 @@ module Edmunds
|
|
47
59
|
end
|
48
60
|
|
49
61
|
def self.find(color_id, api_params = {})
|
50
|
-
response = Edmunds::Api.get("#{COLORS_API_URL}/#{color_id}"
|
62
|
+
response = Edmunds::Api.get("#{COLORS_API_URL}/#{color_id}") do |request|
|
63
|
+
request.raw_parameters = api_params
|
64
|
+
|
65
|
+
request.allowed_parameters = {
|
66
|
+
fmt: %w[json]
|
67
|
+
}
|
68
|
+
|
69
|
+
request.default_parameters = { fmt: 'json' }
|
70
|
+
|
71
|
+
request.required_parameters = %w[fmt]
|
72
|
+
end
|
73
|
+
|
51
74
|
attributes = JSON.parse(response.body)
|
52
75
|
new(attributes)
|
53
76
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
ENGINE_API_URL = Edmunds::Vehicle::API_URL_V2 + '/engines'
|
5
|
+
STYLE_API_URL = Edmunds::Vehicle::API_URL_V2 + '/styles'
|
6
|
+
|
7
|
+
module Edmunds
|
8
|
+
module Vehicle
|
9
|
+
module Specification
|
10
|
+
module Engine
|
11
|
+
|
12
|
+
class EngineByStyle
|
13
|
+
attr_reader :id
|
14
|
+
|
15
|
+
def initialize(attributes)
|
16
|
+
@id = attributes['id']
|
17
|
+
#TODO
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find(style_id, api_params = {})
|
21
|
+
response = Edmunds::Api.get("#{STYLE_API_URL}/#{style_id}/engines") do |request|
|
22
|
+
request.raw_parameters = api_params
|
23
|
+
|
24
|
+
request.allowed_parameters = {
|
25
|
+
availability: Edmunds::Vehicle::ENGINE_AVAILABILITY,
|
26
|
+
name: /^s+/,
|
27
|
+
fmt: %w[json]
|
28
|
+
}
|
29
|
+
|
30
|
+
request.default_parameters = { fmt: 'json', availability: 'standard' }
|
31
|
+
|
32
|
+
request.required_parameters = %w[fmt]
|
33
|
+
end
|
34
|
+
|
35
|
+
attributes = JSON.parse(response.body)
|
36
|
+
new(attributes)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Engine
|
41
|
+
attr_reader :id
|
42
|
+
|
43
|
+
def initialize(attributes)
|
44
|
+
@id = attributes['id']
|
45
|
+
#TODO
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.find(engine_id, api_params = {})
|
49
|
+
response = Edmunds::Api.get("#{ENGINE_API_URL}/#{engine_id}") do |request|
|
50
|
+
request.raw_parameters = api_params
|
51
|
+
|
52
|
+
request.allowed_parameters = {
|
53
|
+
fmt: %w[json]
|
54
|
+
}
|
55
|
+
|
56
|
+
request.default_parameters = { fmt: 'json' }
|
57
|
+
|
58
|
+
request.required_parameters = %w[fmt]
|
59
|
+
end
|
60
|
+
|
61
|
+
attributes = JSON.parse(response.body)
|
62
|
+
new(attributes)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
EQUIPMENT_API_URL = Edmunds::Vehicle::API_URL_V2 + '/equipment'
|
5
|
+
STYLES_API_URL = Edmunds::Vehicle::API_URL_V2 + '/styles'
|
6
|
+
|
7
|
+
module Edmunds
|
8
|
+
module Vehicle
|
9
|
+
module Specification
|
10
|
+
module Equipment
|
11
|
+
|
12
|
+
class EquipmentByStyle
|
13
|
+
attr_reader :id
|
14
|
+
|
15
|
+
def initialize(attributes)
|
16
|
+
@id = attributes['id']
|
17
|
+
#TODO
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.find(style_id, api_params = {})
|
21
|
+
response = Edmunds::Api.get("#{STYLES_API_URL}/#{style_id}/equipment") do |request|
|
22
|
+
request.raw_parameters = api_params
|
23
|
+
|
24
|
+
request.allowed_parameters = {
|
25
|
+
availability: Edmunds::Vehicle::EQUIPMENT_AVAILABILITY,
|
26
|
+
equipmentType: Edmunds::Vehicle::EQUIPMENT_TYPE,
|
27
|
+
name: Edmunds::Vehicle::EQUIPMENT_NAME,
|
28
|
+
fmt: %w[json]
|
29
|
+
}
|
30
|
+
|
31
|
+
request.default_parameters = { fmt: 'json', availability: 'standard', equipmentType: 'OTHER' }
|
32
|
+
|
33
|
+
request.required_parameters = %w[fmt]
|
34
|
+
end
|
35
|
+
|
36
|
+
attributes = JSON.parse(response.body)
|
37
|
+
new(attributes)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class Equipment
|
42
|
+
attr_reader :id
|
43
|
+
|
44
|
+
def initialize(attributes)
|
45
|
+
@id = attributes['id']
|
46
|
+
#TODO
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.find(equipment_id, api_params = {})
|
50
|
+
response = Edmunds::Api.get("#{EQUIPMENT_API_URL}/#{equipment_id}") do |request|
|
51
|
+
request.raw_parameters = api_params
|
52
|
+
|
53
|
+
request.allowed_parameters = {
|
54
|
+
fmt: %w[json]
|
55
|
+
}
|
56
|
+
|
57
|
+
request.default_parameters = { fmt: 'json' }
|
58
|
+
|
59
|
+
request.required_parameters = %w[fmt]
|
60
|
+
end
|
61
|
+
|
62
|
+
attributes = JSON.parse(response.body)
|
63
|
+
new(attributes)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -17,7 +17,21 @@ module Edmunds
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.find(api_params = {})
|
20
|
-
response = Edmunds::Api.get("#{MAKES_API_URL}"
|
20
|
+
response = Edmunds::Api.get("#{MAKES_API_URL}") do |request|
|
21
|
+
request.raw_parameters = api_params
|
22
|
+
|
23
|
+
request.allowed_parameters = {
|
24
|
+
state: %w[new used future],
|
25
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
26
|
+
view: %w[basic full],
|
27
|
+
fmt: %w[json]
|
28
|
+
}
|
29
|
+
|
30
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
31
|
+
|
32
|
+
request.required_parameters = %w[fmt]
|
33
|
+
end
|
34
|
+
|
21
35
|
attributes = JSON.parse(response.body)
|
22
36
|
new(attributes)
|
23
37
|
end
|
@@ -33,7 +47,21 @@ module Edmunds
|
|
33
47
|
end
|
34
48
|
|
35
49
|
def self.find(name, api_params = {})
|
36
|
-
response = Edmunds::Api.get("#{MAKE_API_URL}/#{name}"
|
50
|
+
response = Edmunds::Api.get("#{MAKE_API_URL}/#{name}") do |request|
|
51
|
+
request.raw_parameters = api_params
|
52
|
+
|
53
|
+
request.allowed_parameters = {
|
54
|
+
state: %w[new used future],
|
55
|
+
year: ((1990.to_s)..(Date.today.year.to_s)),
|
56
|
+
view: %w[basic full],
|
57
|
+
fmt: %w[json]
|
58
|
+
}
|
59
|
+
|
60
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
61
|
+
|
62
|
+
request.required_parameters = %w[fmt]
|
63
|
+
end
|
64
|
+
|
37
65
|
attributes = JSON.parse(response.body)
|
38
66
|
new(attributes)
|
39
67
|
end
|
@@ -47,7 +75,23 @@ module Edmunds
|
|
47
75
|
end
|
48
76
|
|
49
77
|
def self.find(api_params = {})
|
50
|
-
response = Edmunds::Api.get("#{MAKES_COUNT_API_URL}"
|
78
|
+
response = Edmunds::Api.get("#{MAKES_COUNT_API_URL}") do |request|
|
79
|
+
|
80
|
+
request.raw_parameters = api_params
|
81
|
+
|
82
|
+
request.allowed_parameters = {
|
83
|
+
state: %w[new used future],
|
84
|
+
year: ((1990.to_s)..(Date.today.year.to_s)),
|
85
|
+
view: %w[basic full],
|
86
|
+
fmt: %w[json]
|
87
|
+
}
|
88
|
+
|
89
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
90
|
+
|
91
|
+
request.required_parameters = %w[fmt]
|
92
|
+
end
|
93
|
+
|
94
|
+
|
51
95
|
attributes = JSON.parse(response.body)
|
52
96
|
new(attributes)
|
53
97
|
end
|
@@ -17,7 +17,23 @@ module Edmunds
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.find(make_name, model_name, api_params = {})
|
20
|
-
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}"
|
20
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}") do |request|
|
21
|
+
request.raw_parameters = api_params
|
22
|
+
|
23
|
+
request.allowed_parameters = {
|
24
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
25
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
26
|
+
state: %w[new used future],
|
27
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
28
|
+
view: %w[basic full],
|
29
|
+
fmt: %w[json]
|
30
|
+
}
|
31
|
+
|
32
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
33
|
+
|
34
|
+
request.required_parameters = %w[fmt]
|
35
|
+
end
|
36
|
+
|
21
37
|
attributes = JSON.parse(response.body)
|
22
38
|
new(attributes)
|
23
39
|
end
|
@@ -32,7 +48,23 @@ module Edmunds
|
|
32
48
|
end
|
33
49
|
|
34
50
|
def self.find(make_name, api_params = {})
|
35
|
-
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/models"
|
51
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/models") do |request|
|
52
|
+
request.raw_parameters = api_params
|
53
|
+
|
54
|
+
request.allowed_parameters = {
|
55
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
56
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
57
|
+
state: %w[new used future],
|
58
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
59
|
+
view: %w[basic full],
|
60
|
+
fmt: %w[json]
|
61
|
+
}
|
62
|
+
|
63
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
64
|
+
|
65
|
+
request.required_parameters = %w[fmt]
|
66
|
+
end
|
67
|
+
|
36
68
|
attributes = JSON.parse(response.body)
|
37
69
|
new(attributes)
|
38
70
|
end
|
@@ -46,7 +78,23 @@ module Edmunds
|
|
46
78
|
end
|
47
79
|
|
48
80
|
def self.find(make_name, api_params = {})
|
49
|
-
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/models/count"
|
81
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/models/count") do |request|
|
82
|
+
request.raw_parameters = api_params
|
83
|
+
|
84
|
+
request.allowed_parameters = {
|
85
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
86
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
87
|
+
state: %w[new used future],
|
88
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
89
|
+
view: %w[basic full],
|
90
|
+
fmt: %w[json]
|
91
|
+
}
|
92
|
+
|
93
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
94
|
+
|
95
|
+
request.required_parameters = %w[fmt]
|
96
|
+
end
|
97
|
+
|
50
98
|
attributes = JSON.parse(response.body)
|
51
99
|
new(attributes)
|
52
100
|
end
|
@@ -17,7 +17,23 @@ module Edmunds
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.find(make_name, model_name, model_year, api_params = {})
|
20
|
-
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/#{model_year}"
|
20
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/#{model_year}") do |request|
|
21
|
+
request.raw_parameters = api_params
|
22
|
+
|
23
|
+
request.allowed_parameters = {
|
24
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
25
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
26
|
+
state: %w[new used future],
|
27
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
28
|
+
view: %w[basic full],
|
29
|
+
fmt: %w[json]
|
30
|
+
}
|
31
|
+
|
32
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
33
|
+
|
34
|
+
request.required_parameters = %w[fmt]
|
35
|
+
end
|
36
|
+
|
21
37
|
attributes = JSON.parse(response.body)
|
22
38
|
new(attributes)
|
23
39
|
end
|
@@ -32,7 +48,23 @@ module Edmunds
|
|
32
48
|
end
|
33
49
|
|
34
50
|
def self.find(make_name, model_name, api_params = {})
|
35
|
-
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/years"
|
51
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/years") do |request|
|
52
|
+
request.raw_parameters = api_params
|
53
|
+
|
54
|
+
request.allowed_parameters = {
|
55
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
56
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
57
|
+
state: %w[new used future],
|
58
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
59
|
+
view: %w[basic full],
|
60
|
+
fmt: %w[json]
|
61
|
+
}
|
62
|
+
|
63
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
64
|
+
|
65
|
+
request.required_parameters = %w[fmt]
|
66
|
+
end
|
67
|
+
|
36
68
|
attributes = JSON.parse(response.body)
|
37
69
|
new(attributes)
|
38
70
|
end
|
@@ -46,7 +78,23 @@ module Edmunds
|
|
46
78
|
end
|
47
79
|
|
48
80
|
def self.find(make_name, model_name, api_params = {})
|
49
|
-
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/years/count"
|
81
|
+
response = Edmunds::Api.get("#{MODEL_API_URL}/#{make_name}/#{model_name}/years/count") do |request|
|
82
|
+
request.raw_parameters = api_params
|
83
|
+
|
84
|
+
request.allowed_parameters = {
|
85
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
86
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
87
|
+
state: %w[new used future],
|
88
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
89
|
+
view: %w[basic full],
|
90
|
+
fmt: %w[json]
|
91
|
+
}
|
92
|
+
|
93
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
94
|
+
|
95
|
+
request.required_parameters = %w[fmt]
|
96
|
+
end
|
97
|
+
|
50
98
|
attributes = JSON.parse(response.body)
|
51
99
|
new(attributes)
|
52
100
|
end
|
@@ -19,7 +19,19 @@ module Edmunds
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.find(style_id, api_params = {})
|
22
|
-
response = Edmunds::Api.get("#{STYLE_API_URL}/#{style_id}/options"
|
22
|
+
response = Edmunds::Api.get("#{STYLE_API_URL}/#{style_id}/options") do |request|
|
23
|
+
request.raw_parameters = api_params
|
24
|
+
|
25
|
+
request.allowed_parameters = {
|
26
|
+
category: %w[Interior Exterior Roof Interior\ Trim Mechanical Package Additional\ Fees Other],
|
27
|
+
fmt: %w[json]
|
28
|
+
}
|
29
|
+
|
30
|
+
request.default_parameters = { fmt: 'json' }
|
31
|
+
|
32
|
+
request.required_parameters = %w[fmt]
|
33
|
+
end
|
34
|
+
|
23
35
|
attributes = JSON.parse(response.body)
|
24
36
|
new(attributes)
|
25
37
|
end
|
@@ -52,7 +64,18 @@ module Edmunds
|
|
52
64
|
end
|
53
65
|
|
54
66
|
def self.find(option_id, api_params = {})
|
55
|
-
response = Edmunds::Api.get("#{OPTIONS_API_URL}/#{option_id}"
|
67
|
+
response = Edmunds::Api.get("#{OPTIONS_API_URL}/#{option_id}") do |request|
|
68
|
+
request.raw_parameters = api_params
|
69
|
+
|
70
|
+
request.allowed_parameters = {
|
71
|
+
fmt: %w[json]
|
72
|
+
}
|
73
|
+
|
74
|
+
request.default_parameters = { fmt: 'json' }
|
75
|
+
|
76
|
+
request.required_parameters = %w[fmt]
|
77
|
+
end
|
78
|
+
|
56
79
|
attributes = JSON.parse(response.body)
|
57
80
|
new(attributes)
|
58
81
|
end
|
@@ -23,7 +23,19 @@ module Edmunds
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def self.find(id, api_params = {})
|
26
|
-
response = Edmunds::Api.get("#{STYLE_API_URL}/#{id}"
|
26
|
+
response = Edmunds::Api.get("#{STYLE_API_URL}/#{id}") do |request|
|
27
|
+
request.raw_parameters = api_params
|
28
|
+
|
29
|
+
request.allowed_parameters = {
|
30
|
+
view: %w[basic full],
|
31
|
+
fmt: %w[json]
|
32
|
+
}
|
33
|
+
|
34
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
35
|
+
|
36
|
+
request.required_parameters = %w[fmt]
|
37
|
+
end
|
38
|
+
|
27
39
|
attributes = JSON.parse(response.body)
|
28
40
|
new(attributes)
|
29
41
|
end
|
@@ -38,12 +50,29 @@ module Edmunds
|
|
38
50
|
end
|
39
51
|
|
40
52
|
def self.find(make_name, model_name, model_year, api_params = {})
|
41
|
-
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/#{model_name}/#{model_year}/styles"
|
53
|
+
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/#{model_name}/#{model_year}/styles") do |request|
|
54
|
+
request.raw_parameters = api_params
|
55
|
+
|
56
|
+
request.allowed_parameters = {
|
57
|
+
submodel: Edmunds::Vehicle::SUBMODEL_REGEX,
|
58
|
+
category: Edmunds::Vehicle::VEHICLE_CATEGORIES,
|
59
|
+
state: %w[new used future],
|
60
|
+
year: ((1990.to_s)..(Date.current.year.to_s)),
|
61
|
+
view: %w[basic full],
|
62
|
+
fmt: %w[json]
|
63
|
+
}
|
64
|
+
|
65
|
+
request.default_parameters = { view: 'basic', fmt: 'json' }
|
66
|
+
|
67
|
+
request.required_parameters = %w[fmt]
|
68
|
+
end
|
69
|
+
|
42
70
|
attributes = JSON.parse(response.body)
|
43
71
|
new(attributes)
|
44
72
|
end
|
45
73
|
end
|
46
74
|
|
75
|
+
# TODO
|
47
76
|
# UNAUTHORIZED
|
48
77
|
# class StylesDetailsChrome
|
49
78
|
# attr_reader :styles, :count
|
@@ -68,7 +97,19 @@ module Edmunds
|
|
68
97
|
end
|
69
98
|
|
70
99
|
def self.find(make_name, model_name, model_year, api_params = {})
|
71
|
-
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/#{model_name}/#{model_year}/styles/count"
|
100
|
+
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/#{model_name}/#{model_year}/styles/count") do |request|
|
101
|
+
request.raw_parameters = api_params
|
102
|
+
|
103
|
+
request.allowed_parameters = {
|
104
|
+
state: %w[new used future],
|
105
|
+
fmt: %w[json]
|
106
|
+
}
|
107
|
+
|
108
|
+
request.default_parameters = { fmt: 'json' }
|
109
|
+
|
110
|
+
request.required_parameters = %w[fmt]
|
111
|
+
end
|
112
|
+
|
72
113
|
attributes = JSON.parse(response.body)
|
73
114
|
new(attributes)
|
74
115
|
end
|
@@ -82,7 +123,20 @@ module Edmunds
|
|
82
123
|
end
|
83
124
|
|
84
125
|
def self.find(make_name, model_name, api_params = {})
|
85
|
-
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/#{model_name}/styles/count"
|
126
|
+
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/#{model_name}/styles/count") do |request|
|
127
|
+
|
128
|
+
request.raw_parameters = api_params
|
129
|
+
|
130
|
+
request.allowed_parameters = {
|
131
|
+
state: %w[new used future],
|
132
|
+
fmt: %w[json]
|
133
|
+
}
|
134
|
+
|
135
|
+
request.default_parameters = { fmt: 'json' }
|
136
|
+
|
137
|
+
request.required_parameters = %w[fmt]
|
138
|
+
end
|
139
|
+
|
86
140
|
attributes = JSON.parse(response.body)
|
87
141
|
new(attributes)
|
88
142
|
end
|
@@ -96,7 +150,19 @@ module Edmunds
|
|
96
150
|
end
|
97
151
|
|
98
152
|
def self.find(make_name, api_params = {})
|
99
|
-
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/styles/count"
|
153
|
+
response = Edmunds::Api.get("#{BASE_API_URL}/#{make_name}/styles/count") do |request|
|
154
|
+
request.raw_parameters = api_params
|
155
|
+
|
156
|
+
request.allowed_parameters = {
|
157
|
+
state: %w[new used future],
|
158
|
+
fmt: %w[json]
|
159
|
+
}
|
160
|
+
|
161
|
+
request.default_parameters = { fmt: 'json' }
|
162
|
+
|
163
|
+
request.required_parameters = %w[fmt]
|
164
|
+
end
|
165
|
+
|
100
166
|
attributes = JSON.parse(response.body)
|
101
167
|
new(attributes)
|
102
168
|
end
|
@@ -110,7 +176,19 @@ module Edmunds
|
|
110
176
|
end
|
111
177
|
|
112
178
|
def self.find(api_params = {})
|
113
|
-
response = Edmunds::Api.get("#{STYLE_API_URL}/count"
|
179
|
+
response = Edmunds::Api.get("#{STYLE_API_URL}/count") do |request|
|
180
|
+
request.raw_parameters = api_params
|
181
|
+
|
182
|
+
request.allowed_parameters = {
|
183
|
+
state: %w[new used future],
|
184
|
+
fmt: %w[json]
|
185
|
+
}
|
186
|
+
|
187
|
+
request.default_parameters = { fmt: 'json' }
|
188
|
+
|
189
|
+
request.required_parameters = %w[fmt]
|
190
|
+
end
|
191
|
+
|
114
192
|
attributes = JSON.parse(response.body)
|
115
193
|
new(attributes)
|
116
194
|
end
|
File without changes
|
@@ -1,33 +1,12 @@
|
|
1
1
|
require 'faraday'
|
2
2
|
require 'json'
|
3
3
|
|
4
|
-
BASIC_API_URL = Edmunds::Vehicle::API_URL_V1 + '/vin'
|
5
4
|
FULL_API_URL = Edmunds::Vehicle::API_URL_V2 + '/vins'
|
6
5
|
|
7
6
|
module Edmunds
|
8
7
|
module Vehicle
|
9
8
|
module Specification
|
10
9
|
module VinDecoding
|
11
|
-
class Basic
|
12
|
-
attr_reader :make, :model, :year
|
13
|
-
|
14
|
-
def initialize(attributes)
|
15
|
-
@make = attributes['make']['name']
|
16
|
-
@model = attributes['model']['name']
|
17
|
-
@year = attributes['year']
|
18
|
-
end
|
19
|
-
|
20
|
-
# Get vehicle make, model, year, type, fuel type, number of cylinders and list of styles by decoding the vehicle's VIN.
|
21
|
-
#
|
22
|
-
# @param [String] vin number of the vehicle to search for
|
23
|
-
# @return [Basic] object holding the results of the query
|
24
|
-
def self.find(vin)
|
25
|
-
response = Edmunds::Api.get("#{BASIC_API_URL}/#{vin}/configuration")
|
26
|
-
attributes = JSON.parse(response.body)
|
27
|
-
new(attributes)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
10
|
class Full
|
32
11
|
attr_reader :make, :model, :years, :mpg_highway, :mpg_city
|
33
12
|
|
@@ -43,8 +22,20 @@ module Edmunds
|
|
43
22
|
#
|
44
23
|
# @param [String] vin number of the vehicle to search for
|
45
24
|
# @return [Basic] object holding the results of the query
|
46
|
-
def self.find(vin)
|
47
|
-
response = Edmunds::Api.get("#{FULL_API_URL}/#{vin}")
|
25
|
+
def self.find(vin, api_params = {})
|
26
|
+
response = Edmunds::Api.get("#{FULL_API_URL}/#{vin}") do |request|
|
27
|
+
request.raw_parameters = api_params
|
28
|
+
|
29
|
+
request.allowed_parameters = {
|
30
|
+
# OEM CODE
|
31
|
+
fmt: %w[json]
|
32
|
+
}
|
33
|
+
|
34
|
+
request.default_parameters = {fmt: 'json' }
|
35
|
+
|
36
|
+
request.required_parameters = %w[fmt]
|
37
|
+
end
|
38
|
+
|
48
39
|
attributes = JSON.parse(response.body)
|
49
40
|
new(attributes)
|
50
41
|
end
|
data/lib/edmunds/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edmunds
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jason Parraga
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: activesupport
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
description: Gem to wrap Edmunds.com API
|
126
140
|
email:
|
127
141
|
- Sovietaced@gmail.com
|
@@ -132,13 +146,17 @@ files:
|
|
132
146
|
- README.md
|
133
147
|
- lib/edmunds.rb
|
134
148
|
- lib/edmunds/api.rb
|
149
|
+
- lib/edmunds/api/request.rb
|
135
150
|
- lib/edmunds/vehicle.rb
|
136
151
|
- lib/edmunds/vehicle/specification/color.rb
|
152
|
+
- lib/edmunds/vehicle/specification/engine.rb
|
153
|
+
- lib/edmunds/vehicle/specification/equipment.rb
|
137
154
|
- lib/edmunds/vehicle/specification/make.rb
|
138
155
|
- lib/edmunds/vehicle/specification/model.rb
|
139
156
|
- lib/edmunds/vehicle/specification/model_year.rb
|
140
157
|
- lib/edmunds/vehicle/specification/option.rb
|
141
158
|
- lib/edmunds/vehicle/specification/style.rb
|
159
|
+
- lib/edmunds/vehicle/specification/transmission.rb
|
142
160
|
- lib/edmunds/vehicle/specification/vin_decoding.rb
|
143
161
|
- lib/edmunds/version.rb
|
144
162
|
homepage: ''
|