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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1344f0bd011e7414e7e8d61633f8d6e4138244b6
4
- data.tar.gz: 99f01d3fa5e0ec85c904c1a1ed76e600e337224b
3
+ metadata.gz: 210055290ec0dcd043bfa54a7d763137ff6d20fb
4
+ data.tar.gz: 555399acb19d97445abeef73a6c27e105dd47bcf
5
5
  SHA512:
6
- metadata.gz: 5b77c3fa390cdb4792ee925d23102cf95189ebd88b8f416699ab1a7a46d8a7dbc32f624d185dbde28cfc79f8bfaefa02db28324c91c210478a7ddf953cb98542
7
- data.tar.gz: 59ab4ce5eeea4c4c2f4d85f62167e4c2ae93531ab14ccb80bd9ebb4e8d8cd73d5a21320d312848f26200abcae8578fe66e640fcf04f0ca332edfc252c3fc9ef0
6
+ metadata.gz: 2e310fca939433ed0a4f60c161fba186445f8ac89700912dfe564f66cc8ec0e395174f179d7b1314c08a83d83818d004a519b0e9cfb480555f9289f68ab1c4be
7
+ data.tar.gz: f089f5e839ed148eaa28491244ab4f70a1331283252e5c67b9e718f10f2854a0b5ab654a4b68cbf49884361033e5ab705339264dcd1cbb0b00b25435f123cfc7
@@ -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
@@ -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, api_params = {})
8
- api_key_hash = { api_key: ENV['EDMUNDS_API_KEY'] }
9
- api_params = api_params.merge(api_key_hash)
10
- response = Faraday.get(url, api_params)
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
@@ -2,7 +2,30 @@ require 'edmunds'
2
2
 
3
3
  module Edmunds
4
4
  module Vehicle
5
- API_URL_V1 = Edmunds::Api::URL_V1 + '/vehicle'
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", api_params)
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}", api_params)
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}", api_params)
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}", api_params)
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}", api_params)
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}", api_params)
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", api_params)
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", api_params)
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}", api_params)
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", api_params)
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", api_params)
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", api_params)
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}", api_params)
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}", api_params)
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", api_params)
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", api_params)
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", api_params)
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", api_params)
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", api_params)
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Edmunds
2
- VERSION = '0.0.5'
2
+ VERSION = '0.0.6'
3
3
  end
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.5
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-03-08 00:00:00.000000000 Z
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: ''