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
data/.gitignore
CHANGED
data/.pelusa.yml
ADDED
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
-
#
|
1
|
+
# Barometer
|
2
2
|
|
3
3
|
[](https://travis-ci.org/attack/barometer)
|
4
|
+
[](http://badge.fury.io/rb/barometer)
|
5
|
+
[](https://codeclimate.com/github/attack/barometer)
|
6
|
+
[](https://coveralls.io/r/attack/barometer)
|
4
7
|
|
5
8
|
A multi API consuming weather forecasting superstar.
|
6
9
|
|
@@ -12,72 +15,49 @@ unavailable.
|
|
12
15
|
|
13
16
|
Barometer handles all conversions of the supplied query, so that the
|
14
17
|
same query can be used for all (or most) services, even if they don't
|
15
|
-
support the query directly. See the "
|
16
|
-
this.
|
18
|
+
support the query directly. See the "[Queries](#queries)" section for more info.
|
17
19
|
|
18
|
-
##
|
20
|
+
## Key Features
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
22
|
+
* works with ruby 1.9.x, 2.0, Rubinius (see
|
23
|
+
[Travis CI status](https://travis-ci.org/attack/barometer) to confirm)
|
24
|
+
* supports 5 weather services, more planned
|
25
|
+
* the same query can be used with any supported weather service
|
26
|
+
* provides a powerful data object to hold the weather information
|
27
|
+
* provides a simple plugin api to allow more weather services to be added
|
28
|
+
* failover configuration
|
29
|
+
* multiple services configuration to provide average values
|
23
30
|
|
24
|
-
##
|
31
|
+
## Usage
|
25
32
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
Features to be added in the future:
|
31
|
-
* better command line output
|
32
|
-
* even more weather service drivers (hamweather)
|
33
|
-
* icon support
|
34
|
-
|
35
|
-
# dependencies
|
36
|
-
|
37
|
-
## Google API key
|
38
|
-
|
39
|
-
As stated on the Google Geocoding API website
|
40
|
-
(http://code.google.com/apis/maps/documentation/geocoding/), Google no longer
|
41
|
-
requires an API key. Therefore Barometer no longer requires a Google API key.
|
42
|
-
|
43
|
-
### other keys
|
44
|
-
|
45
|
-
The '~/.barometer' file can hold all your weather service API keys.
|
46
|
-
|
47
|
-
eg. weatherbug.com
|
48
|
-
|
49
|
-
weather_bug:
|
50
|
-
code: YOUR_API_CODE
|
51
|
-
|
52
|
-
eg. Yahoo! Placemaker
|
33
|
+
You can use barometer right out of the box, as it is configured to use one
|
34
|
+
register-less (no API key required) international weather service
|
35
|
+
(wunderground.com).
|
53
36
|
|
54
|
-
|
55
|
-
|
37
|
+
```ruby
|
38
|
+
require 'barometer'
|
56
39
|
|
57
|
-
|
40
|
+
barometer = Barometer.new('Paris')
|
41
|
+
weather = barometer.measure
|
58
42
|
|
59
|
-
|
60
|
-
|
61
|
-
faster development of this project.
|
43
|
+
puts weather.current.temperature
|
44
|
+
```
|
62
45
|
|
63
|
-
|
46
|
+
*See [detailed usage](#detailed-usage) further down.*
|
64
47
|
|
65
|
-
##
|
48
|
+
## Dependencies
|
66
49
|
|
67
|
-
|
68
|
-
This information doesn't mean that much if it can't be converted to times
|
69
|
-
that don't correspond to the applicable timezone.
|
70
|
-
Tzinfo handles this time zone manipulation.
|
50
|
+
[](https://gemnasium.com/attack/barometer)
|
71
51
|
|
72
|
-
|
52
|
+
## Queries
|
73
53
|
|
74
54
|
The query handling is one of the most beneficial and powerful features of
|
75
55
|
Barometer. Every weather service accepts a different set of possible
|
76
56
|
queries, so it usually is the case that the same query can only be used
|
77
57
|
for a couple weather services.
|
78
58
|
|
79
|
-
Barometer will allow the use of all query formats for all services
|
80
|
-
|
59
|
+
Barometer will allow the use of all query formats for all services.
|
60
|
+
It does this by first determining the original query format,
|
81
61
|
then converting the query to a compatible format for each specific
|
82
62
|
weather service.
|
83
63
|
|
@@ -85,7 +65,7 @@ For example, Yahoo! only accepts US Zip Code or Weather.com ID. With Barometer
|
|
85
65
|
you can query Yahoo! with a simple location (ie: Paris) or even an Airport
|
86
66
|
code (ICAO) and it will return the weather as expected.
|
87
67
|
|
88
|
-
|
68
|
+
### Acceptable Formats
|
89
69
|
|
90
70
|
* zipcode
|
91
71
|
* icao (international airport code)
|
@@ -94,45 +74,21 @@ code (ICAO) and it will return the weather as expected.
|
|
94
74
|
* weather.com ID
|
95
75
|
* location name (ie address, city, state, landmark, etc.)
|
96
76
|
* woeid (where on earth id, by Yahoo!)
|
77
|
+
* IPv4 address
|
97
78
|
|
98
|
-
|
99
|
-
support conversion to other formats.*
|
79
|
+
## Detailed Usage
|
100
80
|
|
101
|
-
|
81
|
+
### Sources
|
102
82
|
|
103
|
-
|
104
|
-
repeated during a measurement, thus limiting the number of web queries
|
105
|
-
needed.
|
83
|
+
The current available sources are:
|
106
84
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
85
|
+
* Wunderground.com (:wunderground) [default]
|
86
|
+
* Yahoo! Weather (:yahoo)
|
87
|
+
* WeatherBug.com (:weather_bug) [requires key]
|
88
|
+
* NOAA (:noaa)
|
89
|
+
* Forecast.io (:forecast_io) [requires key]
|
111
90
|
|
112
|
-
|
113
|
-
|
114
|
-
You can use barometer right out of the box, as it is configured to use one
|
115
|
-
register-less (no API key required) international weather service
|
116
|
-
(wunderground.com).
|
117
|
-
|
118
|
-
```ruby
|
119
|
-
require 'barometer'
|
120
|
-
|
121
|
-
barometer = Barometer.new("Paris")
|
122
|
-
weather = barometer.measure
|
123
|
-
|
124
|
-
puts weather.current.temperature
|
125
|
-
```
|
126
|
-
|
127
|
-
## sources
|
128
|
-
|
129
|
-
The available sources are:
|
130
|
-
|
131
|
-
Wunderground.com (:wunderground) [default]
|
132
|
-
Yahoo! Weather (:yahoo)
|
133
|
-
WeatherBug.com (:weather_bug) [requires key]
|
134
|
-
|
135
|
-
## source configuration
|
91
|
+
### Source Configuration
|
136
92
|
|
137
93
|
Barometer can be configured to use multiple weather service APIs (either in
|
138
94
|
a primary/failover config or in parallel). Each weather service can also
|
@@ -141,225 +97,111 @@ have its own config.
|
|
141
97
|
Weather services in parallel
|
142
98
|
|
143
99
|
```ruby
|
144
|
-
|
100
|
+
Barometer.config = { 1 => [:yahoo, :wunderground] }
|
145
101
|
```
|
146
102
|
|
147
103
|
Weather services in primary/failover
|
148
104
|
|
149
105
|
```ruby
|
150
|
-
|
106
|
+
Barometer.config = { 1 => [:yahoo], 2 => :wunderground }
|
151
107
|
```
|
152
108
|
|
153
109
|
Weather services, one with some configuration. In this case we are setting
|
154
110
|
a weight value, this weight is respected when calculating averages.
|
155
111
|
|
156
112
|
```ruby
|
157
|
-
|
113
|
+
Barometer.config = { 1 => [{wunderground: {weight: 2}}, :yahoo] }
|
158
114
|
```
|
159
115
|
|
160
116
|
Weather services, one with keys.
|
161
117
|
|
162
118
|
```ruby
|
163
|
-
|
119
|
+
Barometer.config = { 1 => [:yahoo, {weather_bug: {keys: {code: CODE_KEY} }}] }
|
164
120
|
```
|
165
121
|
|
166
|
-
|
122
|
+
#### Multiple weather API, with hierarchy
|
167
123
|
|
168
124
|
```ruby
|
169
|
-
|
125
|
+
require 'barometer'
|
170
126
|
|
171
|
-
|
172
|
-
|
127
|
+
# use yahoo and weather bug, if they both fail, use wunderground
|
128
|
+
Barometer.config = { 1 => [:yahoo, {weather_bug: {keys: {code: CODE_KEY} }}], 2 => :wunderground }
|
173
129
|
|
174
|
-
|
175
|
-
|
130
|
+
barometer = Barometer.new('Paris')
|
131
|
+
weather = barometer.measure
|
176
132
|
|
177
|
-
|
133
|
+
puts weather.current.temperture
|
178
134
|
```
|
179
135
|
|
180
|
-
|
181
|
-
|
182
|
-
You can use barometer from the command line.
|
136
|
+
### Command Line
|
183
137
|
|
184
|
-
|
138
|
+
Extracted to separate gem: [barometer-cli](http://github.com/attack/barometer-cli)
|
185
139
|
|
186
|
-
|
187
|
-
See the help for more command line information.
|
188
|
-
|
189
|
-
# barometer -h
|
190
|
-
|
191
|
-
### fail
|
192
|
-
|
193
|
-
What would cause a weather service to fail? The most obvious is that the
|
194
|
-
particular weather service in currently unavailable or not reachable.
|
195
|
-
Other possible reasons would include not having the API (or a valid API
|
196
|
-
key for the particular weather service, if required), not providing a
|
197
|
-
valid query, or providing a query for a location not supported by the
|
198
|
-
weather service.
|
199
|
-
|
200
|
-
For example, if you look at the example above, the query of "Paris" refers
|
201
|
-
to a city in France. Yahoo weather services only supports
|
202
|
-
weather results for USA (at least at the time of writing). Therefore,
|
203
|
-
Barometer would not use Yahoo, just WeatherBug and failover to use Wunderground
|
204
|
-
(if needed).
|
205
|
-
|
206
|
-
## searching
|
140
|
+
### Searching
|
207
141
|
|
208
142
|
After you have measured the data, Barometer provides several methods to help
|
209
143
|
you get the data you are after. All examples assume you already have measured
|
210
144
|
the data as shown in the above examples.
|
211
145
|
|
212
|
-
|
213
|
-
|
214
|
-
```ruby
|
215
|
-
weather.default # returns measurement for default source
|
216
|
-
weather.current # returns current_measurement for default
|
217
|
-
weather.now # returns current_measurement for default
|
218
|
-
weather.forecast # returns all forecast_measurements for default
|
219
|
-
weather.today # returns forecast_measurement for default today
|
220
|
-
weather.tomorrow # returns forecast_measurement for default tomorrow
|
221
|
-
|
222
|
-
puts weather.now.temperature.c
|
223
|
-
puts weather.tomorrow.high.c
|
224
|
-
```
|
225
|
-
|
226
|
-
### by source
|
146
|
+
#### By relativity
|
227
147
|
|
228
148
|
```ruby
|
229
|
-
|
230
|
-
|
149
|
+
weather.current # returns the first successful current_measurement
|
150
|
+
weather.forecast # returns the first successful forecast_measurements
|
151
|
+
weather.today # returns the first successful forecast_measurement for today
|
152
|
+
weather.tomorrow # returns the first successful forecast_measurement for tomorrow
|
231
153
|
|
232
|
-
|
154
|
+
puts weather.current.temperature.c
|
155
|
+
puts weather.tomorrow.high.c
|
233
156
|
```
|
234
157
|
|
235
|
-
|
158
|
+
#### By date
|
236
159
|
|
237
160
|
```ruby
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
weather.source(:wunderground).for(date) # same as above but specific source
|
161
|
+
# note, the date is the date of the locations weather, not the date of the
|
162
|
+
# user measuring the weather
|
163
|
+
date = Date.parse('01-01-2009')
|
164
|
+
weather.for(date) # returns the first successful forecast_measurement for the date
|
243
165
|
|
244
|
-
|
166
|
+
puts weather.for(date).high.c
|
245
167
|
```
|
246
168
|
|
247
|
-
|
169
|
+
#### By time
|
248
170
|
|
249
171
|
```ruby
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
weather.source(:wunderground).for(time) # same as above but specific source
|
172
|
+
# note, the time is the time of the locations weather, not the time of the
|
173
|
+
# user measuring the weather
|
174
|
+
time = Time.parse('13:00 01-01-2009')
|
175
|
+
weather.for(time) # returns the first successful forecast_measurement for the time
|
255
176
|
|
256
|
-
|
177
|
+
puts weather.for(time).low.f
|
257
178
|
```
|
258
179
|
|
259
|
-
|
180
|
+
### Averages
|
260
181
|
|
261
|
-
If you consume more then one weather service, Barometer
|
182
|
+
If you consume more then one weather service, Barometer will provide averages
|
262
183
|
for the values (currently only for the 'current' values and not the forecasted
|
263
184
|
values).
|
264
185
|
|
265
186
|
```ruby
|
266
|
-
|
187
|
+
require 'barometer'
|
267
188
|
|
268
|
-
|
269
|
-
|
270
|
-
Barometer.config = { 1 => [:yahoo, :wunderground] }
|
189
|
+
# use yahoo and wunderground
|
190
|
+
Barometer.config = { 1 => [:yahoo, :wunderground] }
|
271
191
|
|
272
|
-
|
273
|
-
|
192
|
+
barometer = Barometer.new('90210')
|
193
|
+
weather = barometer.measure
|
274
194
|
|
275
|
-
|
195
|
+
puts weather.temperture
|
276
196
|
```
|
277
197
|
|
278
198
|
This will calculate the average temperature as given by :yahoo and :wunderground
|
279
199
|
|
280
|
-
|
200
|
+
#### Weights
|
281
201
|
|
282
202
|
You can weight the values from a weather service so that the values from that
|
283
203
|
web service have more influence then other values. The weights are set in the
|
284
|
-
config ... see the config section
|
285
|
-
|
286
|
-
## simple answers
|
287
|
-
|
288
|
-
After you have measured the data, Barometer provides several "simple answer"
|
289
|
-
methods to help you get answers to some basic questions. All examples assume
|
290
|
-
you already have measured the data as shown in the above examples.
|
291
|
-
|
292
|
-
All of these questions are ultimately specific to the weather source(s) you
|
293
|
-
are configured to use. All sources that have successfully measured data
|
294
|
-
will be asked, but if there is no data that can answer the question then
|
295
|
-
there will be no answer.
|
296
|
-
|
297
|
-
### is it windy?
|
298
|
-
|
299
|
-
# 1st parameter is the threshold wind speed for being windy
|
300
|
-
# 2nd parameter is the utc_time for which you want to know the answer,
|
301
|
-
# this defaults to the current time
|
302
|
-
# NOTE: in my example the values are metric, so the threshold is 10 kph
|
303
|
-
|
304
|
-
weather.windy?(10)
|
305
|
-
|
306
|
-
### is it wet?
|
307
|
-
|
308
|
-
# 1st parameter is the threshold pop (%) for being wet
|
309
|
-
# 2nd parameter is the utc_time for which you want to know the answer,
|
310
|
-
# this defaults to the current time
|
311
|
-
# NOTE: in my example the threshold is 50 %
|
312
|
-
|
313
|
-
weather.wet?(50)
|
314
|
-
|
315
|
-
### is it sunny?
|
316
|
-
|
317
|
-
# 1st parameter is the utc_time for which you want to know the answer,
|
318
|
-
# this defaults to the current time
|
319
|
-
|
320
|
-
weather.sunny?
|
321
|
-
|
322
|
-
### is it day?
|
323
|
-
|
324
|
-
# 1st parameter is the utc_time for which you want to know the answer,
|
325
|
-
# this defaults to the current time
|
326
|
-
|
327
|
-
weather.day?
|
328
|
-
|
329
|
-
### is it night?
|
330
|
-
|
331
|
-
# 1st parameter is the utc_time for which you want to know the answer,
|
332
|
-
# this defaults to the current time
|
333
|
-
|
334
|
-
weather.night?
|
335
|
-
|
336
|
-
# design
|
337
|
-
|
338
|
-
* create a Barometer instance
|
339
|
-
* supply a query, there are very little restrictions on the format:
|
340
|
-
* city, country, specific address (basically anything Google will geocode)
|
341
|
-
* US zip code (skips conversion if weather service accepts this directly)
|
342
|
-
* postal code (skips conversion if weather service accepts this directly)
|
343
|
-
* latitude and longitude (skips conversion if weather service accepts this
|
344
|
-
directly)
|
345
|
-
* weather.com weather id (even if the service you are using doesn't use it)
|
346
|
-
* international airport code (skips conversion if weather service
|
347
|
-
accepts this directly)
|
348
|
-
* determine which weather services will be queried (one or multiple)
|
349
|
-
* if query conversion required for specific weather service, convert the query
|
350
|
-
* query the weather services
|
351
|
-
* save the data
|
352
|
-
* repeat weather service queries as needed
|
353
|
-
|
354
|
-
# extending
|
355
|
-
|
356
|
-
Barometer attempts to be a common API to any weather service API. I have included
|
357
|
-
several weather service 'drivers', but I know there are many more available.
|
358
|
-
Please use the provided ones as examples to create more.
|
359
|
-
|
360
|
-
# development
|
361
|
-
|
362
|
-
Barometer now uses 'bundler'. You just need to 'git clone' the repo and 'bundle install'.
|
204
|
+
config ... see the [config section](#source-configuration)
|
363
205
|
|
364
206
|
## Contributions
|
365
207
|
|
@@ -369,12 +211,15 @@ Thank you to these developers who have contributed. No contribution is too small
|
|
369
211
|
* floere (https://github.com/floere)
|
370
212
|
* plukevdh (https://github.com/plukevdh)
|
371
213
|
* gkop (https://github.com/gkop)
|
214
|
+
* avit (https://github.com/avit)
|
372
215
|
|
373
|
-
|
216
|
+
## Links
|
374
217
|
|
375
218
|
* repo: http://github.com/attack/barometer
|
376
219
|
* rdoc: http://rdoc.info/projects/attack/barometer
|
220
|
+
* travis ci: https://travis-ci.org/attack/barometer
|
221
|
+
* code climate: https://codeclimate.com/github/attack/barometer
|
377
222
|
|
378
|
-
##
|
223
|
+
## Copyright
|
379
224
|
|
380
225
|
Copyright (c) 2009-2013 Mark G. See LICENSE for details.
|