Guzzler 0.1.0
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 +7 -0
- data/lib/guzzler.rb +56 -0
- data/lib/guzzler/fuel_eco_api.rb +76 -0
- metadata +46 -0
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: []
|