edmunds 0.0.5 → 0.0.6

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
  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: ''