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,145 +0,0 @@
|
|
1
|
-
require 'date'
|
2
|
-
module Barometer
|
3
|
-
#
|
4
|
-
# A simple DateTime class
|
5
|
-
#
|
6
|
-
# A time class that represents the local date_time ...
|
7
|
-
# it has no concept of time zone
|
8
|
-
#
|
9
|
-
class Data::LocalDateTime < Data::LocalTime
|
10
|
-
|
11
|
-
attr_reader :year, :month, :day
|
12
|
-
|
13
|
-
def initialize(y,mon,d,h=0,m=0,s=0)
|
14
|
-
raise(ArgumentError, "invalid date") unless y && mon && d && Date.civil(y,mon,d)
|
15
|
-
@year = y
|
16
|
-
@month = mon
|
17
|
-
@day = d
|
18
|
-
super(h,m,s)
|
19
|
-
self
|
20
|
-
end
|
21
|
-
|
22
|
-
def year=(y)
|
23
|
-
unless y && y.is_a?(Fixnum) && Date.civil(y,@month,@day)
|
24
|
-
raise(ArgumentError, "invalid year")
|
25
|
-
end
|
26
|
-
@year = y
|
27
|
-
end
|
28
|
-
|
29
|
-
def month=(m)
|
30
|
-
unless m && m.is_a?(Fixnum) && Date.civil(@year,m,@day)
|
31
|
-
raise(ArgumentError, "invalid month")
|
32
|
-
end
|
33
|
-
@month = m
|
34
|
-
end
|
35
|
-
|
36
|
-
def day=(d)
|
37
|
-
unless d && d.is_a?(Fixnum) && Date.civil(@year,@month,d)
|
38
|
-
raise(ArgumentError, "invalid day")
|
39
|
-
end
|
40
|
-
@day = d
|
41
|
-
end
|
42
|
-
|
43
|
-
def parse(string, format=nil)
|
44
|
-
return unless string
|
45
|
-
new_date = Data::LocalDateTime.parse(string, format)
|
46
|
-
@year = new_date.year
|
47
|
-
@month = new_date.month
|
48
|
-
@day = new_date.day
|
49
|
-
@hour = new_date.hour
|
50
|
-
@min = new_date.min
|
51
|
-
@sec = new_date.sec
|
52
|
-
self
|
53
|
-
end
|
54
|
-
|
55
|
-
def self.parse(string, format=nil)
|
56
|
-
return nil unless string
|
57
|
-
return string if string.is_a?(Data::LocalDateTime)
|
58
|
-
|
59
|
-
year = nil; month = nil; day = nil;
|
60
|
-
hour = nil; min = nil; sec = nil;
|
61
|
-
if string.is_a?(Time) || string.is_a?(DateTime)
|
62
|
-
year = string.year
|
63
|
-
month = string.mon
|
64
|
-
day = string.day
|
65
|
-
hour = string.hour
|
66
|
-
min = string.min
|
67
|
-
sec = string.sec
|
68
|
-
elsif string.is_a?(Date)
|
69
|
-
year = string.year
|
70
|
-
month = string.mon
|
71
|
-
day = string.day
|
72
|
-
elsif string.is_a?(String)
|
73
|
-
begin
|
74
|
-
datetime = if format
|
75
|
-
Time.strptime(string, format)
|
76
|
-
else
|
77
|
-
DateTime.parse(string)
|
78
|
-
end
|
79
|
-
year = datetime.year
|
80
|
-
month = datetime.mon
|
81
|
-
day = datetime.day
|
82
|
-
hour = datetime.hour
|
83
|
-
min = datetime.min
|
84
|
-
sec = datetime.sec
|
85
|
-
rescue ArgumentError
|
86
|
-
return nil
|
87
|
-
end
|
88
|
-
end
|
89
|
-
Data::LocalDateTime.new(year, month, day, hour, min, sec)
|
90
|
-
end
|
91
|
-
|
92
|
-
# convert to a Date class
|
93
|
-
#
|
94
|
-
def to_d
|
95
|
-
Date.civil(@year, @month, @day)
|
96
|
-
end
|
97
|
-
|
98
|
-
# convert to a DateTime class
|
99
|
-
#
|
100
|
-
def to_dt
|
101
|
-
DateTime.new(@year, @month, @day, @hour, @min, @sec)
|
102
|
-
end
|
103
|
-
|
104
|
-
def <=>(other)
|
105
|
-
if other.is_a?(String) || other.is_a?(Time) || other.is_a?(DateTime) || other.is_a?(Date)
|
106
|
-
the_other = Data::LocalDateTime.parse(other)
|
107
|
-
else
|
108
|
-
the_other = other
|
109
|
-
end
|
110
|
-
raise ArgumentError unless the_other.is_a?(Data::LocalDateTime) || the_other.is_a?(Data::LocalTime)
|
111
|
-
|
112
|
-
if ((other.is_a?(String) || other.is_a?(Time) || other.is_a?(DateTime)) &&
|
113
|
-
the_other.is_a?(Data::LocalDateTime)) || other.is_a?(Data::LocalDateTime)
|
114
|
-
# we are counting days + seconds
|
115
|
-
if (_total_days <=> the_other._total_days) == 0
|
116
|
-
return total_seconds <=> the_other.total_seconds
|
117
|
-
else
|
118
|
-
return _total_days <=> the_other._total_days
|
119
|
-
end
|
120
|
-
elsif other.is_a?(Date) && the_other.is_a?(Data::LocalDateTime)
|
121
|
-
# we are counting days
|
122
|
-
return _total_days <=> the_other._total_days
|
123
|
-
elsif the_other.is_a?(Data::LocalTime)
|
124
|
-
# we are counting seconds
|
125
|
-
return total_seconds <=> the_other.total_seconds
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
def to_s(time=false)
|
130
|
-
datetime = self.to_dt
|
131
|
-
format = (time ? "%Y-%m-%d %I:%M:%S %p" : "%Y-%m-%d")
|
132
|
-
datetime.strftime(format).downcase
|
133
|
-
end
|
134
|
-
|
135
|
-
def nil?; @year == 0 && @month == 0 && @day == 0 && super; end
|
136
|
-
|
137
|
-
# this assumes all years have 366 days (which only is true for leap years)
|
138
|
-
# but since this is just for comparisons, this will be accurate
|
139
|
-
#
|
140
|
-
def _total_days
|
141
|
-
self.to_d.yday + (@year * 366)
|
142
|
-
end
|
143
|
-
|
144
|
-
end
|
145
|
-
end
|
@@ -1,134 +0,0 @@
|
|
1
|
-
module Barometer
|
2
|
-
#
|
3
|
-
# A simple Time class
|
4
|
-
#
|
5
|
-
# A time class that represents the local time ...
|
6
|
-
# it has no concept of time zone or date
|
7
|
-
#
|
8
|
-
class Data::LocalTime
|
9
|
-
include Comparable
|
10
|
-
|
11
|
-
attr_reader :hour, :min, :sec
|
12
|
-
|
13
|
-
def initialize(h=0,m=0,s=0)
|
14
|
-
self.hour = h
|
15
|
-
self.min = m
|
16
|
-
self.sec = s
|
17
|
-
self
|
18
|
-
end
|
19
|
-
|
20
|
-
def hour=(h)
|
21
|
-
raise ArgumentError unless (h.is_a?(Fixnum) || h.nil?)
|
22
|
-
hour_cap = 24
|
23
|
-
if h.to_i >= hour_cap.to_i
|
24
|
-
@hour = h.divmod(hour_cap)[1]
|
25
|
-
else
|
26
|
-
@hour = h
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def min=(m)
|
31
|
-
raise ArgumentError unless (m.is_a?(Fixnum) || m.nil?)
|
32
|
-
minute_cap = 60
|
33
|
-
if m.to_i >= minute_cap.to_i
|
34
|
-
result = m.divmod(minute_cap)
|
35
|
-
@min = result[1]
|
36
|
-
self.hour = @hour + result[0]
|
37
|
-
else
|
38
|
-
@min = m
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def sec=(s)
|
43
|
-
raise ArgumentError unless (s.is_a?(Fixnum) || s.nil?)
|
44
|
-
second_cap = 60
|
45
|
-
if s.to_i >= second_cap.to_i
|
46
|
-
result = s.divmod(second_cap)
|
47
|
-
@sec = result[1]
|
48
|
-
self.min = @min + result[0]
|
49
|
-
else
|
50
|
-
@sec = s
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def parse(string)
|
55
|
-
if string.is_a?(Time) || string.is_a?(DateTime)
|
56
|
-
@hour = string.hour
|
57
|
-
@min = string.min
|
58
|
-
@sec = string.sec
|
59
|
-
elsif string.is_a?(String)
|
60
|
-
time = Time.parse(string)
|
61
|
-
@hour = time.hour
|
62
|
-
@min = time.min
|
63
|
-
@sec = time.sec
|
64
|
-
end
|
65
|
-
self
|
66
|
-
end
|
67
|
-
|
68
|
-
def self.parse(string)
|
69
|
-
return string if string.is_a?(Data::LocalTime)
|
70
|
-
local = Data::LocalTime.new
|
71
|
-
local.parse(string)
|
72
|
-
local
|
73
|
-
end
|
74
|
-
|
75
|
-
# convert to a Time class
|
76
|
-
#
|
77
|
-
def to_t
|
78
|
-
date = Date.today
|
79
|
-
Time.local(date.year,date.month,date.day,@hour,@min,@sec)
|
80
|
-
end
|
81
|
-
|
82
|
-
def total_seconds
|
83
|
-
(@hour * 60 * 60) + (@min * 60) + @sec
|
84
|
-
end
|
85
|
-
|
86
|
-
def <=>(other)
|
87
|
-
if other.is_a?(String) || other.is_a?(Time) || other.is_a?(DateTime)
|
88
|
-
the_other = Data::LocalTime.parse(other)
|
89
|
-
else
|
90
|
-
the_other = other
|
91
|
-
end
|
92
|
-
raise ArgumentError unless the_other.is_a?(Data::LocalTime)
|
93
|
-
total_seconds <=> the_other.total_seconds
|
94
|
-
end
|
95
|
-
|
96
|
-
def +(seconds)
|
97
|
-
local_time = Data::LocalTime.new
|
98
|
-
if seconds.is_a?(Fixnum) || seconds.is_a?(Float)
|
99
|
-
local_time.sec = self.total_seconds + seconds.to_i
|
100
|
-
elsif seconds.is_a?(Data::LocalTime)
|
101
|
-
this_total = self.total_seconds + seconds.total_seconds
|
102
|
-
local_time.sec = this_total
|
103
|
-
end
|
104
|
-
local_time
|
105
|
-
end
|
106
|
-
|
107
|
-
def -(seconds)
|
108
|
-
local_time = Data::LocalTime.new
|
109
|
-
if seconds.is_a?(Fixnum) || seconds.is_a?(Float)
|
110
|
-
local_time.sec = self.total_seconds - seconds.to_i
|
111
|
-
elsif seconds.is_a?(Data::LocalTime)
|
112
|
-
#self.sec += seconds.total_seconds
|
113
|
-
this_total = self.total_seconds - seconds.total_seconds
|
114
|
-
local_time.sec = this_total
|
115
|
-
end
|
116
|
-
local_time
|
117
|
-
end
|
118
|
-
|
119
|
-
def diff(other)
|
120
|
-
the_other = Data::LocalTime.parse(other)
|
121
|
-
raise ArgumentError unless the_other.is_a?(Data::LocalTime)
|
122
|
-
(self.total_seconds - the_other.total_seconds).to_i.abs
|
123
|
-
end
|
124
|
-
|
125
|
-
def to_s(seconds=false)
|
126
|
-
time = self.to_t
|
127
|
-
format = (seconds ? "%I:%M:%S %p" : "%I:%M %p")
|
128
|
-
time.strftime(format).downcase
|
129
|
-
end
|
130
|
-
|
131
|
-
def nil?; @hour == 0 && @min == 0 && @sec == 0; end
|
132
|
-
|
133
|
-
end
|
134
|
-
end
|
data/lib/barometer/data/speed.rb
DELETED
@@ -1,158 +0,0 @@
|
|
1
|
-
module Barometer
|
2
|
-
#
|
3
|
-
# A simple Speed class
|
4
|
-
#
|
5
|
-
# Think of this like the Integer class. Enhancement
|
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
|
-
# Speed is a vector, thus it has a perticular direction, although
|
10
|
-
# the direction is independent of the units
|
11
|
-
#
|
12
|
-
# All comparison operations will be done in metric
|
13
|
-
#
|
14
|
-
# NOTE: this currently only supports the scale of
|
15
|
-
# kilometers (km) and miles (m) per hour. There is currently
|
16
|
-
# no way to scale to smaller units (eg km -> m -> mm)
|
17
|
-
#
|
18
|
-
class Data::Speed < Data::Units
|
19
|
-
|
20
|
-
METRIC_UNITS = "kph"
|
21
|
-
IMPERIAL_UNITS = "mph"
|
22
|
-
|
23
|
-
attr_accessor :kilometers, :miles
|
24
|
-
attr_accessor :degrees, :direction
|
25
|
-
|
26
|
-
def initialize(metric=true)
|
27
|
-
@kilometers = nil
|
28
|
-
@miles = nil
|
29
|
-
@degrees = nil
|
30
|
-
@direction = nil
|
31
|
-
super(metric)
|
32
|
-
end
|
33
|
-
|
34
|
-
def metric_default=(value); self.kph = value; end
|
35
|
-
def imperial_default=(value); self.mph = value; end
|
36
|
-
|
37
|
-
#
|
38
|
-
# CONVERTERS
|
39
|
-
#
|
40
|
-
|
41
|
-
def self.km_to_m(km)
|
42
|
-
return nil unless km && (km.is_a?(Integer) || km.is_a?(Float))
|
43
|
-
km.to_f * 0.622
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.m_to_km(m)
|
47
|
-
return nil unless m && (m.is_a?(Integer) || m.is_a?(Float))
|
48
|
-
m.to_f * 1.609
|
49
|
-
end
|
50
|
-
|
51
|
-
#
|
52
|
-
# ACCESSORS
|
53
|
-
#
|
54
|
-
|
55
|
-
# store kilometers per hour
|
56
|
-
#
|
57
|
-
def kph=(kph)
|
58
|
-
return if !kph || !(kph.is_a?(Integer) || kph.is_a?(Float))
|
59
|
-
@kilometers = kph.to_f
|
60
|
-
self.update_miles(kph.to_f)
|
61
|
-
end
|
62
|
-
|
63
|
-
# store miles per hour
|
64
|
-
#
|
65
|
-
def mph=(mph)
|
66
|
-
return if !mph || !(mph.is_a?(Integer) || mph.is_a?(Float))
|
67
|
-
@miles = mph.to_f
|
68
|
-
self.update_kilometers(mph.to_f)
|
69
|
-
end
|
70
|
-
|
71
|
-
def direction=(direction)
|
72
|
-
return if !direction || !direction.is_a?(String)
|
73
|
-
@direction = direction
|
74
|
-
end
|
75
|
-
|
76
|
-
def degrees=(degrees)
|
77
|
-
return if !degrees || !(degrees.is_a?(Integer) || degrees.is_a?(Float))
|
78
|
-
@degrees = degrees
|
79
|
-
end
|
80
|
-
|
81
|
-
# return the stored kilometers or convert from miles
|
82
|
-
#
|
83
|
-
def kph(as_integer=true)
|
84
|
-
km = (@kilometers || Data::Speed.m_to_km(@miles))
|
85
|
-
km ? (as_integer ? km.to_i : (100*km).round/100.0) : nil
|
86
|
-
end
|
87
|
-
|
88
|
-
# return the stored miles or convert from kilometers
|
89
|
-
#
|
90
|
-
def mph(as_integer=true)
|
91
|
-
m = (@miles || Data::Speed.km_to_m(@kilometers))
|
92
|
-
m ? (as_integer ? m.to_i : (100*m).round/100.0) : nil
|
93
|
-
end
|
94
|
-
|
95
|
-
#
|
96
|
-
# OPERATORS
|
97
|
-
#
|
98
|
-
|
99
|
-
def <=>(other)
|
100
|
-
self.kph <=> other.kph
|
101
|
-
end
|
102
|
-
|
103
|
-
#
|
104
|
-
# HELPERS
|
105
|
-
#
|
106
|
-
|
107
|
-
# will just return the value (no units)
|
108
|
-
#
|
109
|
-
def to_i(metric=nil)
|
110
|
-
(metric || (metric.nil? && self.metric?)) ? self.kph : self.mph
|
111
|
-
end
|
112
|
-
|
113
|
-
# will just return the value (no units) with more precision
|
114
|
-
#
|
115
|
-
def to_f(metric=nil)
|
116
|
-
(metric || (metric.nil? && self.metric?)) ? self.kph(false) : self.mph(false)
|
117
|
-
end
|
118
|
-
|
119
|
-
# will return the value with units
|
120
|
-
#
|
121
|
-
def to_s(metric=nil)
|
122
|
-
(metric || (metric.nil? && self.metric?)) ? "#{self.kph} #{METRIC_UNITS}" : "#{self.mph} #{IMPERIAL_UNITS}"
|
123
|
-
end
|
124
|
-
|
125
|
-
# will just return the units (no value)
|
126
|
-
#
|
127
|
-
def units(metric=nil)
|
128
|
-
(metric || (metric.nil? && self.metric?)) ? METRIC_UNITS : IMPERIAL_UNITS
|
129
|
-
end
|
130
|
-
|
131
|
-
# when we set miles, it is possible the a non-equivalent value of
|
132
|
-
# kilometers remains. if so, clear it.
|
133
|
-
#
|
134
|
-
def update_kilometers(m)
|
135
|
-
return unless @kilometers
|
136
|
-
difference = Data::Speed.m_to_km(m.to_f) - @kilometers
|
137
|
-
# only clear kilometers if the stored kilometers is off be more then 1 unit
|
138
|
-
# then the conversion of miles
|
139
|
-
@kilometers = nil unless difference.abs <= 1.0
|
140
|
-
end
|
141
|
-
|
142
|
-
# when we set kilometers, it is possible the a non-equivalent value of
|
143
|
-
# miles remains. if so, clear it.
|
144
|
-
#
|
145
|
-
def update_miles(km)
|
146
|
-
return unless @miles
|
147
|
-
difference = Data::Speed.km_to_m(km.to_f) - @miles
|
148
|
-
# only clear miles if the stored miles is off be more then 1 unit
|
149
|
-
# then the conversion of kilometers
|
150
|
-
@miles = nil unless difference.abs <= 1.0
|
151
|
-
end
|
152
|
-
|
153
|
-
def nil?
|
154
|
-
(@kilometers || @miles) ? false : true
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
158
|
-
end
|
data/lib/barometer/data/units.rb
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
module Barometer
|
2
|
-
class Data::Units
|
3
|
-
include Comparable
|
4
|
-
|
5
|
-
attr_accessor :metric
|
6
|
-
|
7
|
-
def initialize(metric=true); @metric = metric; end
|
8
|
-
|
9
|
-
#
|
10
|
-
# HELPERS
|
11
|
-
#
|
12
|
-
|
13
|
-
def metric?; @metric; end
|
14
|
-
def metric!; @metric=true; end
|
15
|
-
def imperial!; @metric=false; end
|
16
|
-
|
17
|
-
# assigns a value to the right attribute based on metric setting
|
18
|
-
#
|
19
|
-
def <<(value)
|
20
|
-
return unless value
|
21
|
-
|
22
|
-
# these values can be treated like 'nil'
|
23
|
-
nil_values = ["NA", "N/A", ""]
|
24
|
-
|
25
|
-
begin
|
26
|
-
if value.is_a?(Array)
|
27
|
-
value_m = value[0].to_f if (value[0] && !nil_values.include?(value[0]))
|
28
|
-
value_i = value[1].to_f if (value[1] && !nil_values.include?(value[1]))
|
29
|
-
value_b = nil
|
30
|
-
else
|
31
|
-
value_m = nil
|
32
|
-
value_i = nil
|
33
|
-
value_b = value.to_f if (value && !nil_values.include?(value))
|
34
|
-
end
|
35
|
-
rescue
|
36
|
-
# do nothing
|
37
|
-
end
|
38
|
-
|
39
|
-
self.metric? ? self.metric_default = value_m || value_b :
|
40
|
-
self.imperial_default = value_i || value_b
|
41
|
-
end
|
42
|
-
|
43
|
-
# stubs
|
44
|
-
#
|
45
|
-
def metric_default=(value); raise NotImplementedError; end
|
46
|
-
def imperial_default=(value); raise NotImplementedError; end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|