barometer 0.8.0 → 0.9.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.
- data/.gitignore +2 -0
- data/.pelusa.yml +7 -0
- data/.travis.yml +6 -3
- data/Gemfile +11 -1
- data/README.md +89 -244
- data/Rakefile +1 -1
- data/barometer.gemspec +22 -24
- data/lib/barometer.rb +14 -65
- data/lib/barometer/base.rb +35 -65
- data/lib/barometer/data.rb +15 -20
- data/lib/barometer/data/attribute.rb +19 -0
- data/lib/barometer/data/attributes/distance.rb +11 -0
- data/lib/barometer/data/attributes/float.rb +11 -0
- data/lib/barometer/data/attributes/integer.rb +11 -0
- data/lib/barometer/data/attributes/location.rb +11 -0
- data/lib/barometer/data/attributes/pressure.rb +11 -0
- data/lib/barometer/data/attributes/sun.rb +15 -0
- data/lib/barometer/data/attributes/temperature.rb +11 -0
- data/lib/barometer/data/attributes/time.rb +11 -0
- data/lib/barometer/data/attributes/vector.rb +11 -0
- data/lib/barometer/data/attributes/zone.rb +11 -0
- data/lib/barometer/data/convertable_units.rb +145 -0
- data/lib/barometer/data/coordinates.rb +16 -0
- data/lib/barometer/data/distance.rb +14 -133
- data/lib/barometer/data/geo.rb +22 -59
- data/lib/barometer/data/location.rb +14 -20
- data/lib/barometer/data/pressure.rb +14 -135
- data/lib/barometer/data/sun.rb +24 -24
- data/lib/barometer/data/temperature.rb +14 -169
- data/lib/barometer/data/vector.rb +44 -0
- data/lib/barometer/data/zone.rb +109 -112
- data/lib/barometer/query.rb +23 -161
- data/lib/barometer/query/base.rb +88 -0
- data/lib/barometer/query/converter.rb +64 -0
- data/lib/barometer/query/converters/from_coordinates_to_noaa_station_id.rb +30 -0
- data/lib/barometer/query/converters/from_geocode_to_coordinates.rb +28 -0
- data/lib/barometer/query/converters/from_short_zipcode_to_zipcode.rb +28 -0
- data/lib/barometer/query/converters/from_weather_id_to_geocode.rb +30 -0
- data/lib/barometer/query/converters/from_woe_id_or_ipv4_to_geocode.rb +32 -0
- data/lib/barometer/query/converters/to_geocode.rb +30 -0
- data/lib/barometer/query/converters/to_weather_id.rb +30 -0
- data/lib/barometer/query/converters/to_woe_id.rb +30 -0
- data/lib/barometer/query/format.rb +59 -0
- data/lib/barometer/query/formats/base.rb +22 -0
- data/lib/barometer/query/formats/coordinates.rb +14 -0
- data/lib/barometer/query/formats/geocode.rb +15 -0
- data/lib/barometer/query/formats/icao.rb +35 -0
- data/lib/barometer/query/formats/ipv4_address.rb +19 -0
- data/lib/barometer/query/formats/noaa_station_id.rb +15 -0
- data/lib/barometer/query/formats/postalcode.rb +20 -0
- data/lib/barometer/query/formats/short_zipcode.rb +15 -0
- data/lib/barometer/{translations → query/formats/translations}/icao_country_codes.yml +0 -0
- data/lib/barometer/{translations → query/formats/translations}/weather_country_codes.yml +0 -0
- data/lib/barometer/query/formats/unknown.rb +14 -0
- data/lib/barometer/query/formats/weather_id.rb +33 -0
- data/lib/barometer/query/formats/woe_id.rb +28 -0
- data/lib/barometer/query/formats/zipcode.rb +15 -0
- data/lib/barometer/query/service.rb +13 -0
- data/lib/barometer/query/services/apis/geonames_timezone.rb +26 -0
- data/lib/barometer/query/services/apis/google_geocode.rb +35 -0
- data/lib/barometer/query/services/apis/noaa_station.rb +31 -0
- data/lib/barometer/query/services/apis/weather_id.rb +35 -0
- data/lib/barometer/query/services/apis/wunderground_timezone.rb +26 -0
- data/lib/barometer/query/services/apis/yahoo_placefinder.rb +35 -0
- data/lib/barometer/query/services/apis/yahoo_weather.rb +31 -0
- data/lib/barometer/query/services/from_weather_id.rb +64 -0
- data/lib/barometer/query/services/geonames_timezone.rb +18 -0
- data/lib/barometer/query/services/google_geocode.rb +106 -0
- data/lib/barometer/query/services/noaa_station_id.rb +28 -0
- data/lib/barometer/query/services/to_weather_id.rb +25 -0
- data/lib/barometer/query/services/to_woe_id.rb +29 -0
- data/lib/barometer/query/services/wunderground_timezone.rb +18 -0
- data/lib/barometer/query/services/yahoo_geocode.rb +69 -0
- data/lib/barometer/response.rb +12 -0
- data/lib/barometer/response/base.rb +57 -0
- data/lib/barometer/response/current.rb +27 -0
- data/lib/barometer/response/prediction.rb +41 -0
- data/lib/barometer/response/prediction_collection.rb +48 -0
- data/lib/barometer/utils.rb +17 -0
- data/lib/barometer/utils/address.rb +33 -0
- data/lib/barometer/utils/api.rb +30 -0
- data/lib/barometer/utils/config_reader.rb +40 -0
- data/lib/barometer/utils/get.rb +17 -0
- data/lib/barometer/utils/json_reader.rb +22 -0
- data/lib/barometer/utils/payload.rb +100 -0
- data/lib/barometer/utils/payload_request.rb +37 -0
- data/lib/barometer/utils/post.rb +24 -0
- data/lib/barometer/utils/time.rb +78 -0
- data/lib/barometer/{translations → utils/translations}/zone_codes.yml +0 -0
- data/lib/barometer/utils/versioned_registration.rb +70 -0
- data/lib/barometer/utils/xml_reader.rb +27 -0
- data/lib/barometer/utils/zone_code_lookup.rb +30 -0
- data/lib/barometer/version.rb +1 -1
- data/lib/barometer/weather.rb +44 -173
- data/lib/barometer/weather_service.rb +41 -0
- data/lib/barometer/weather_services/base.rb +50 -0
- data/lib/barometer/weather_services/forecast_io.rb +36 -0
- data/lib/barometer/weather_services/forecast_io/api.rb +22 -0
- data/lib/barometer/weather_services/forecast_io/query.rb +38 -0
- data/lib/barometer/weather_services/forecast_io/response.rb +31 -0
- data/lib/barometer/weather_services/forecast_io/response/current_weather.rb +78 -0
- data/lib/barometer/weather_services/forecast_io/response/forecasted_weather.rb +74 -0
- data/lib/barometer/weather_services/forecast_io/response/location.rb +19 -0
- data/lib/barometer/weather_services/forecast_io/response/timezone.rb +25 -0
- data/lib/barometer/weather_services/noaa.rb +21 -305
- data/lib/barometer/weather_services/noaa/current_api.rb +25 -0
- data/lib/barometer/weather_services/noaa/current_query.rb +30 -0
- data/lib/barometer/weather_services/noaa/current_response.rb +29 -0
- data/lib/barometer/weather_services/noaa/forecast_api.rb +25 -0
- data/lib/barometer/weather_services/noaa/forecast_query.rb +39 -0
- data/lib/barometer/weather_services/noaa/forecast_response.rb +28 -0
- data/lib/barometer/weather_services/noaa/response/current_location.rb +42 -0
- data/lib/barometer/weather_services/noaa/response/current_station.rb +46 -0
- data/lib/barometer/weather_services/noaa/response/current_weather.rb +82 -0
- data/lib/barometer/weather_services/noaa/response/forecasted_weather.rb +90 -0
- data/lib/barometer/weather_services/noaa/response/location.rb +19 -0
- data/lib/barometer/weather_services/noaa/response/timezone.rb +15 -0
- data/lib/barometer/weather_services/response.rb +9 -0
- data/lib/barometer/weather_services/response/location.rb +42 -0
- data/lib/barometer/weather_services/response/time_zone.rb +19 -0
- data/lib/barometer/weather_services/weather_bug.rb +24 -280
- data/lib/barometer/weather_services/weather_bug/current_api.rb +26 -0
- data/lib/barometer/weather_services/weather_bug/current_response.rb +33 -0
- data/lib/barometer/weather_services/weather_bug/forecast_api.rb +26 -0
- data/lib/barometer/weather_services/weather_bug/forecast_response.rb +29 -0
- data/lib/barometer/weather_services/weather_bug/query.rb +42 -0
- data/lib/barometer/weather_services/weather_bug/response/current_weather.rb +82 -0
- data/lib/barometer/weather_services/weather_bug/response/forecasted_weather.rb +67 -0
- data/lib/barometer/weather_services/weather_bug/response/location.rb +23 -0
- data/lib/barometer/weather_services/weather_bug/response/station.rb +43 -0
- data/lib/barometer/weather_services/weather_bug/response/sun.rb +32 -0
- data/lib/barometer/weather_services/weather_bug/response/time_helper.rb +52 -0
- data/lib/barometer/weather_services/weather_bug/response/timezone.rb +15 -0
- data/lib/barometer/weather_services/wunderground_v1.rb +32 -0
- data/lib/barometer/weather_services/wunderground_v1/current_api.rb +21 -0
- data/lib/barometer/weather_services/wunderground_v1/current_response.rb +31 -0
- data/lib/barometer/weather_services/wunderground_v1/forecast_api.rb +21 -0
- data/lib/barometer/weather_services/wunderground_v1/forecast_response.rb +33 -0
- data/lib/barometer/weather_services/wunderground_v1/query.rb +30 -0
- data/lib/barometer/weather_services/wunderground_v1/response/current_weather.rb +92 -0
- data/lib/barometer/weather_services/wunderground_v1/response/forecasted_weather.rb +87 -0
- data/lib/barometer/weather_services/wunderground_v1/response/full_timezone.rb +22 -0
- data/lib/barometer/weather_services/wunderground_v1/response/location.rb +43 -0
- data/lib/barometer/weather_services/wunderground_v1/response/station.rb +39 -0
- data/lib/barometer/weather_services/wunderground_v1/response/sun.rb +53 -0
- data/lib/barometer/weather_services/wunderground_v1/response/timezone.rb +15 -0
- data/lib/barometer/weather_services/yahoo.rb +16 -198
- data/lib/barometer/weather_services/yahoo/api.rb +21 -0
- data/lib/barometer/weather_services/yahoo/query.rb +42 -0
- data/lib/barometer/weather_services/yahoo/response.rb +39 -0
- data/lib/barometer/weather_services/yahoo/response/current_weather.rb +86 -0
- data/lib/barometer/weather_services/yahoo/response/forecasted_weather.rb +71 -0
- data/lib/barometer/weather_services/yahoo/response/location.rb +47 -0
- data/lib/barometer/weather_services/yahoo/response/sun.rb +43 -0
- data/lib/barometer/weather_services/yahoo/response/timezone.rb +15 -0
- data/spec/barometer_spec.rb +18 -120
- data/spec/base_spec.rb +114 -0
- data/spec/cassettes/Converter_FromCoordinatesToNoaaStationId.json +1 -0
- data/spec/cassettes/Converter_FromWeatherIdToGeocode.json +1 -0
- data/spec/cassettes/Converter_FromWoeIdOrIpv4ToGeocode.json +1 -0
- data/spec/cassettes/Converter_ToGeocode.json +1 -0
- data/spec/cassettes/Converter_ToWeatherId.json +1 -0
- data/spec/cassettes/Converter_ToWoeId.json +1 -0
- data/spec/cassettes/Service_FromWeatherId.json +1 -0
- data/spec/cassettes/Service_GoogleGeocode.json +1 -0
- data/spec/cassettes/Service_NoaaStation.json +1 -0
- data/spec/cassettes/Service_ToWeatherId.json +1 -0
- data/spec/cassettes/Service_ToWoeId.json +1 -0
- data/spec/cassettes/Service_YahooGeocode.json +1 -0
- data/spec/cassettes/WeatherService_ForecastIo.json +1 -0
- data/spec/cassettes/WeatherService_Noaa.json +1 -1
- data/spec/cassettes/WeatherService_WeatherBug.json +1 -1
- data/spec/cassettes/WeatherService_WundergroundV1.json +1 -0
- data/spec/cassettes/WeatherService_Yahoo.json +1 -1
- data/spec/data/attributes/distance_spec.rb +60 -0
- data/spec/data/attributes/location_spec.rb +41 -0
- data/spec/data/attributes/pressure_spec.rb +60 -0
- data/spec/data/attributes/sun_spec.rb +33 -0
- data/spec/data/attributes/temperature_spec.rb +60 -0
- data/spec/data/attributes/time_spec.rb +58 -0
- data/spec/data/attributes/vector_spec.rb +43 -0
- data/spec/data/attributes/zone_spec.rb +34 -0
- data/spec/data/convertable_units_spec.rb +299 -0
- data/spec/data/coordinates_spec.rb +15 -0
- data/spec/data/distance_spec.rb +49 -333
- data/spec/data/geo_spec.rb +72 -71
- data/spec/data/location_spec.rb +70 -65
- data/spec/data/pressure_spec.rb +49 -333
- data/spec/data/sun_spec.rb +57 -81
- data/spec/data/temperature_spec.rb +49 -393
- data/spec/data/vector_spec.rb +100 -0
- data/spec/data/zone_spec.rb +199 -266
- data/spec/query/base_spec.rb +296 -0
- data/spec/query/converter_spec.rb +98 -0
- data/spec/query/converters/from_coordinates_to_noaa_station_id_spec.rb +35 -0
- data/spec/query/converters/from_geocode_to_coordinates_spec.rb +25 -0
- data/spec/query/converters/from_short_zipcode_to_zipcode_spec.rb +31 -0
- data/spec/query/converters/from_weather_id_to_geocode_spec.rb +40 -0
- data/spec/query/converters/from_woe_id_or_ipv4_to_geocode_spec.rb +51 -0
- data/spec/query/converters/to_geocode_spec.rb +99 -0
- data/spec/query/converters/to_weather_id_spec.rb +35 -0
- data/spec/query/converters/to_woe_id_spec.rb +74 -0
- data/spec/query/formats/base_spec.rb +15 -0
- data/spec/query/formats/coordinates_spec.rb +13 -0
- data/spec/query/formats/geocode_spec.rb +9 -0
- data/spec/query/formats/icao_spec.rb +20 -0
- data/spec/query/formats/ipv4_address_spec.rb +33 -0
- data/spec/query/formats/noaa_station_id_spec.rb +9 -0
- data/spec/query/formats/postalcode_spec.rb +18 -0
- data/spec/query/formats/short_zipcode_spec.rb +18 -0
- data/spec/query/formats/unknown_spec.rb +9 -0
- data/spec/query/formats/weather_id_spec.rb +31 -0
- data/spec/query/formats/woe_id_spec.rb +45 -0
- data/spec/query/formats/zipcode_spec.rb +18 -0
- data/spec/query/formats_spec.rb +55 -0
- data/spec/query/services/from_weather_id_spec.rb +54 -0
- data/spec/query/services/google_geocode_spec.rb +60 -0
- data/spec/query/services/noaa_station_id_spec.rb +23 -0
- data/spec/query/services/to_weather_id_spec.rb +23 -0
- data/spec/query/services/to_woe_id_spec.rb +51 -0
- data/spec/query/services/yahoo_geocode_spec.rb +72 -0
- data/spec/response/base_spec.rb +103 -0
- data/spec/response/current_spec.rb +33 -0
- data/spec/response/predicition_spec.rb +65 -0
- data/spec/response/prediction_collection_spec.rb +97 -0
- data/spec/spec_helper.rb +14 -12
- data/spec/support/key_file_parser.rb +22 -0
- data/spec/support/matchers/formats.rb +36 -0
- data/spec/support/matchers/have_data.rb +46 -0
- data/spec/support/matchers/have_field.rb +128 -0
- data/spec/support/matchers/have_forecast.rb +46 -0
- data/spec/support/matchers/path.rb +23 -0
- data/spec/support/query_factory.rb +20 -0
- data/spec/utils/address_spec.rb +67 -0
- data/spec/utils/config_reader_spec.rb +157 -0
- data/spec/utils/get_spec.rb +22 -0
- data/spec/utils/payload_request_spec.rb +69 -0
- data/spec/utils/payload_spec.rb +168 -0
- data/spec/utils/post_spec.rb +20 -0
- data/spec/utils/time_spec.rb +93 -0
- data/spec/utils/versioned_registration_spec.rb +105 -0
- data/spec/weather_services/base_spec.rb +116 -0
- data/spec/weather_services/forecast_io_spec.rb +71 -0
- data/spec/weather_services/noaa/current_response_spec.rb +22 -0
- data/spec/weather_services/noaa/forecast_response_spec.rb +33 -0
- data/spec/weather_services/noaa_spec.rb +68 -166
- data/spec/weather_services/weather_bug/current_response_spec.rb +64 -0
- data/spec/weather_services/weather_bug/forecast_response_spec.rb +23 -0
- data/spec/weather_services/weather_bug_spec.rb +62 -202
- data/spec/weather_services/wunderground_v1/current_response_spec.rb +19 -0
- data/spec/weather_services/wunderground_v1/forecast_response_spec.rb +62 -0
- data/spec/weather_services/wunderground_v1_spec.rb +78 -0
- data/spec/weather_services/yahoo/response_spec.rb +73 -0
- data/spec/weather_services/yahoo_spec.rb +52 -135
- data/spec/weather_services_spec.rb +103 -0
- data/spec/weather_spec.rb +167 -347
- metadata +342 -123
- data/.document +0 -5
- data/TODO +0 -60
- data/bin/barometer +0 -441
- data/lib/barometer/data/local_datetime.rb +0 -145
- data/lib/barometer/data/local_time.rb +0 -134
- data/lib/barometer/data/speed.rb +0 -158
- data/lib/barometer/data/units.rb +0 -49
- data/lib/barometer/formats.rb +0 -13
- data/lib/barometer/formats/coordinates.rb +0 -57
- data/lib/barometer/formats/format.rb +0 -64
- data/lib/barometer/formats/geocode.rb +0 -60
- data/lib/barometer/formats/icao.rb +0 -37
- data/lib/barometer/formats/postalcode.rb +0 -22
- data/lib/barometer/formats/short_zipcode.rb +0 -17
- data/lib/barometer/formats/weather_id.rb +0 -92
- data/lib/barometer/formats/woe_id.rb +0 -150
- data/lib/barometer/formats/zipcode.rb +0 -31
- data/lib/barometer/key_file_parser.rb +0 -20
- data/lib/barometer/measurements/measurement.rb +0 -202
- data/lib/barometer/measurements/result.rb +0 -207
- data/lib/barometer/measurements/result_array.rb +0 -75
- data/lib/barometer/services.rb +0 -19
- data/lib/barometer/weather_services/service.rb +0 -189
- data/lib/barometer/weather_services/wunderground.rb +0 -264
- data/lib/barometer/web_services/geocode.rb +0 -34
- data/lib/barometer/web_services/noaa_station_id.rb +0 -53
- data/lib/barometer/web_services/placemaker.rb +0 -95
- data/lib/barometer/web_services/timezone.rb +0 -38
- data/lib/barometer/web_services/weather_id.rb +0 -50
- data/lib/barometer/web_services/web_service.rb +0 -29
- data/spec/cassettes/Barometer.json +0 -1
- data/spec/cassettes/Query.json +0 -1
- data/spec/cassettes/Query_Format_Coordinates.json +0 -1
- data/spec/cassettes/Query_Format_Geocode.json +0 -1
- data/spec/cassettes/Query_Format_WeatherID.json +0 -1
- data/spec/cassettes/Query_Format_WoeID.json +0 -1
- data/spec/cassettes/WeatherService.json +0 -1
- data/spec/cassettes/WeatherService_Wunderground.json +0 -1
- data/spec/cassettes/WebService_Geocode.json +0 -1
- data/spec/cassettes/WebService_NoaaStation.json +0 -1
- data/spec/data/local_datetime_spec.rb +0 -274
- data/spec/data/local_time_spec.rb +0 -239
- data/spec/data/speed_spec.rb +0 -374
- data/spec/data/units_spec.rb +0 -101
- data/spec/formats/coordinates_spec.rb +0 -166
- data/spec/formats/format_spec.rb +0 -74
- data/spec/formats/geocode_spec.rb +0 -163
- data/spec/formats/icao_spec.rb +0 -55
- data/spec/formats/postalcode_spec.rb +0 -53
- data/spec/formats/short_zipcode_spec.rb +0 -47
- data/spec/formats/weather_id_spec.rb +0 -182
- data/spec/formats/woe_id_spec.rb +0 -211
- data/spec/formats/zipcode_spec.rb +0 -103
- data/spec/key_file_parser_spec.rb +0 -28
- data/spec/measurements/measurement_spec.rb +0 -381
- data/spec/measurements/result_array_spec.rb +0 -150
- data/spec/measurements/result_spec.rb +0 -632
- data/spec/query_spec.rb +0 -498
- data/spec/weather_services/services_spec.rb +0 -135
- data/spec/weather_services/wunderground_spec.rb +0 -179
- data/spec/web_services/geocode_spec.rb +0 -31
- data/spec/web_services/noaa_station_id_spec.rb +0 -33
- data/spec/web_services/placemaker_spec.rb +0 -41
- data/spec/web_services/web_services_spec.rb +0 -20
@@ -1,143 +1,22 @@
|
|
1
1
|
module Barometer
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# is that you can create a number (in a certain unit), then
|
7
|
-
# get that number back already converted to another unit.
|
8
|
-
#
|
9
|
-
# All comparison operations will be done in metric
|
10
|
-
#
|
11
|
-
# NOTE: the metric units for pressure aren't commonly used, except
|
12
|
-
# that this class was designed for storing weather data,
|
13
|
-
# and it seems that it is more common in this case
|
14
|
-
#
|
15
|
-
class Data::Pressure < Data::Units
|
2
|
+
module Data
|
3
|
+
class Pressure < ConvertableUnits
|
4
|
+
def mb; metric; end
|
5
|
+
def in; imperial; end
|
16
6
|
|
17
|
-
|
18
|
-
|
7
|
+
def units
|
8
|
+
metric? ? 'mb' : 'in'
|
9
|
+
end
|
19
10
|
|
20
|
-
|
11
|
+
private
|
21
12
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
super(metric)
|
26
|
-
end
|
27
|
-
|
28
|
-
def metric_default=(value); self.mb = value; end
|
29
|
-
def imperial_default=(value); self.in = value; end
|
30
|
-
|
31
|
-
#
|
32
|
-
# CONVERTERS
|
33
|
-
#
|
34
|
-
|
35
|
-
def self.mb_to_in(mb)
|
36
|
-
return nil unless mb && (mb.is_a?(Integer) || mb.is_a?(Float))
|
37
|
-
mb.to_f * 0.02953
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.in_to_mb(inches)
|
41
|
-
return nil unless inches &&
|
42
|
-
(inches.is_a?(Integer) || inches.is_a?(Float))
|
43
|
-
inches.to_f * 33.8639
|
44
|
-
end
|
45
|
-
|
46
|
-
#
|
47
|
-
# ACCESSORS
|
48
|
-
#
|
49
|
-
|
50
|
-
# store millibars
|
51
|
-
#
|
52
|
-
def mb=(mb)
|
53
|
-
return if !mb || !(mb.is_a?(Integer) || mb.is_a?(Float))
|
54
|
-
@millibars = mb.to_f
|
55
|
-
self.update_inches(mb.to_f)
|
56
|
-
end
|
57
|
-
|
58
|
-
# store inches
|
59
|
-
#
|
60
|
-
def in=(inches)
|
61
|
-
return if !inches || !(inches.is_a?(Integer) || inches.is_a?(Float))
|
62
|
-
@inches = inches.to_f
|
63
|
-
self.update_millibars(inches.to_f)
|
64
|
-
end
|
65
|
-
|
66
|
-
# return the stored millibars or convert from inches
|
67
|
-
#
|
68
|
-
def mb(as_integer=true)
|
69
|
-
mb = (@millibars || Data::Pressure.in_to_mb(@inches))
|
70
|
-
mb ? (as_integer ? mb.to_i : (100*mb).round/100.0) : nil
|
71
|
-
end
|
72
|
-
|
73
|
-
# return the stored inches or convert from millibars
|
74
|
-
#
|
75
|
-
def in(as_integer=true)
|
76
|
-
inches = (@inches || Data::Pressure.mb_to_in(@millibars))
|
77
|
-
inches ? (as_integer ? inches.to_i : (100*inches).round/100.0) : nil
|
78
|
-
end
|
79
|
-
|
80
|
-
#
|
81
|
-
# OPERATORS
|
82
|
-
#
|
13
|
+
def convert_imperial_to_metric(imperial_value)
|
14
|
+
imperial_value.to_f * 33.8639
|
15
|
+
end
|
83
16
|
|
84
|
-
|
85
|
-
|
17
|
+
def convert_metric_to_imperial(metric_value)
|
18
|
+
metric_value.to_f * 0.02953
|
19
|
+
end
|
86
20
|
end
|
87
|
-
|
88
|
-
#
|
89
|
-
# HELPERS
|
90
|
-
#
|
91
|
-
|
92
|
-
# will just return the value (no units)
|
93
|
-
#
|
94
|
-
def to_i(metric=nil)
|
95
|
-
(metric || (metric.nil? && self.metric?)) ? self.mb : self.in
|
96
|
-
end
|
97
|
-
|
98
|
-
# will just return the value (no units) with more precision
|
99
|
-
#
|
100
|
-
def to_f(metric=nil)
|
101
|
-
(metric || (metric.nil? && self.metric?)) ? self.mb(false) : self.in(false)
|
102
|
-
end
|
103
|
-
|
104
|
-
# will return the value with units
|
105
|
-
#
|
106
|
-
def to_s(metric=nil)
|
107
|
-
(metric || (metric.nil? && self.metric?)) ? "#{self.mb} #{METRIC_UNITS}" : "#{self.in} #{IMPERIAL_UNITS}"
|
108
|
-
end
|
109
|
-
|
110
|
-
# will just return the units (no value)
|
111
|
-
#
|
112
|
-
def units(metric=nil)
|
113
|
-
(metric || (metric.nil? && self.metric?)) ? METRIC_UNITS : IMPERIAL_UNITS
|
114
|
-
end
|
115
|
-
|
116
|
-
# when we set inches, it is possible the a non-equivalent value of
|
117
|
-
# millibars remains. if so, clear it.
|
118
|
-
#
|
119
|
-
def update_millibars(inches)
|
120
|
-
return unless @millibars
|
121
|
-
difference = Data::Pressure.in_to_mb(inches.to_f) - @millibars
|
122
|
-
# only clear millibars if the stored millibars is off be more then 1 unit
|
123
|
-
# then the conversion of inches
|
124
|
-
@millibars = nil unless difference.abs <= 1.0
|
125
|
-
end
|
126
|
-
|
127
|
-
# when we set millibars, it is possible the a non-equivalent value of
|
128
|
-
# inches remains. if so, clear it.
|
129
|
-
#
|
130
|
-
def update_inches(mb)
|
131
|
-
return unless @inches
|
132
|
-
difference = Data::Pressure.mb_to_in(mb.to_f) - @inches
|
133
|
-
# only clear inches if the stored inches is off be more then 1 unit
|
134
|
-
# then the conversion of millibars
|
135
|
-
@inches = nil unless difference.abs <= 1.0
|
136
|
-
end
|
137
|
-
|
138
|
-
def nil?
|
139
|
-
(@millibars || @inches) ? false : true
|
140
|
-
end
|
141
|
-
|
142
21
|
end
|
143
22
|
end
|
data/lib/barometer/data/sun.rb
CHANGED
@@ -1,33 +1,33 @@
|
|
1
1
|
module Barometer
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
# Used to store sunrise and sunset information
|
6
|
-
#
|
7
|
-
class Data::Sun
|
2
|
+
module Data
|
3
|
+
class Sun
|
4
|
+
include Virtus.value_object
|
8
5
|
|
9
|
-
|
6
|
+
attribute :rise, ::Time
|
7
|
+
attribute :set, ::Time
|
10
8
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@rise = rise
|
15
|
-
@set = set
|
16
|
-
end
|
9
|
+
def nil?
|
10
|
+
!(rise || set)
|
11
|
+
end
|
17
12
|
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
def after_rise?(time)
|
14
|
+
time >= rise
|
15
|
+
end
|
21
16
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
17
|
+
def before_set?(time)
|
18
|
+
time <= set
|
19
|
+
end
|
26
20
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
21
|
+
def to_s
|
22
|
+
[_to_s('rise', rise), _to_s('set', set)].compact.join(', ')
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
31
26
|
|
27
|
+
def _to_s(prefix, value)
|
28
|
+
return unless value
|
29
|
+
"#{prefix}: #{value.strftime('%H:%M')}"
|
30
|
+
end
|
31
|
+
end
|
32
32
|
end
|
33
33
|
end
|
@@ -1,177 +1,22 @@
|
|
1
1
|
module Barometer
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
# is that you can create a number (in a certain unit), then
|
7
|
-
# get that number back already converted to another unit.
|
8
|
-
#
|
9
|
-
# All comparison operations will be done in the absolute
|
10
|
-
# scale of Kelvin (K)
|
11
|
-
#
|
12
|
-
class Data::Temperature < Data::Units
|
2
|
+
module Data
|
3
|
+
class Temperature < ConvertableUnits
|
4
|
+
def c; metric; end
|
5
|
+
def f; imperial; end
|
13
6
|
|
14
|
-
|
15
|
-
|
7
|
+
def units
|
8
|
+
metric? ? 'C' : 'F'
|
9
|
+
end
|
16
10
|
|
17
|
-
|
11
|
+
private
|
18
12
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@kelvin = nil
|
23
|
-
super(metric)
|
24
|
-
end
|
25
|
-
|
26
|
-
def metric_default=(value); self.c = value; end
|
27
|
-
def imperial_default=(value); self.f = value; end
|
28
|
-
|
29
|
-
#
|
30
|
-
# CONVERTERS
|
31
|
-
#
|
32
|
-
|
33
|
-
def self.c_to_k(c)
|
34
|
-
return nil unless c && (c.is_a?(Integer) || c.is_a?(Float))
|
35
|
-
273.15 + c.to_f
|
36
|
-
end
|
37
|
-
|
38
|
-
# Tf = (9/5)*Tc+32
|
39
|
-
#
|
40
|
-
def self.c_to_f(c)
|
41
|
-
return nil unless c && (c.is_a?(Integer) || c.is_a?(Float))
|
42
|
-
((9.0/5.0)*c.to_f)+32.0
|
43
|
-
end
|
44
|
-
|
45
|
-
# Tc = (5/9)*(Tf-32)
|
46
|
-
#
|
47
|
-
def self.f_to_c(f)
|
48
|
-
return nil unless f && (f.is_a?(Integer) || f.is_a?(Float))
|
49
|
-
(5.0/9.0)*(f.to_f-32.0)
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.f_to_k(f)
|
53
|
-
return nil unless f && (f.is_a?(Integer) || f.is_a?(Float))
|
54
|
-
c = self.f_to_c(f.to_f)
|
55
|
-
self.c_to_k(c)
|
56
|
-
end
|
57
|
-
|
58
|
-
def self.k_to_c(k)
|
59
|
-
return nil unless k && (k.is_a?(Integer) || k.is_a?(Float))
|
60
|
-
k.to_f - 273.15
|
61
|
-
end
|
62
|
-
|
63
|
-
def self.k_to_f(k)
|
64
|
-
return nil unless k && (k.is_a?(Integer) || k.is_a?(Float))
|
65
|
-
c = self.k_to_c(k.to_f)
|
66
|
-
self.c_to_f(c)
|
67
|
-
end
|
68
|
-
|
69
|
-
#
|
70
|
-
# ACCESSORS
|
71
|
-
#
|
72
|
-
|
73
|
-
# store celsius and kelvin
|
74
|
-
#
|
75
|
-
def c=(c)
|
76
|
-
return if !c || !(c.is_a?(Integer) || c.is_a?(Float))
|
77
|
-
@celsius = c.to_f
|
78
|
-
@kelvin = Data::Temperature.c_to_k(c.to_f)
|
79
|
-
self.update_fahrenheit(c.to_f)
|
80
|
-
end
|
81
|
-
|
82
|
-
# store fahrenheit and kelvin
|
83
|
-
#
|
84
|
-
def f=(f)
|
85
|
-
return if !f || !(f.is_a?(Integer) || f.is_a?(Float))
|
86
|
-
@fahrenheit = f.to_f
|
87
|
-
@kelvin = Data::Temperature.f_to_k(f.to_f)
|
88
|
-
self.update_celsius(f.to_f)
|
89
|
-
end
|
90
|
-
|
91
|
-
# store kelvin, convert to all
|
92
|
-
#
|
93
|
-
def k=(k)
|
94
|
-
return if !k || !(k.is_a?(Integer) || k.is_a?(Float))
|
95
|
-
@kelvin = k.to_f
|
96
|
-
@celsius = Data::Temperature.k_to_c(k.to_f)
|
97
|
-
@fahrenheit = Data::Temperature.k_to_f(k.to_f)
|
98
|
-
end
|
13
|
+
def convert_imperial_to_metric(imperial_value)
|
14
|
+
(5.0/9.0)*(imperial_value.to_f-32.0)
|
15
|
+
end
|
99
16
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
c = (@celsius || Data::Temperature.k_to_c(@kelvin))
|
104
|
-
c ? (as_integer ? c.to_i : (100*c).round/100.0) : nil
|
17
|
+
def convert_metric_to_imperial(metric_value)
|
18
|
+
((9.0/5.0)*metric_value.to_f)+32.0
|
19
|
+
end
|
105
20
|
end
|
106
|
-
|
107
|
-
# return the stored fahrenheit or convert from Kelvin
|
108
|
-
#
|
109
|
-
def f(as_integer=true)
|
110
|
-
f = (@fahrenheit || Data::Temperature.k_to_f(@kelvin))
|
111
|
-
f ? (as_integer ? f.to_i : (100*f).round/100.0) : nil
|
112
|
-
end
|
113
|
-
|
114
|
-
#
|
115
|
-
# OPERATORS
|
116
|
-
#
|
117
|
-
|
118
|
-
def <=>(other)
|
119
|
-
@kelvin <=> other.kelvin
|
120
|
-
end
|
121
|
-
|
122
|
-
#
|
123
|
-
# HELPERS
|
124
|
-
#
|
125
|
-
|
126
|
-
# will just return the value (no units)
|
127
|
-
#
|
128
|
-
def to_i(metric=nil)
|
129
|
-
(metric || (metric.nil? && self.metric?)) ? self.c : self.f
|
130
|
-
end
|
131
|
-
|
132
|
-
# will just return the value (no units) with more precision
|
133
|
-
#
|
134
|
-
def to_f(metric=nil)
|
135
|
-
(metric || (metric.nil? && self.metric?)) ? self.c(false) : self.f(false)
|
136
|
-
end
|
137
|
-
|
138
|
-
# will return the value with units
|
139
|
-
#
|
140
|
-
def to_s(metric=nil)
|
141
|
-
(metric || (metric.nil? && self.metric?)) ? "#{self.c} #{METRIC_UNITS}" : "#{self.f} #{IMPERIAL_UNITS}"
|
142
|
-
end
|
143
|
-
|
144
|
-
# will just return the units (no value)
|
145
|
-
#
|
146
|
-
def units(metric=nil)
|
147
|
-
(metric || (metric.nil? && self.metric?)) ? METRIC_UNITS : IMPERIAL_UNITS
|
148
|
-
end
|
149
|
-
|
150
|
-
# when we set fahrenheit, it is possible the a non-equivalent value of
|
151
|
-
# celsius remains. if so, clear it.
|
152
|
-
#
|
153
|
-
def update_celsius(f)
|
154
|
-
return unless @celsius
|
155
|
-
difference = Data::Temperature.f_to_c(f.to_f) - @celsius
|
156
|
-
# only clear celsius if the stored celsius is off be more then 1 degree
|
157
|
-
# then the conversion of fahrenheit
|
158
|
-
@celsius = nil unless difference.abs <= 1.0
|
159
|
-
end
|
160
|
-
|
161
|
-
# when we set celsius, it is possible the a non-equivalent value of
|
162
|
-
# fahrenheit remains. if so, clear it.
|
163
|
-
#
|
164
|
-
def update_fahrenheit(c)
|
165
|
-
return unless @fahrenheit
|
166
|
-
difference = Data::Temperature.c_to_f(c.to_f) - @fahrenheit
|
167
|
-
# only clear fahrenheit if the stored fahrenheit is off be more then 1 degree
|
168
|
-
# then the conversion of celsius
|
169
|
-
@fahrenheit = nil unless difference.abs <= 1.0
|
170
|
-
end
|
171
|
-
|
172
|
-
def nil?
|
173
|
-
(@celsius || @fahrenheit || @kelvin) ? false : true
|
174
|
-
end
|
175
|
-
|
176
21
|
end
|
177
22
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Barometer
|
2
|
+
module Data
|
3
|
+
class Vector < ConvertableUnits
|
4
|
+
attr_reader :bearing
|
5
|
+
|
6
|
+
def kph; metric; end
|
7
|
+
def mph; imperial; end
|
8
|
+
|
9
|
+
def units
|
10
|
+
metric? ? 'kph' : 'mph'
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
[super, bearing_to_s].compact.join(' @ ')
|
15
|
+
end
|
16
|
+
|
17
|
+
def nil?
|
18
|
+
super && bearing.nil?
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def convert_imperial_to_metric(imperial_value)
|
24
|
+
imperial_value.to_f * 1.609
|
25
|
+
end
|
26
|
+
|
27
|
+
def convert_metric_to_imperial(metric_value)
|
28
|
+
metric_value.to_f * 0.622
|
29
|
+
end
|
30
|
+
|
31
|
+
def parse_extra_values!(args)
|
32
|
+
@bearing = args.pop if args.size > 1
|
33
|
+
end
|
34
|
+
|
35
|
+
def bearing_to_s
|
36
|
+
"#{bearing} degrees" unless bearing.nil?
|
37
|
+
end
|
38
|
+
|
39
|
+
def freeze_extra
|
40
|
+
@bearing.freeze
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|