Guzzler 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f33bba74d4ff58dc087677dc2c09b4398ee665c6cbd9562c429ace61f4f51e9e
4
+ data.tar.gz: cde3c359fbd25f25448b7c2f1ebca25c24dc121648170b6ad5aa4f5a74e4b6dd
5
+ SHA512:
6
+ metadata.gz: bb2010b6931b787753e610e6723fac5865a1aaf6e82dd687e3312fcf1f6a1789c2f6c88da76801fdf06a4b5751d22dd67c8b6a7123b6f4ec9869476f29c0a1cd
7
+ data.tar.gz: e0c3b9c16a15de742c19db9b8fb304a4e7b97da0b2933566cdccd80f6d40b8df5fc1de3622db7f8f9b580573915df3c9d8f7abb2b0d3b9b11cf3fa44b48d8ef8
data/lib/guzzler.rb ADDED
@@ -0,0 +1,56 @@
1
+ require_relative 'guzzler/fuel_eco_api'
2
+
3
+ module Guzzler
4
+
5
+ class Vehicle < FuelEcoAPI
6
+ def initialize(vehicle_code)
7
+ raise ArgumentError.new("Vehicle code is not a valid vehicle") unless vehicle_code_valid?(vehicle_code)
8
+ @vehicle_code = vehicle_code
9
+ end
10
+
11
+ def fuel_eco(**args)
12
+ valid_arg_options_values = { driving_type: ['city', 'highway', 'combo'],
13
+ unit: ['mpg', 'kpg'],
14
+ round: [true, false] }
15
+
16
+ args.each do |key, value| # confirms arg options are valid, and values for options are valid
17
+ unless valid_arg_options_values.keys.include?(key) && valid_arg_options_values[key].include?(value)
18
+ if !valid_arg_options_values.keys.include?(key)
19
+ raise ArgumentError.new("#{key} is not a valid argument option, please select from these: #{valid_arg_options_values.keys.join(', ')}.")
20
+ else
21
+ valid_value_class = valid_arg_options_values[key].map(&:class).uniq
22
+ raise ArgumentError.new("#{value} is not a valid value for #{key}.
23
+ Please select from #{valid_arg_options_values[key].join(', ')} (#{valid_value_class.join(',')}).")
24
+ end
25
+ end
26
+ end
27
+
28
+ driving_type = args[:driving_type] ||= 'combo'
29
+ unit = args[:unit] ||= 'mpg'
30
+ round = args[:round] == nil ? true : args[:round]
31
+
32
+ fuel_economy = get_fuel_economy(driving_type).to_f
33
+
34
+ if unit.downcase == 'kpg'
35
+ fuel_economy = convert_mpg_to_kpg(fuel_economy)
36
+ end
37
+
38
+ round ? fuel_economy.round(1).to_s : fuel_economy.to_s
39
+ end
40
+
41
+ private
42
+
43
+ def vehicle_code_valid?(vehicle_code)
44
+ FuelEcoAPI.verify_vehicle_code(vehicle_code)
45
+ end
46
+
47
+ def get_fuel_economy(driving_type)
48
+ FuelEcoAPI.fetch_fuel_economy(@vehicle_code , driving_type)
49
+ end
50
+
51
+ def convert_mpg_to_kpg(mpg)
52
+ mpg * 1.609
53
+ end
54
+ end
55
+
56
+ end
@@ -0,0 +1,76 @@
1
+ require 'uri'
2
+ require 'net/http'
3
+ require 'openssl'
4
+ require 'json'
5
+ require 'crack'
6
+ require 'resolv-replace'
7
+
8
+ class FuelEcoAPI
9
+ def self.years
10
+ url = URI('https://www.fueleconomy.gov/ws/rest/vehicle/menu/year')
11
+ data_response = http_response(url)
12
+
13
+ #[{"text"=>"2022", "value"=>"2022"}] -> ["2022"]
14
+ year_make_model_options_values(data_response)
15
+ end
16
+
17
+ def self.makes(year)
18
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/menu/make?year=#{year}")
19
+ data_response = http_response(url)
20
+
21
+ # [{"text"=>"Acura", "value"=>"Acura"}] -> ["Acura"]
22
+ year_make_model_options_values(data_response)
23
+ end
24
+
25
+ def self.models(year, make)
26
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/menu/model?year=#{year}&make=#{make}")
27
+ data_response = http_response(url)
28
+
29
+ # [{"text"=>"Avalon", "value"=>"Avalon"}] -> ["Avalon"]
30
+ year_make_model_options_values(data_response)
31
+ end
32
+
33
+ def self.vehicle_options(year, make, model)
34
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/menu/options?year=#{year}&make=#{make}&model=#{model}")
35
+ data_response = http_response(url)
36
+
37
+ data_response['menuItems']['menuItem']
38
+ end
39
+
40
+ def self.fetch_vehicle(vehicle_code)
41
+ url = URI("https://www.fueleconomy.gov/ws/rest/vehicle/#{vehicle_code}")
42
+ data_response = http_response(url)
43
+ end
44
+
45
+ def self.verify_vehicle_code(vehicle_code)
46
+ fetch_vehicle(vehicle_code).has_key?('vehicle')
47
+ end
48
+
49
+ def self.fetch_fuel_economy(vehicle_code, driving_type)
50
+ driving_type_converter = {'city' => 'city08U', 'highway' => 'highway08', 'combo' => 'comb08' }
51
+ driving_type = driving_type_converter[driving_type]
52
+
53
+ data_response = fetch_vehicle(vehicle_code)
54
+
55
+ data_response['vehicle'][driving_type]
56
+ end
57
+
58
+ private
59
+
60
+ def self.http_response(url)
61
+ http = Net::HTTP.new(url.host, url.port)
62
+ http.use_ssl = true
63
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
64
+ request = Net::HTTP::Get.new(url)
65
+ @response = http.request(request)
66
+ Crack::XML.parse(@response.read_body)
67
+ end
68
+
69
+ def self.year_make_model_options_values(hash)
70
+ if hash['menuItems']['menuItem'].is_a?(Array)
71
+ hash['menuItems']['menuItem'].map {|hash| hash['value']}
72
+ else
73
+ [hash['menuItems']['menuItem']['value']]
74
+ end
75
+ end
76
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: Guzzler
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Chris Salazar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-05-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A ruby gem to retrieve Fuel Economy information for vehicle from the
14
+ FuelEconomy.gov API.
15
+ email:
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/guzzler.rb
21
+ - lib/guzzler/fuel_eco_api.rb
22
+ homepage: https://rubygems.org/gems/guzzler
23
+ licenses:
24
+ - MIT
25
+ metadata:
26
+ source_code_uri: https://github.com/CsalazarGH/Guzzler
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubygems_version: 3.1.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Access info from https://www.fueleconomy.gov/ API
46
+ test_files: []