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,103 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::Query::Format::Zipcode do
4
- before(:each) do
5
- @short_zipcode = "90210"
6
- @zipcode = @short_zipcode
7
- @long_zipcode = "90210-5555"
8
- @weather_id = "USGA0028"
9
- @postal_code = "T5B 4M9"
10
- @coordinates = "40.756054,-73.986951"
11
- @geocode = "New York, NY"
12
- @icao = "KSFO"
13
- end
14
-
15
- describe "and class methods" do
16
- it "returns a format" do
17
- Barometer::Query::Format::Zipcode.format.should == :zipcode
18
- end
19
-
20
- it "returns a country" do
21
- Barometer::Query::Format::Zipcode.country_code.should == "US"
22
- Barometer::Query::Format::Zipcode.country_code("ignored").should == "US"
23
- end
24
-
25
- it "returns a regex" do
26
- Barometer::Query::Format::Zipcode.regex.should_not be_nil
27
- Barometer::Query::Format::Zipcode.regex.is_a?(Regexp).should be_true
28
- end
29
-
30
- it "returns the convertable_formats" do
31
- Barometer::Query::Format::Zipcode.convertable_formats.should_not be_nil
32
- Barometer::Query::Format::Zipcode.convertable_formats.is_a?(Array).should be_true
33
- Barometer::Query::Format::Zipcode.convertable_formats.include?(:short_zipcode).should be_true
34
- end
35
-
36
- describe "is?," do
37
- before(:each) do
38
- @valid = "90210-5555"
39
- @invalid = "invalid"
40
- end
41
-
42
- it "recognizes a valid format" do
43
- Barometer::Query::Format::Zipcode.is?(@valid).should be_true
44
- end
45
-
46
- it "recognizes non-valid format" do
47
- Barometer::Query::Format::Zipcode.is?(@invalid).should be_false
48
- end
49
- end
50
-
51
- describe "when converting using 'to'," do
52
- it "requires a Barometer::Query object" do
53
- lambda { Barometer::Query::Format::Zipcode.to }.should raise_error(ArgumentError)
54
- lambda { Barometer::Query::Format::Zipcode.to("invalid") }.should raise_error(ArgumentError)
55
- query = Barometer::Query.new(@zipcode)
56
- query.is_a?(Barometer::Query).should be_true
57
- lambda { Barometer::Query::Format::Zipcode.to(original_query) }.should_not raise_error(ArgumentError)
58
- end
59
-
60
- it "returns a Barometer::Query" do
61
- query = Barometer::Query.new(@short_zipcode)
62
- Barometer::Query::Format::Zipcode.to(query).is_a?(Barometer::Query).should be_true
63
- end
64
-
65
- it "converts from short_zipcode" do
66
- query = Barometer::Query.new(@short_zipcode)
67
- query.format.should == :short_zipcode
68
- new_query = Barometer::Query::Format::Zipcode.to(query)
69
- new_query.q.should == @short_zipcode
70
- new_query.format.should == :zipcode
71
- new_query.country_code.should == "US"
72
- new_query.geo.should be_nil
73
- end
74
-
75
- it "returns nil for other formats" do
76
- query = Barometer::Query.new(@zipcode)
77
- query.format = :zipcode
78
- query.format.should == :zipcode
79
- Barometer::Query::Format::Zipcode.to(query).should be_nil
80
-
81
- query = Barometer::Query.new(@weather_id)
82
- query.format.should == :weather_id
83
- Barometer::Query::Format::Zipcode.to(query).should be_nil
84
-
85
- query = Barometer::Query.new(@postal_code)
86
- query.format.should == :postalcode
87
- Barometer::Query::Format::Zipcode.to(query).should be_nil
88
-
89
- query = Barometer::Query.new(@coordinates)
90
- query.format.should == :coordinates
91
- Barometer::Query::Format::Zipcode.to(query).should be_nil
92
-
93
- query = Barometer::Query.new(@geocode)
94
- query.format.should == :geocode
95
- Barometer::Query::Format::Zipcode.to(query).should be_nil
96
-
97
- query = Barometer::Query.new(@icao)
98
- query.format.should == :icao
99
- Barometer::Query::Format::Zipcode.to(query).should be_nil
100
- end
101
- end
102
- end
103
- end
@@ -1,28 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Barometer::KeyFileParser do
4
- include FakeFS::SpecHelpers
5
-
6
- it "returns the the KEY for the given path" do
7
- FakeFS do
8
- FileUtils.mkdir("~")
9
- File.open(Barometer::KEY_FILE, 'w') {|f| f << "\weather_bug:\n code: ABC123" }
10
- Barometer::KeyFileParser.find(:weather_bug, :code).should == "ABC123"
11
- end
12
- end
13
-
14
- it "returns nil when the key does not exist" do
15
- FakeFS do
16
- FileUtils.mkdir("~")
17
- File.open(Barometer::KEY_FILE, 'w') {|f| f << "\weather_bug:\n" }
18
- Barometer::KeyFileParser.find(:weather_bug, :code).should be_nil
19
- end
20
- end
21
-
22
- it "returns nil when the file does not exist" do
23
- FakeFS do
24
- FileUtils.mkdir("~")
25
- Barometer::KeyFileParser.find(:weather_bug, :code).should be_nil
26
- end
27
- end
28
- end
@@ -1,381 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
-
3
- describe Barometer::Measurement do
4
- describe "when initialized" do
5
- before(:each) do
6
- @measurement = Barometer::Measurement.new
7
- end
8
-
9
- it "responds to source" do
10
- @measurement.source.should be_nil
11
- end
12
-
13
- it "stores the source" do
14
- source = :wunderground
15
- measurement = Barometer::Measurement.new(source)
16
- measurement.source.should_not be_nil
17
- measurement.source.should == source
18
- end
19
-
20
- it "responds to utc_time_stamp" do
21
- @measurement.utc_time_stamp.should be_nil
22
- end
23
-
24
- it "responds to current" do
25
- @measurement.current.should be_nil
26
- end
27
-
28
- it "responds to forecast (and defaults to an empty Array)" do
29
- @measurement.forecast.should be_nil
30
- end
31
-
32
- it "responds to timezone" do
33
- @measurement.timezone.should be_nil
34
- end
35
-
36
- it "responds to station" do
37
- @measurement.station.should be_nil
38
- end
39
-
40
- it "responds to location" do
41
- @measurement.location.should be_nil
42
- end
43
-
44
- it "responds to success" do
45
- @measurement.success.should be_false
46
- end
47
-
48
- it "responds to current?" do
49
- @measurement.current?.should be_true
50
- end
51
-
52
- it "responds to metric" do
53
- @measurement.metric.should be_true
54
- end
55
-
56
- it "responds to weight" do
57
- @measurement.weight.should == 1
58
- end
59
-
60
- it "responds to links" do
61
- @measurement.links.should == {}
62
- end
63
-
64
- it "responds to measured_at" do
65
- @measurement.measured_at.should be_nil
66
- end
67
- end
68
-
69
- describe "when writing data" do
70
- before(:each) do
71
- @measurement = Barometer::Measurement.new
72
- end
73
-
74
- it "only accepts Symbol for source" do
75
- invalid_data = 1
76
- invalid_data.class.should_not == Symbol
77
- lambda { @measurement.source = invalid_data }.should raise_error(ArgumentError)
78
-
79
- valid_data = :valid
80
- valid_data.class.should == Symbol
81
- lambda { @measurement.source = valid_data }.should_not raise_error(ArgumentError)
82
- end
83
-
84
- it "only accepts Time for utc_time_stamp" do
85
- invalid_data = 1
86
- invalid_data.class.should_not == Time
87
- lambda { @measurement.utc_time_stamp = invalid_data }.should raise_error(ArgumentError)
88
-
89
- valid_data = Time.now.utc
90
- valid_data.class.should == Time
91
- lambda { @measurement.utc_time_stamp = valid_data }.should_not raise_error(ArgumentError)
92
- end
93
-
94
- it "only accepts Measurement::Result for current" do
95
- invalid_data = "invalid"
96
- invalid_data.class.should_not == Barometer::Measurement::Result
97
- lambda { @measurement.current = invalid_data }.should raise_error(ArgumentError)
98
-
99
- valid_data = Barometer::Measurement::Result.new
100
- valid_data.class.should == Barometer::Measurement::Result
101
- lambda { @measurement.current = valid_data }.should_not raise_error(ArgumentError)
102
- end
103
-
104
- it "only accepts Data::ResultArray for forecast" do
105
- invalid_data = 1
106
- invalid_data.class.should_not == Barometer::Measurement::ResultArray
107
- lambda { @measurement.forecast = invalid_data }.should raise_error(ArgumentError)
108
-
109
- valid_data = Barometer::Measurement::ResultArray.new
110
- valid_data.class.should == Barometer::Measurement::ResultArray
111
- lambda { @measurement.forecast = valid_data }.should_not raise_error(ArgumentError)
112
- end
113
-
114
- it "only accepts Data::Zone for timezone" do
115
- invalid_data = 1
116
- invalid_data.class.should_not == Data::Zone
117
- lambda { @measurement.timezone = invalid_data }.should raise_error(ArgumentError)
118
-
119
- valid_data = Data::Zone.new("Europe/Paris")
120
- valid_data.class.should == Data::Zone
121
- lambda { @measurement.timezone = valid_data }.should_not raise_error(ArgumentError)
122
- end
123
-
124
- it "only accepts Data::Location for station" do
125
- invalid_data = 1
126
- invalid_data.class.should_not == Data::Location
127
- lambda { @measurement.station = invalid_data }.should raise_error(ArgumentError)
128
-
129
- valid_data = Data::Location.new
130
- valid_data.class.should == Data::Location
131
- lambda { @measurement.station = valid_data }.should_not raise_error(ArgumentError)
132
- end
133
-
134
- it "only accepts Data::Location for location" do
135
- invalid_data = 1
136
- invalid_data.class.should_not == Data::Location
137
- lambda { @measurement.location = invalid_data }.should raise_error(ArgumentError)
138
-
139
- valid_data = Data::Location.new
140
- valid_data.class.should == Data::Location
141
- lambda { @measurement.location = valid_data }.should_not raise_error(ArgumentError)
142
- end
143
-
144
- it "only accepts Fixnum for weight" do
145
- invalid_data = "test"
146
- invalid_data.class.should_not == Fixnum
147
- lambda { @measurement.weight = invalid_data }.should raise_error(ArgumentError)
148
-
149
- valid_data = 1
150
- valid_data.class.should == Fixnum
151
- lambda { @measurement.weight = valid_data }.should_not raise_error(ArgumentError)
152
- end
153
-
154
- it "only accepts Array for links" do
155
- invalid_data = 1
156
- invalid_data.class.should_not == Hash
157
- lambda { @measurement.links = invalid_data }.should raise_error(ArgumentError)
158
-
159
- valid_data = {1 => nil}
160
- valid_data.class.should == Hash
161
- lambda { @measurement.links = valid_data }.should_not raise_error(ArgumentError)
162
- end
163
-
164
- it "only accepts Data::LocalTime for measured_at" do
165
- invalid_data = 1
166
- invalid_data.class.should_not == Data::LocalTime
167
- lambda { @measurement.measured_at = invalid_data }.should raise_error(ArgumentError)
168
-
169
- valid_data = Data::LocalTime.new
170
- valid_data.class.should == Data::LocalTime
171
- lambda { @measurement.measured_at = valid_data }.should_not raise_error(ArgumentError)
172
- end
173
- end
174
-
175
- describe "and the helpers" do
176
- before(:each) do
177
- @measurement = Barometer::Measurement.new
178
- end
179
-
180
- it "changes state to successful (if successful)" do
181
- @measurement.success.should be_false
182
- @measurement.success!
183
- @measurement.utc_time_stamp.should be_nil
184
- @measurement.current.should be_nil
185
- @measurement.success.should be_false
186
-
187
- @measurement.current = Barometer::Measurement::Result.new
188
- @measurement.current.temperature = Data::Temperature.new
189
- @measurement.current.temperature.c = 10
190
- @measurement.utc_time_stamp.should_not be_nil
191
- @measurement.success!
192
- @measurement.success.should be_true
193
- end
194
-
195
- it "returns successful state" do
196
- @measurement.current = Barometer::Measurement::Result.new
197
- @measurement.current.temperature = Data::Temperature.new
198
- @measurement.current.temperature.c = 10
199
- @measurement.success!
200
- @measurement.success.should be_true
201
- @measurement.success?.should be_true
202
- end
203
-
204
- it "returns non-successful state" do
205
- @measurement.success.should be_false
206
- @measurement.success?.should be_false
207
- end
208
-
209
- it "stamps the utc_time_stamp" do
210
- @measurement.utc_time_stamp.should be_nil
211
- @measurement.stamp!
212
- @measurement.utc_time_stamp.should_not be_nil
213
- end
214
-
215
- it "indicates if current" do
216
- @measurement.current.should be_nil
217
- @measurement.current?.should be_true
218
-
219
- @measurement.current = Barometer::Measurement::Result.new
220
- @measurement.current.current_at.should be_nil
221
- @measurement.current?.should be_true
222
-
223
- @measurement.current.current_at = Data::LocalTime.new(9,0,0)
224
- @measurement.current?.should be_true
225
- @measurement.current?("9:00 am").should be_true
226
- end
227
-
228
- describe "changing units" do
229
- before(:each) do
230
- @measurement = Barometer::Measurement.new
231
- end
232
-
233
- it "indicates if metric?" do
234
- @measurement.metric.should be_true
235
- @measurement.metric?.should be_true
236
- @measurement.metric = false
237
- @measurement.metric.should be_false
238
- @measurement.metric?.should be_false
239
- end
240
-
241
- it "changes to imperial" do
242
- @measurement.metric?.should be_true
243
- @measurement.imperial!
244
- @measurement.metric?.should be_false
245
- end
246
-
247
- it "changes to metric" do
248
- @measurement.metric = false
249
- @measurement.metric?.should be_false
250
- @measurement.metric!
251
- @measurement.metric?.should be_true
252
- end
253
- end
254
- end
255
-
256
- describe "when searching forecasts using 'for'" do
257
- before(:each) do
258
- @measurement = Barometer::Measurement.new
259
-
260
- # create a measurement object with a result array that includes
261
- # dates for 4 consecutive days starting with tommorrow
262
- @measurement.forecast = Barometer::Measurement::ResultArray.new
263
- 1.upto(4) do |i|
264
- forecast_measurement = Barometer::Measurement::Result.new
265
- forecast_measurement.date = Date.parse((Time.now + (i * 60 * 60 * 24)).to_s)
266
- @measurement.forecast << forecast_measurement
267
- end
268
- @measurement.forecast.size.should == 4
269
-
270
- @tommorrow = (Time.now + (60 * 60 * 24))
271
- end
272
-
273
- it "returns nil when there are no forecasts" do
274
- @measurement.forecast = Barometer::Measurement::ResultArray.new
275
- @measurement.forecast.size.should == 0
276
- @measurement.for.should be_nil
277
- end
278
-
279
- it "finds the date using a String" do
280
- tommorrow = @tommorrow.to_s
281
- tommorrow.class.should == String
282
- @measurement.for(tommorrow).should == @measurement.forecast.first
283
- end
284
-
285
- it "finds the date using a Date" do
286
- tommorrow = Date.parse(@tommorrow.to_s)
287
- tommorrow.class.should == Date
288
- @measurement.for(tommorrow).should == @measurement.forecast.first
289
- end
290
-
291
- it "finds the date using a DateTime" do
292
- tommorrow = DateTime.parse(@tommorrow.to_s)
293
- tommorrow.class.should == DateTime
294
- @measurement.for(tommorrow).should == @measurement.forecast.first
295
- end
296
-
297
- it "finds the date using a Time" do
298
- @tommorrow.class.should == Time
299
- @measurement.for(@tommorrow).should == @measurement.forecast.first
300
- end
301
-
302
- it "fidns the date using Data::LocalDateTime" do
303
- tommorrow = Data::LocalDateTime.parse(@tommorrow.to_s)
304
- tommorrow.class.should == Data::LocalDateTime
305
- @measurement.for(tommorrow).should == @measurement.forecast.first
306
- end
307
-
308
- it "finds nothing when there is not a match" do
309
- yesterday = (Time.now - (60 * 60 * 24))
310
- yesterday.class.should == Time
311
- @measurement.for(yesterday).should be_nil
312
- end
313
- end
314
-
315
- describe "when answering the simple questions," do
316
- before(:each) do
317
- @measurement = Barometer::Measurement.new(:wunderground)
318
- @measurement.current = Barometer::Measurement::Result.new
319
- @now = Data::LocalDateTime.parse("2009-05-01 2:05 pm")
320
- end
321
-
322
- describe "windy?" do
323
- it "returns true if a current_measurement returns true" do
324
- @measurement.current.stub(:windy? => true)
325
- @measurement.windy?.should be_true
326
- end
327
-
328
- it "returns false if a current_measurement returns false" do
329
- @measurement.current.stub(:windy? => false)
330
- @measurement.windy?.should be_false
331
- end
332
- end
333
-
334
- describe "wet?" do
335
- it "returns true if the current_measurement returns true" do
336
- @measurement.current.stub(:wet? => true)
337
- @measurement.wet?.should be_true
338
- end
339
-
340
- it "returns false if the current_measurement returns false" do
341
- @measurement.current.stub(:wet? => false)
342
- @measurement.wet?.should be_false
343
- end
344
- end
345
-
346
- describe "day?" do
347
- it "returns true if the current_measurement returns true" do
348
- @measurement.current.stub(:day? => true)
349
- @measurement.day?.should be_true
350
- end
351
-
352
- it "returns false if the current_measurement returns false" do
353
- @measurement.current.stub(:day? => false)
354
- @measurement.day?.should be_false
355
- end
356
- end
357
-
358
- describe "sunny?" do
359
- it "returns true if the current_measurement returns true and day" do
360
- @measurement.current.stub(:day? => true)
361
- @measurement.current.stub(:sunny? => true)
362
- @measurement.day?.should be_true
363
- @measurement.sunny?.should be_true
364
- end
365
-
366
- it "returns false if the current_measurement returns false and day" do
367
- @measurement.current.stub(:day? => true)
368
- @measurement.current.stub(:sunny? => false)
369
- @measurement.day?.should be_true
370
- @measurement.sunny?.should be_false
371
- end
372
-
373
- it "returns false if night time" do
374
- @measurement.current.stub(:day? => false)
375
- @measurement.current.stub(:sunny? => true)
376
- @measurement.day?.should be_false
377
- @measurement.sunny?.should be_false
378
- end
379
- end
380
- end
381
- end