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.
Files changed (321) hide show
  1. data/.gitignore +2 -0
  2. data/.pelusa.yml +7 -0
  3. data/.travis.yml +6 -3
  4. data/Gemfile +11 -1
  5. data/README.md +89 -244
  6. data/Rakefile +1 -1
  7. data/barometer.gemspec +22 -24
  8. data/lib/barometer.rb +14 -65
  9. data/lib/barometer/base.rb +35 -65
  10. data/lib/barometer/data.rb +15 -20
  11. data/lib/barometer/data/attribute.rb +19 -0
  12. data/lib/barometer/data/attributes/distance.rb +11 -0
  13. data/lib/barometer/data/attributes/float.rb +11 -0
  14. data/lib/barometer/data/attributes/integer.rb +11 -0
  15. data/lib/barometer/data/attributes/location.rb +11 -0
  16. data/lib/barometer/data/attributes/pressure.rb +11 -0
  17. data/lib/barometer/data/attributes/sun.rb +15 -0
  18. data/lib/barometer/data/attributes/temperature.rb +11 -0
  19. data/lib/barometer/data/attributes/time.rb +11 -0
  20. data/lib/barometer/data/attributes/vector.rb +11 -0
  21. data/lib/barometer/data/attributes/zone.rb +11 -0
  22. data/lib/barometer/data/convertable_units.rb +145 -0
  23. data/lib/barometer/data/coordinates.rb +16 -0
  24. data/lib/barometer/data/distance.rb +14 -133
  25. data/lib/barometer/data/geo.rb +22 -59
  26. data/lib/barometer/data/location.rb +14 -20
  27. data/lib/barometer/data/pressure.rb +14 -135
  28. data/lib/barometer/data/sun.rb +24 -24
  29. data/lib/barometer/data/temperature.rb +14 -169
  30. data/lib/barometer/data/vector.rb +44 -0
  31. data/lib/barometer/data/zone.rb +109 -112
  32. data/lib/barometer/query.rb +23 -161
  33. data/lib/barometer/query/base.rb +88 -0
  34. data/lib/barometer/query/converter.rb +64 -0
  35. data/lib/barometer/query/converters/from_coordinates_to_noaa_station_id.rb +30 -0
  36. data/lib/barometer/query/converters/from_geocode_to_coordinates.rb +28 -0
  37. data/lib/barometer/query/converters/from_short_zipcode_to_zipcode.rb +28 -0
  38. data/lib/barometer/query/converters/from_weather_id_to_geocode.rb +30 -0
  39. data/lib/barometer/query/converters/from_woe_id_or_ipv4_to_geocode.rb +32 -0
  40. data/lib/barometer/query/converters/to_geocode.rb +30 -0
  41. data/lib/barometer/query/converters/to_weather_id.rb +30 -0
  42. data/lib/barometer/query/converters/to_woe_id.rb +30 -0
  43. data/lib/barometer/query/format.rb +59 -0
  44. data/lib/barometer/query/formats/base.rb +22 -0
  45. data/lib/barometer/query/formats/coordinates.rb +14 -0
  46. data/lib/barometer/query/formats/geocode.rb +15 -0
  47. data/lib/barometer/query/formats/icao.rb +35 -0
  48. data/lib/barometer/query/formats/ipv4_address.rb +19 -0
  49. data/lib/barometer/query/formats/noaa_station_id.rb +15 -0
  50. data/lib/barometer/query/formats/postalcode.rb +20 -0
  51. data/lib/barometer/query/formats/short_zipcode.rb +15 -0
  52. data/lib/barometer/{translations → query/formats/translations}/icao_country_codes.yml +0 -0
  53. data/lib/barometer/{translations → query/formats/translations}/weather_country_codes.yml +0 -0
  54. data/lib/barometer/query/formats/unknown.rb +14 -0
  55. data/lib/barometer/query/formats/weather_id.rb +33 -0
  56. data/lib/barometer/query/formats/woe_id.rb +28 -0
  57. data/lib/barometer/query/formats/zipcode.rb +15 -0
  58. data/lib/barometer/query/service.rb +13 -0
  59. data/lib/barometer/query/services/apis/geonames_timezone.rb +26 -0
  60. data/lib/barometer/query/services/apis/google_geocode.rb +35 -0
  61. data/lib/barometer/query/services/apis/noaa_station.rb +31 -0
  62. data/lib/barometer/query/services/apis/weather_id.rb +35 -0
  63. data/lib/barometer/query/services/apis/wunderground_timezone.rb +26 -0
  64. data/lib/barometer/query/services/apis/yahoo_placefinder.rb +35 -0
  65. data/lib/barometer/query/services/apis/yahoo_weather.rb +31 -0
  66. data/lib/barometer/query/services/from_weather_id.rb +64 -0
  67. data/lib/barometer/query/services/geonames_timezone.rb +18 -0
  68. data/lib/barometer/query/services/google_geocode.rb +106 -0
  69. data/lib/barometer/query/services/noaa_station_id.rb +28 -0
  70. data/lib/barometer/query/services/to_weather_id.rb +25 -0
  71. data/lib/barometer/query/services/to_woe_id.rb +29 -0
  72. data/lib/barometer/query/services/wunderground_timezone.rb +18 -0
  73. data/lib/barometer/query/services/yahoo_geocode.rb +69 -0
  74. data/lib/barometer/response.rb +12 -0
  75. data/lib/barometer/response/base.rb +57 -0
  76. data/lib/barometer/response/current.rb +27 -0
  77. data/lib/barometer/response/prediction.rb +41 -0
  78. data/lib/barometer/response/prediction_collection.rb +48 -0
  79. data/lib/barometer/utils.rb +17 -0
  80. data/lib/barometer/utils/address.rb +33 -0
  81. data/lib/barometer/utils/api.rb +30 -0
  82. data/lib/barometer/utils/config_reader.rb +40 -0
  83. data/lib/barometer/utils/get.rb +17 -0
  84. data/lib/barometer/utils/json_reader.rb +22 -0
  85. data/lib/barometer/utils/payload.rb +100 -0
  86. data/lib/barometer/utils/payload_request.rb +37 -0
  87. data/lib/barometer/utils/post.rb +24 -0
  88. data/lib/barometer/utils/time.rb +78 -0
  89. data/lib/barometer/{translations → utils/translations}/zone_codes.yml +0 -0
  90. data/lib/barometer/utils/versioned_registration.rb +70 -0
  91. data/lib/barometer/utils/xml_reader.rb +27 -0
  92. data/lib/barometer/utils/zone_code_lookup.rb +30 -0
  93. data/lib/barometer/version.rb +1 -1
  94. data/lib/barometer/weather.rb +44 -173
  95. data/lib/barometer/weather_service.rb +41 -0
  96. data/lib/barometer/weather_services/base.rb +50 -0
  97. data/lib/barometer/weather_services/forecast_io.rb +36 -0
  98. data/lib/barometer/weather_services/forecast_io/api.rb +22 -0
  99. data/lib/barometer/weather_services/forecast_io/query.rb +38 -0
  100. data/lib/barometer/weather_services/forecast_io/response.rb +31 -0
  101. data/lib/barometer/weather_services/forecast_io/response/current_weather.rb +78 -0
  102. data/lib/barometer/weather_services/forecast_io/response/forecasted_weather.rb +74 -0
  103. data/lib/barometer/weather_services/forecast_io/response/location.rb +19 -0
  104. data/lib/barometer/weather_services/forecast_io/response/timezone.rb +25 -0
  105. data/lib/barometer/weather_services/noaa.rb +21 -305
  106. data/lib/barometer/weather_services/noaa/current_api.rb +25 -0
  107. data/lib/barometer/weather_services/noaa/current_query.rb +30 -0
  108. data/lib/barometer/weather_services/noaa/current_response.rb +29 -0
  109. data/lib/barometer/weather_services/noaa/forecast_api.rb +25 -0
  110. data/lib/barometer/weather_services/noaa/forecast_query.rb +39 -0
  111. data/lib/barometer/weather_services/noaa/forecast_response.rb +28 -0
  112. data/lib/barometer/weather_services/noaa/response/current_location.rb +42 -0
  113. data/lib/barometer/weather_services/noaa/response/current_station.rb +46 -0
  114. data/lib/barometer/weather_services/noaa/response/current_weather.rb +82 -0
  115. data/lib/barometer/weather_services/noaa/response/forecasted_weather.rb +90 -0
  116. data/lib/barometer/weather_services/noaa/response/location.rb +19 -0
  117. data/lib/barometer/weather_services/noaa/response/timezone.rb +15 -0
  118. data/lib/barometer/weather_services/response.rb +9 -0
  119. data/lib/barometer/weather_services/response/location.rb +42 -0
  120. data/lib/barometer/weather_services/response/time_zone.rb +19 -0
  121. data/lib/barometer/weather_services/weather_bug.rb +24 -280
  122. data/lib/barometer/weather_services/weather_bug/current_api.rb +26 -0
  123. data/lib/barometer/weather_services/weather_bug/current_response.rb +33 -0
  124. data/lib/barometer/weather_services/weather_bug/forecast_api.rb +26 -0
  125. data/lib/barometer/weather_services/weather_bug/forecast_response.rb +29 -0
  126. data/lib/barometer/weather_services/weather_bug/query.rb +42 -0
  127. data/lib/barometer/weather_services/weather_bug/response/current_weather.rb +82 -0
  128. data/lib/barometer/weather_services/weather_bug/response/forecasted_weather.rb +67 -0
  129. data/lib/barometer/weather_services/weather_bug/response/location.rb +23 -0
  130. data/lib/barometer/weather_services/weather_bug/response/station.rb +43 -0
  131. data/lib/barometer/weather_services/weather_bug/response/sun.rb +32 -0
  132. data/lib/barometer/weather_services/weather_bug/response/time_helper.rb +52 -0
  133. data/lib/barometer/weather_services/weather_bug/response/timezone.rb +15 -0
  134. data/lib/barometer/weather_services/wunderground_v1.rb +32 -0
  135. data/lib/barometer/weather_services/wunderground_v1/current_api.rb +21 -0
  136. data/lib/barometer/weather_services/wunderground_v1/current_response.rb +31 -0
  137. data/lib/barometer/weather_services/wunderground_v1/forecast_api.rb +21 -0
  138. data/lib/barometer/weather_services/wunderground_v1/forecast_response.rb +33 -0
  139. data/lib/barometer/weather_services/wunderground_v1/query.rb +30 -0
  140. data/lib/barometer/weather_services/wunderground_v1/response/current_weather.rb +92 -0
  141. data/lib/barometer/weather_services/wunderground_v1/response/forecasted_weather.rb +87 -0
  142. data/lib/barometer/weather_services/wunderground_v1/response/full_timezone.rb +22 -0
  143. data/lib/barometer/weather_services/wunderground_v1/response/location.rb +43 -0
  144. data/lib/barometer/weather_services/wunderground_v1/response/station.rb +39 -0
  145. data/lib/barometer/weather_services/wunderground_v1/response/sun.rb +53 -0
  146. data/lib/barometer/weather_services/wunderground_v1/response/timezone.rb +15 -0
  147. data/lib/barometer/weather_services/yahoo.rb +16 -198
  148. data/lib/barometer/weather_services/yahoo/api.rb +21 -0
  149. data/lib/barometer/weather_services/yahoo/query.rb +42 -0
  150. data/lib/barometer/weather_services/yahoo/response.rb +39 -0
  151. data/lib/barometer/weather_services/yahoo/response/current_weather.rb +86 -0
  152. data/lib/barometer/weather_services/yahoo/response/forecasted_weather.rb +71 -0
  153. data/lib/barometer/weather_services/yahoo/response/location.rb +47 -0
  154. data/lib/barometer/weather_services/yahoo/response/sun.rb +43 -0
  155. data/lib/barometer/weather_services/yahoo/response/timezone.rb +15 -0
  156. data/spec/barometer_spec.rb +18 -120
  157. data/spec/base_spec.rb +114 -0
  158. data/spec/cassettes/Converter_FromCoordinatesToNoaaStationId.json +1 -0
  159. data/spec/cassettes/Converter_FromWeatherIdToGeocode.json +1 -0
  160. data/spec/cassettes/Converter_FromWoeIdOrIpv4ToGeocode.json +1 -0
  161. data/spec/cassettes/Converter_ToGeocode.json +1 -0
  162. data/spec/cassettes/Converter_ToWeatherId.json +1 -0
  163. data/spec/cassettes/Converter_ToWoeId.json +1 -0
  164. data/spec/cassettes/Service_FromWeatherId.json +1 -0
  165. data/spec/cassettes/Service_GoogleGeocode.json +1 -0
  166. data/spec/cassettes/Service_NoaaStation.json +1 -0
  167. data/spec/cassettes/Service_ToWeatherId.json +1 -0
  168. data/spec/cassettes/Service_ToWoeId.json +1 -0
  169. data/spec/cassettes/Service_YahooGeocode.json +1 -0
  170. data/spec/cassettes/WeatherService_ForecastIo.json +1 -0
  171. data/spec/cassettes/WeatherService_Noaa.json +1 -1
  172. data/spec/cassettes/WeatherService_WeatherBug.json +1 -1
  173. data/spec/cassettes/WeatherService_WundergroundV1.json +1 -0
  174. data/spec/cassettes/WeatherService_Yahoo.json +1 -1
  175. data/spec/data/attributes/distance_spec.rb +60 -0
  176. data/spec/data/attributes/location_spec.rb +41 -0
  177. data/spec/data/attributes/pressure_spec.rb +60 -0
  178. data/spec/data/attributes/sun_spec.rb +33 -0
  179. data/spec/data/attributes/temperature_spec.rb +60 -0
  180. data/spec/data/attributes/time_spec.rb +58 -0
  181. data/spec/data/attributes/vector_spec.rb +43 -0
  182. data/spec/data/attributes/zone_spec.rb +34 -0
  183. data/spec/data/convertable_units_spec.rb +299 -0
  184. data/spec/data/coordinates_spec.rb +15 -0
  185. data/spec/data/distance_spec.rb +49 -333
  186. data/spec/data/geo_spec.rb +72 -71
  187. data/spec/data/location_spec.rb +70 -65
  188. data/spec/data/pressure_spec.rb +49 -333
  189. data/spec/data/sun_spec.rb +57 -81
  190. data/spec/data/temperature_spec.rb +49 -393
  191. data/spec/data/vector_spec.rb +100 -0
  192. data/spec/data/zone_spec.rb +199 -266
  193. data/spec/query/base_spec.rb +296 -0
  194. data/spec/query/converter_spec.rb +98 -0
  195. data/spec/query/converters/from_coordinates_to_noaa_station_id_spec.rb +35 -0
  196. data/spec/query/converters/from_geocode_to_coordinates_spec.rb +25 -0
  197. data/spec/query/converters/from_short_zipcode_to_zipcode_spec.rb +31 -0
  198. data/spec/query/converters/from_weather_id_to_geocode_spec.rb +40 -0
  199. data/spec/query/converters/from_woe_id_or_ipv4_to_geocode_spec.rb +51 -0
  200. data/spec/query/converters/to_geocode_spec.rb +99 -0
  201. data/spec/query/converters/to_weather_id_spec.rb +35 -0
  202. data/spec/query/converters/to_woe_id_spec.rb +74 -0
  203. data/spec/query/formats/base_spec.rb +15 -0
  204. data/spec/query/formats/coordinates_spec.rb +13 -0
  205. data/spec/query/formats/geocode_spec.rb +9 -0
  206. data/spec/query/formats/icao_spec.rb +20 -0
  207. data/spec/query/formats/ipv4_address_spec.rb +33 -0
  208. data/spec/query/formats/noaa_station_id_spec.rb +9 -0
  209. data/spec/query/formats/postalcode_spec.rb +18 -0
  210. data/spec/query/formats/short_zipcode_spec.rb +18 -0
  211. data/spec/query/formats/unknown_spec.rb +9 -0
  212. data/spec/query/formats/weather_id_spec.rb +31 -0
  213. data/spec/query/formats/woe_id_spec.rb +45 -0
  214. data/spec/query/formats/zipcode_spec.rb +18 -0
  215. data/spec/query/formats_spec.rb +55 -0
  216. data/spec/query/services/from_weather_id_spec.rb +54 -0
  217. data/spec/query/services/google_geocode_spec.rb +60 -0
  218. data/spec/query/services/noaa_station_id_spec.rb +23 -0
  219. data/spec/query/services/to_weather_id_spec.rb +23 -0
  220. data/spec/query/services/to_woe_id_spec.rb +51 -0
  221. data/spec/query/services/yahoo_geocode_spec.rb +72 -0
  222. data/spec/response/base_spec.rb +103 -0
  223. data/spec/response/current_spec.rb +33 -0
  224. data/spec/response/predicition_spec.rb +65 -0
  225. data/spec/response/prediction_collection_spec.rb +97 -0
  226. data/spec/spec_helper.rb +14 -12
  227. data/spec/support/key_file_parser.rb +22 -0
  228. data/spec/support/matchers/formats.rb +36 -0
  229. data/spec/support/matchers/have_data.rb +46 -0
  230. data/spec/support/matchers/have_field.rb +128 -0
  231. data/spec/support/matchers/have_forecast.rb +46 -0
  232. data/spec/support/matchers/path.rb +23 -0
  233. data/spec/support/query_factory.rb +20 -0
  234. data/spec/utils/address_spec.rb +67 -0
  235. data/spec/utils/config_reader_spec.rb +157 -0
  236. data/spec/utils/get_spec.rb +22 -0
  237. data/spec/utils/payload_request_spec.rb +69 -0
  238. data/spec/utils/payload_spec.rb +168 -0
  239. data/spec/utils/post_spec.rb +20 -0
  240. data/spec/utils/time_spec.rb +93 -0
  241. data/spec/utils/versioned_registration_spec.rb +105 -0
  242. data/spec/weather_services/base_spec.rb +116 -0
  243. data/spec/weather_services/forecast_io_spec.rb +71 -0
  244. data/spec/weather_services/noaa/current_response_spec.rb +22 -0
  245. data/spec/weather_services/noaa/forecast_response_spec.rb +33 -0
  246. data/spec/weather_services/noaa_spec.rb +68 -166
  247. data/spec/weather_services/weather_bug/current_response_spec.rb +64 -0
  248. data/spec/weather_services/weather_bug/forecast_response_spec.rb +23 -0
  249. data/spec/weather_services/weather_bug_spec.rb +62 -202
  250. data/spec/weather_services/wunderground_v1/current_response_spec.rb +19 -0
  251. data/spec/weather_services/wunderground_v1/forecast_response_spec.rb +62 -0
  252. data/spec/weather_services/wunderground_v1_spec.rb +78 -0
  253. data/spec/weather_services/yahoo/response_spec.rb +73 -0
  254. data/spec/weather_services/yahoo_spec.rb +52 -135
  255. data/spec/weather_services_spec.rb +103 -0
  256. data/spec/weather_spec.rb +167 -347
  257. metadata +342 -123
  258. data/.document +0 -5
  259. data/TODO +0 -60
  260. data/bin/barometer +0 -441
  261. data/lib/barometer/data/local_datetime.rb +0 -145
  262. data/lib/barometer/data/local_time.rb +0 -134
  263. data/lib/barometer/data/speed.rb +0 -158
  264. data/lib/barometer/data/units.rb +0 -49
  265. data/lib/barometer/formats.rb +0 -13
  266. data/lib/barometer/formats/coordinates.rb +0 -57
  267. data/lib/barometer/formats/format.rb +0 -64
  268. data/lib/barometer/formats/geocode.rb +0 -60
  269. data/lib/barometer/formats/icao.rb +0 -37
  270. data/lib/barometer/formats/postalcode.rb +0 -22
  271. data/lib/barometer/formats/short_zipcode.rb +0 -17
  272. data/lib/barometer/formats/weather_id.rb +0 -92
  273. data/lib/barometer/formats/woe_id.rb +0 -150
  274. data/lib/barometer/formats/zipcode.rb +0 -31
  275. data/lib/barometer/key_file_parser.rb +0 -20
  276. data/lib/barometer/measurements/measurement.rb +0 -202
  277. data/lib/barometer/measurements/result.rb +0 -207
  278. data/lib/barometer/measurements/result_array.rb +0 -75
  279. data/lib/barometer/services.rb +0 -19
  280. data/lib/barometer/weather_services/service.rb +0 -189
  281. data/lib/barometer/weather_services/wunderground.rb +0 -264
  282. data/lib/barometer/web_services/geocode.rb +0 -34
  283. data/lib/barometer/web_services/noaa_station_id.rb +0 -53
  284. data/lib/barometer/web_services/placemaker.rb +0 -95
  285. data/lib/barometer/web_services/timezone.rb +0 -38
  286. data/lib/barometer/web_services/weather_id.rb +0 -50
  287. data/lib/barometer/web_services/web_service.rb +0 -29
  288. data/spec/cassettes/Barometer.json +0 -1
  289. data/spec/cassettes/Query.json +0 -1
  290. data/spec/cassettes/Query_Format_Coordinates.json +0 -1
  291. data/spec/cassettes/Query_Format_Geocode.json +0 -1
  292. data/spec/cassettes/Query_Format_WeatherID.json +0 -1
  293. data/spec/cassettes/Query_Format_WoeID.json +0 -1
  294. data/spec/cassettes/WeatherService.json +0 -1
  295. data/spec/cassettes/WeatherService_Wunderground.json +0 -1
  296. data/spec/cassettes/WebService_Geocode.json +0 -1
  297. data/spec/cassettes/WebService_NoaaStation.json +0 -1
  298. data/spec/data/local_datetime_spec.rb +0 -274
  299. data/spec/data/local_time_spec.rb +0 -239
  300. data/spec/data/speed_spec.rb +0 -374
  301. data/spec/data/units_spec.rb +0 -101
  302. data/spec/formats/coordinates_spec.rb +0 -166
  303. data/spec/formats/format_spec.rb +0 -74
  304. data/spec/formats/geocode_spec.rb +0 -163
  305. data/spec/formats/icao_spec.rb +0 -55
  306. data/spec/formats/postalcode_spec.rb +0 -53
  307. data/spec/formats/short_zipcode_spec.rb +0 -47
  308. data/spec/formats/weather_id_spec.rb +0 -182
  309. data/spec/formats/woe_id_spec.rb +0 -211
  310. data/spec/formats/zipcode_spec.rb +0 -103
  311. data/spec/key_file_parser_spec.rb +0 -28
  312. data/spec/measurements/measurement_spec.rb +0 -381
  313. data/spec/measurements/result_array_spec.rb +0 -150
  314. data/spec/measurements/result_spec.rb +0 -632
  315. data/spec/query_spec.rb +0 -498
  316. data/spec/weather_services/services_spec.rb +0 -135
  317. data/spec/weather_services/wunderground_spec.rb +0 -179
  318. data/spec/web_services/geocode_spec.rb +0 -31
  319. data/spec/web_services/noaa_station_id_spec.rb +0 -33
  320. data/spec/web_services/placemaker_spec.rb +0 -41
  321. data/spec/web_services/web_services_spec.rb +0 -20
@@ -1,135 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::WeatherService, :vcr => {
4
- :cassette_name => "WeatherService"
5
- } do
6
- before(:each) do
7
- query_term = "Calgary,AB"
8
- @query = Barometer::Query.new(query_term)
9
- @service = Barometer::WeatherService.source(:wunderground)
10
- @time = Time.now
11
- end
12
-
13
- describe "and the class method" do
14
- describe "source" do
15
- it "responds" do
16
- Barometer::WeatherService.respond_to?("source").should be_true
17
- end
18
-
19
- it "requires a Symbol or String" do
20
- lambda { Barometer::WeatherService.source }.should raise_error(ArgumentError)
21
- lambda { Barometer::WeatherService.source(1) }.should raise_error(ArgumentError)
22
-
23
- lambda { Barometer::WeatherService.source("wunderground") }.should_not raise_error(ArgumentError)
24
- lambda { Barometer::WeatherService.source(:wunderground) }.should_not raise_error(ArgumentError)
25
- end
26
-
27
- it "raises an error if source doesn't exist" do
28
- lambda { Barometer::WeatherService.source(:not_valid) }.should raise_error(ArgumentError)
29
- lambda { Barometer::WeatherService.source(:wunderground) }.should_not raise_error(ArgumentError)
30
- end
31
-
32
- it "returns the corresponding Service object" do
33
- Barometer::WeatherService.source(:wunderground).should == Barometer::WeatherService::Wunderground
34
- Barometer::WeatherService.source(:wunderground).superclass.should == Barometer::WeatherService
35
- end
36
-
37
- it "raises an error when retrieving the wrong class" do
38
- lambda { Barometer::WeatherService.source(:temperature) }.should raise_error(ArgumentError)
39
- end
40
- end
41
- end
42
-
43
- describe "when initialized" do
44
- before(:each) do
45
- @service = Barometer::WeatherService.new
46
- @measurement = Barometer::Measurement.new
47
- @query = Barometer::Query.new("test")
48
- end
49
-
50
- it "defaults _meets_requirements?" do
51
- Barometer::WeatherService.send("_meets_requirements?").should be_true
52
- end
53
-
54
- it "stubs _source_name" do
55
- lambda { Barometer::WeatherService.send("_source_name") }.should raise_error(NotImplementedError)
56
- end
57
-
58
- it "stubs _accepted_formats" do
59
- lambda { Barometer::WeatherService.send("_accepted_formats") }.should raise_error(NotImplementedError)
60
- end
61
-
62
- it "stubs _measure" do
63
- Barometer::WeatherService._measure(@measurement,@query,true).is_a?(Barometer::Measurement).should be_true
64
- end
65
-
66
- it "stubs _build_extra" do
67
- Barometer::WeatherService._build_extra.should be_nil
68
- end
69
-
70
- it "stubs _fetch" do
71
- Barometer::WeatherService._fetch.should be_nil
72
- end
73
-
74
- it "stubs _build_current" do
75
- Barometer::WeatherService._build_current.should be_nil
76
- end
77
-
78
- it "stubs _build_forecast" do
79
- Barometer::WeatherService._build_forecast.should be_nil
80
- end
81
-
82
- it "stubs _build_location" do
83
- Barometer::WeatherService._build_location.should be_nil
84
- end
85
-
86
- it "stubs _build_sun" do
87
- Barometer::WeatherService._build_sun.should be_nil
88
- end
89
-
90
- it "stubs _build_links" do
91
- Barometer::WeatherService._build_links.should == {}
92
- end
93
-
94
- it "defaults _supports_country?" do
95
- Barometer::WeatherService._supports_country?.should be_true
96
- end
97
-
98
- it "defaults _requires_keys?" do
99
- Barometer::WeatherService._requires_keys?.should be_false
100
- end
101
-
102
- it "defaults _has_keys?" do
103
- lambda { Barometer::WeatherService._has_keys? }.should raise_error(NotImplementedError)
104
- end
105
- end
106
-
107
- describe "when measuring," do
108
- it "responds to measure" do
109
- Barometer::WeatherService.respond_to?("measure").should be_true
110
- end
111
-
112
- # since Barometer::WeatherService defines the measure method, you could actually just
113
- # call Barometer::WeatherService.measure ... but this will not invoke a specific
114
- # weather API driver. Make sure this usage raises an error.
115
- it "requires an actuall driver" do
116
- lambda { Barometer::WeatherService.measure(@query) }.should raise_error(NotImplementedError)
117
- end
118
-
119
- it "requires a Barometer::Query object" do
120
- lambda { Barometer::WeatherService.measure("invalid") }.should raise_error(ArgumentError)
121
- @query.is_a?(Barometer::Query).should be_true
122
- lambda { Barometer::WeatherService.measure(@query) }.should_not raise_error(ArgumentError)
123
- end
124
-
125
- it "returns a Barometer::Measurement object" do
126
- @service.measure(@query).is_a?(Barometer::Measurement).should be_true
127
- end
128
-
129
- it "returns current and future" do
130
- measurement = @service.measure(@query)
131
- measurement.current.is_a?(Barometer::Measurement::Result).should be_true
132
- measurement.forecast.is_a?(Array).should be_true
133
- end
134
- end
135
- end
@@ -1,179 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
- include Barometer
3
-
4
- describe Barometer::WeatherService::Wunderground, :vcr => {
5
- :cassette_name => "WeatherService::Wunderground"
6
- } do
7
- before(:each) do
8
- @accepted_formats = [:zipcode, :postalcode, :icao, :coordinates, :geocode]
9
- @base_uri = "http://api.wunderground.com/auto/wui/geo"
10
- end
11
-
12
- describe "the class methods" do
13
- it "defines accepted_formats" do
14
- WeatherService::Wunderground._accepted_formats.should == @accepted_formats
15
- end
16
-
17
- it "defines source_name" do
18
- WeatherService::Wunderground._source_name.should == :wunderground
19
- end
20
-
21
- it "defines fetch_current" do
22
- WeatherService::Wunderground.respond_to?("_fetch_current").should be_true
23
- end
24
-
25
- it "defines fetch_forecast" do
26
- WeatherService::Wunderground.respond_to?("_fetch_forecast").should be_true
27
- end
28
- end
29
-
30
- describe "building the current data" do
31
- it "defines the build method" do
32
- WeatherService::Wunderground.respond_to?("_build_current").should be_true
33
- end
34
-
35
- it "requires Hash input" do
36
- lambda { WeatherService::Wunderground._build_current }.should raise_error(ArgumentError)
37
- WeatherService::Wunderground._build_current({})
38
- lambda { WeatherService::Wunderground._build_current({}) }.should_not raise_error(ArgumentError)
39
- end
40
-
41
- it "returns Barometer::CurrentMeasurement object" do
42
- current = WeatherService::Wunderground._build_current({})
43
- current.is_a?(Measurement::Result).should be_true
44
- end
45
- end
46
-
47
- describe "building the forecast data" do
48
- it "defines the build method" do
49
- WeatherService::Wunderground.respond_to?("_build_forecast").should be_true
50
- end
51
-
52
- it "requires Hash input" do
53
- lambda { WeatherService::Wunderground._build_forecast }.should raise_error(ArgumentError)
54
- lambda { WeatherService::Wunderground._build_forecast({}) }.should_not raise_error(ArgumentError)
55
- end
56
-
57
- it "returns Array object" do
58
- current = WeatherService::Wunderground._build_forecast({})
59
- current.is_a?(Array).should be_true
60
- end
61
- end
62
-
63
- describe "building the station data" do
64
- it "defines the build method" do
65
- WeatherService::Wunderground.respond_to?("_build_station").should be_true
66
- end
67
-
68
- it "requires Hash input" do
69
- lambda { WeatherService::Wunderground._build_station }.should raise_error(ArgumentError)
70
- lambda { WeatherService::Wunderground._build_station({}) }.should_not raise_error(ArgumentError)
71
- end
72
-
73
- it "returns Barometer::Location object" do
74
- station = WeatherService::Wunderground._build_station({})
75
- station.is_a?(Data::Location).should be_true
76
- end
77
- end
78
-
79
- describe "building the location data" do
80
- it "defines the build method" do
81
- WeatherService::Wunderground.respond_to?("_build_location").should be_true
82
- end
83
-
84
- it "requires Hash input" do
85
- lambda { WeatherService::Wunderground._build_location }.should raise_error(ArgumentError)
86
- lambda { WeatherService::Wunderground._build_location({}) }.should_not raise_error(ArgumentError)
87
- end
88
-
89
- it "returns Barometer::Location object" do
90
- location = WeatherService::Wunderground._build_location({})
91
- location.is_a?(Data::Location).should be_true
92
- end
93
- end
94
-
95
- describe "building the timezone" do
96
- it "defines the build method" do
97
- WeatherService::Wunderground.respond_to?("_parse_full_timezone").should be_true
98
- end
99
-
100
- it "requires Hash input" do
101
- lambda { WeatherService::Wunderground._parse_full_timezone }.should raise_error(ArgumentError)
102
- lambda { WeatherService::Wunderground._parse_full_timezone({}) }.should_not raise_error(ArgumentError)
103
- end
104
- end
105
-
106
- describe "building the sun data" do
107
- it "defines the build method" do
108
- WeatherService::Wunderground.respond_to?("_build_sun").should be_true
109
- end
110
-
111
- it "requires Hash input" do
112
- lambda { WeatherService::Wunderground._build_sun }.should raise_error(ArgumentError)
113
- lambda { WeatherService::Wunderground._build_sun({}) }.should_not raise_error(ArgumentError)
114
- end
115
-
116
- it "requires Barometer::Zone input" do
117
- lambda { WeatherService::Wunderground._build_sun({}, "invalid") }.should raise_error(ArgumentError)
118
- lambda { WeatherService::Wunderground._build_sun({}) }.should_not raise_error(ArgumentError)
119
- end
120
-
121
- it "returns Barometer::Sun object" do
122
- sun = WeatherService::Wunderground._build_sun({})
123
- sun.is_a?(Data::Sun).should be_true
124
- end
125
- end
126
-
127
- describe "when measuring" do
128
- before(:each) do
129
- @query = Barometer::Query.new("Calgary,AB")
130
- @measurement = Barometer::Measurement.new
131
- end
132
-
133
- describe "all" do
134
- it "responds to _measure" do
135
- WeatherService::Wunderground.respond_to?("_measure").should be_true
136
- end
137
-
138
- it "requires a Barometer::Measurement object" do
139
- lambda { WeatherService::Wunderground._measure(nil, @query) }.should raise_error(ArgumentError)
140
- lambda { WeatherService::Wunderground._measure("invlaid", @query) }.should raise_error(ArgumentError)
141
-
142
- lambda { WeatherService::Wunderground._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
143
- end
144
-
145
- it "requires a Barometer::Query query" do
146
- lambda { WeatherService::Wunderground._measure }.should raise_error(ArgumentError)
147
- lambda { WeatherService::Wunderground._measure(@measurement, 1) }.should raise_error(ArgumentError)
148
-
149
- lambda { WeatherService::Wunderground._measure(@measurement, @query) }.should_not raise_error(ArgumentError)
150
- end
151
-
152
- it "returns a Barometer::Measurement object" do
153
- result = WeatherService::Wunderground._measure(@measurement, @query)
154
- result.is_a?(Barometer::Measurement).should be_true
155
- result.current.is_a?(Measurement::Result).should be_true
156
- result.forecast.is_a?(Array).should be_true
157
- end
158
- end
159
- end
160
-
161
- describe "overall data correctness" do
162
- before(:each) do
163
- @query = Barometer::Query.new("Calgary,AB")
164
- @measurement = Barometer::Measurement.new
165
- end
166
-
167
- it "should correctly build the data" do
168
- result = WeatherService::Wunderground._measure(@measurement, @query)
169
-
170
- # build timezone
171
- @measurement.timezone.zone_full.should == "America/Edmonton"
172
- @measurement.timezone.current.should == "America/Edmonton"
173
-
174
- # build current
175
- @measurement.current.sun.rise.to_s.should match(/^\d{1,2}:\d{1,2}[ ]?[apmAPM]{0,2}$/i)
176
- @measurement.current.sun.set.to_s.should match(/^\d{1,2}:\d{1,2}[ ]?[apmAPM]{0,2}$/i)
177
- end
178
- end
179
- end
@@ -1,31 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::WebService::Geocode, :vcr => {
4
- :cassette_name => "WebService::Geocode"
5
- } do
6
- before(:each) do
7
- @zipcode = "90210"
8
- end
9
-
10
- describe "and the class methods" do
11
- describe "fetch," do
12
- it "requires a Query object" do
13
- lambda { Barometer::WebService::Geocode.fetch }.should raise_error(ArgumentError)
14
- lambda { Barometer::WebService::Geocode.fetch("invalid") }.should raise_error(ArgumentError)
15
- query = Barometer::Query.new(@zipcode)
16
- query.is_a?(Barometer::Query).should be_true
17
- lambda { Barometer::WebService::Geocode.fetch(query) }.should_not raise_error(ArgumentError)
18
- end
19
-
20
- it "queries (key no longer required)" do
21
- query = Barometer::Query.new(@zipcode)
22
- Barometer::WebService::Geocode.fetch(query).should_not be_nil
23
- end
24
-
25
- it "returns a Geo object" do
26
- query = Barometer::Query.new(@zipcode)
27
- Barometer::WebService::Geocode.fetch(query).is_a?(Data::Geo).should be_true
28
- end
29
- end
30
- end
31
- end
@@ -1,33 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::WebService::NoaaStation, :vcr => {
4
- :cassette_name => "WebService::NoaaStation"
5
- } do
6
- before(:each) do
7
- @latitude = "34.10"
8
- @longitude = "-118.41"
9
- end
10
-
11
- describe "and the class methods" do
12
- describe "fetch," do
13
- it "requires latitude" do
14
- Barometer::WebService::NoaaStation.should_receive("_fetch").never
15
- Barometer::WebService::NoaaStation.fetch(nil,@longitude)
16
- end
17
-
18
- it "requires longitude" do
19
- Barometer::WebService::NoaaStation.should_receive("_fetch").never
20
- Barometer::WebService::NoaaStation.fetch(@latitude,nil)
21
- end
22
-
23
- it "queries" do
24
- Barometer::WebService::NoaaStation.fetch(@latitude,@longitude).should_not be_nil
25
- end
26
-
27
- it "returns a string" do
28
- Barometer::WebService::NoaaStation.fetch(@latitude,@longitude).is_a?(String).should be_true
29
- Barometer::WebService::NoaaStation.fetch(@latitude,@longitude).should == "KSMO"
30
- end
31
- end
32
- end
33
- end
@@ -1,41 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::WebService::Placemaker do
4
- before(:each) do
5
- @coordinates = "40.756054,-73.986951"
6
- @geocode = "New York, NY"
7
- end
8
-
9
- describe "and the class methods" do
10
- describe "fetch," do
11
- it "requires a Query object" do
12
- lambda { Barometer::WebService::Placemaker.fetch }.should raise_error(ArgumentError)
13
- lambda { Barometer::WebService::Placemaker.fetch("invalid") }.should raise_error(ArgumentError)
14
- query = Barometer::Query.new(@coordinates)
15
- query.is_a?(Barometer::Query).should be_true
16
- lambda { Barometer::WebService::Placemaker.fetch(query) }.should_not raise_error(ArgumentError)
17
- end
18
-
19
- # it "detects the key" do
20
- # query = Barometer::Query.new(@zipcode)
21
- # Barometer.google_geocode_key = nil
22
- # Barometer::WebService::Geocode.fetch(query).should be_nil
23
- # Barometer.google_geocode_key = KEY
24
- # Barometer::WebService::Geocode.fetch(query).should_not be_nil
25
- # end
26
- #
27
- # it "returns a Geo object" do
28
- # query = Barometer::Query.new(@zipcode)
29
- # Barometer::WebService::Geocode.fetch(query).is_a?(Data::Geo).should be_true
30
- # end
31
-
32
- end
33
-
34
- # it "detects the Google Geocode Key" do
35
- # Barometer.google_geocode_key = nil
36
- # Barometer::WebService::Geocode.send("_has_geocode_key?").should be_false
37
- # Barometer.google_geocode_key = KEY
38
- # Barometer::WebService::Geocode.send("_has_geocode_key?").should be_true
39
- # end
40
- end
41
- end
@@ -1,20 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::WebService do
4
- describe "and the class method" do
5
- describe "source" do
6
- it "stubs fetch" do
7
- lambda { Barometer::WebService.fetch }.should raise_error(NotImplementedError)
8
- end
9
-
10
- it "detects a Query object" do
11
- invalid = 1
12
- Barometer::WebService.send("_is_a_query?").should be_false
13
- Barometer::WebService.send("_is_a_query?", invalid).should be_false
14
- valid = Barometer::Query.new
15
- valid.is_a?(Barometer::Query).should be_true
16
- Barometer::WebService.send("_is_a_query?", valid).should be_true
17
- end
18
- end
19
- end
20
- end