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,498 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
-
3
- describe Barometer::Query, :vcr => {
4
- :cassette_name => "Query"
5
- } do
6
- before(:each) do
7
- @short_zipcode = "90210"
8
- @zipcode = @short_zipcode
9
- @long_zipcode = "90210-5555"
10
- @weather_id = "USGA0028"
11
- @postal_code = "T5B 4M9"
12
- @coordinates = "40.756054,-73.986951"
13
- @geocode = "New York, NY"
14
- @icao = "KSFO"
15
-
16
- # actual conversions
17
- @zipcode_to_coordinates = "34.1030032,-118.4104684"
18
- @zipcode_to_geocode = "Beverly Hills, CA, United States"
19
- @zipcode_to_weather_id = "USCA0090"
20
- @postalcode_to_coordinates = "53.5721719,-113.4551835"
21
- @geocode_to_coordinates = "40.7143528,-74.0059731"
22
- @geocode_to_weather_id = "USNY0996"
23
- @coordinates_to_geocode = "Manhattan, NY, United States"
24
- @coordinates_to_weather_id = "USNY0996"
25
- @icao_to_coordinates = "37.615223,-122.389979"
26
- @icao_to_geocode = "San Francisco, CA, United States"
27
- @icao_to_weather_id = "USCA0987"
28
- end
29
-
30
- describe "determines the query format" do
31
- before(:each) do
32
- @query = Barometer::Query.new
33
- @query.country_code.should be_nil
34
- end
35
-
36
- it "recognizes a short zip code" do
37
- @query.q = @short_zipcode
38
- @query.format.should be_nil
39
- @query.analyze!
40
- @query.format.to_sym.should == :short_zipcode
41
- @query.country_code.should == "US"
42
- end
43
-
44
- it "recognizes a zip code" do
45
- @query.q = @long_zipcode
46
- @query.format.should be_nil
47
- @query.analyze!
48
- @query.format.to_sym.should == :zipcode
49
- @query.country_code.should == "US"
50
- end
51
-
52
- it "recognizes a postal code" do
53
- @query.q = @postal_code
54
- @query.format.should be_nil
55
- @query.analyze!
56
- @query.format.to_sym.should == :postalcode
57
- @query.country_code.should == "CA"
58
- end
59
-
60
- it "recognizes icao" do
61
- @query.q = @icao
62
- @query.format.should be_nil
63
- @query.analyze!
64
- @query.format.to_sym.should == :icao
65
- @query.country_code.should == "US"
66
- end
67
-
68
- it "recognizes weather_id" do
69
- @query.q = @weather_id
70
- @query.format.should be_nil
71
- @query.analyze!
72
- @query.format.to_sym.should == :weather_id
73
- @query.country_code.should == "US"
74
- end
75
-
76
- it "recognizes latitude/longitude" do
77
- @query.q = @coordinates
78
- @query.format.should be_nil
79
- @query.analyze!
80
- @query.format.to_sym.should == :coordinates
81
- @query.country_code.should be_nil
82
- end
83
-
84
- it "defaults to a general geo_location" do
85
- @query.q = @geocode
86
- @query.format.should be_nil
87
- @query.analyze!
88
- @query.format.to_sym.should == :geocode
89
- @query.country_code.should be_nil
90
- end
91
- end
92
-
93
- describe "when initialized" do
94
- before(:each) do
95
- @query = Barometer::Query.new
96
- end
97
-
98
- it "responds to q" do
99
- @query.q.should be_nil
100
- end
101
-
102
- it "attempts query conversion when reading q (if format known)" do
103
- query = Barometer::Query.new(@geocode)
104
- query.format.should == :geocode
105
- Barometer::Query::Format::Geocode.should_receive(:convert_query).once.with(@geocode).and_return(@geocode)
106
- query.q.should == @geocode
107
- end
108
-
109
- it "does not attempt query conversion when reading q (if format unknown)" do
110
- @query.format.should be_nil
111
- Barometer::Query::Format.should_not_receive(:convert_query)
112
- @query.q.should be_nil
113
- end
114
-
115
- it "responds to format" do
116
- @query.format.should be_nil
117
- end
118
-
119
- it "responds to country_code" do
120
- @query.country_code.should be_nil
121
- end
122
-
123
- it "sets the query" do
124
- query = Barometer::Query.new(@geocode)
125
- query.q.should == @geocode
126
- end
127
-
128
- it "determines the format" do
129
- query = Barometer::Query.new(@geocode)
130
- query.format.should_not be_nil
131
- end
132
-
133
- it "responds to geo" do
134
- @query.geo.should be_nil
135
- end
136
-
137
- it "responds to timezone" do
138
- @query.timezone.should be_nil
139
- end
140
-
141
- it "responds to conversions" do
142
- @query.conversions.should be_nil
143
- end
144
-
145
- it "returns latitude for when recognized as coordinates" do
146
- @query.q = @coordinates
147
- @query.format.should be_nil
148
- @query.analyze!
149
- @query.format.to_sym.should == :coordinates
150
- @query.latitude.should == @coordinates.split(',')[0]
151
- end
152
-
153
- it "returns longitude for when recognized as coordinates" do
154
- @query.q = @coordinates
155
- @query.format.should be_nil
156
- @query.analyze!
157
- @query.format.to_sym.should == :coordinates
158
- @query.longitude.should == @coordinates.split(',')[1]
159
- end
160
-
161
- it "returns nothing for latitude/longitude when not coordinates" do
162
- @query.q = @geocode
163
- @query.format.should be_nil
164
- @query.analyze!
165
- @query.format.to_sym.should == :geocode
166
- @query.latitude.should be_nil
167
- @query.longitude.should be_nil
168
- end
169
- end
170
-
171
- describe "when returning the query to a Weather API" do
172
- it "raises an error if there are NO acceptable formats" do
173
- acceptable_formats = nil
174
- query = Barometer::Query.new
175
- lambda { query.convert!(acceptable_formats) }.should raise_error
176
-
177
- acceptable_formats = []
178
- lambda { query.convert!(acceptable_formats) }.should raise_error
179
- end
180
-
181
- describe "and the query is already the preferred format" do
182
- it "returns the short_zipcode untouched" do
183
- preferred = [:short_zipcode]
184
- query = Barometer::Query.new(@short_zipcode)
185
- query.convert!(preferred).q.should == @short_zipcode
186
- query.country_code.should == "US"
187
- end
188
-
189
- it "returns the long_zipcode untouched" do
190
- preferred = [:zipcode]
191
- query = Barometer::Query.new(@long_zipcode)
192
- query.convert!(preferred).q.should == @long_zipcode
193
- query.country_code.should == "US"
194
- end
195
-
196
- it "returns the postalcode untouched" do
197
- preferred = [:postalcode]
198
- query = Barometer::Query.new(@postal_code)
199
- query.convert!(preferred).q.should == @postal_code
200
- query.country_code.should == "CA"
201
- end
202
-
203
- it "returns the icao untouched" do
204
- preferred = [:icao]
205
- query = Barometer::Query.new(@icao)
206
- query.convert!(preferred).q.should == @icao
207
- end
208
-
209
- it "returns the coordinates untouched" do
210
- preferred = [:coordinates]
211
- query = Barometer::Query.new(@coordinates)
212
- query.convert!(preferred).q.should == @coordinates
213
- end
214
-
215
- it "returns the geocode untouched" do
216
- preferred = [:geocode]
217
- query = Barometer::Query.new(@geocode)
218
- query.convert!(preferred).q.should == @geocode
219
- end
220
- end
221
-
222
- describe "and the query needs converting" do
223
- describe "with an intial format of :short_zipcode," do
224
- before(:each) do
225
- @query = Barometer::Query.new(@short_zipcode)
226
- end
227
-
228
- it "converts to zipcode" do
229
- acceptable_formats = [:zipcode]
230
- query = @query.convert!(acceptable_formats)
231
- query.q.should == @zipcode
232
- query.country_code.should == "US"
233
- end
234
-
235
- it "converts to coordinates" do
236
- acceptable_formats = [:coordinates]
237
- query = @query.convert!(acceptable_formats)
238
- query.q.should == @zipcode_to_coordinates
239
- query.country_code.should == "US"
240
- end
241
-
242
- it "converts to geocode" do
243
- acceptable_formats = [:geocode]
244
- query = @query.convert!(acceptable_formats)
245
- query.q.should == @zipcode_to_geocode
246
- query.country_code.should == "US"
247
- end
248
-
249
- it "converts to weather_id" do
250
- acceptable_formats = [:weather_id]
251
- query = @query.convert!(acceptable_formats)
252
- query.q.should == @zipcode_to_weather_id
253
- query.country_code.should == "US"
254
- end
255
-
256
- it "skips converting to icao" do
257
- acceptable_formats = [:icao]
258
- query = @query.convert!(acceptable_formats)
259
- query.should be_nil
260
- end
261
-
262
- it "skips converting to postalcode" do
263
- acceptable_formats = [:postalcode]
264
- query = @query.convert!(acceptable_formats)
265
- query.should be_nil
266
- end
267
- end
268
-
269
- describe "with an intial format of :zipcode," do
270
- before(:each) do
271
- @query = Barometer::Query.new(@zipcode)
272
- Barometer.force_geocode = false
273
- end
274
-
275
- it "converts to coordinates" do
276
- acceptable_formats = [:coordinates]
277
- query = @query.convert!(acceptable_formats)
278
- query.q.should == @zipcode_to_coordinates
279
- query.country_code.should == "US"
280
- end
281
-
282
- it "converts to geocode" do
283
- acceptable_formats = [:geocode]
284
- query = @query.convert!(acceptable_formats)
285
- query.q.should == @zipcode_to_geocode
286
- query.country_code.should == "US"
287
- end
288
-
289
- it "skips converting to icao" do
290
- acceptable_formats = [:icao]
291
- query = @query.convert!(acceptable_formats)
292
- query.should be_nil
293
- end
294
-
295
- it "skips converting to postalcode" do
296
- acceptable_formats = [:postalcode]
297
- query = @query.convert!(acceptable_formats)
298
- query.should be_nil
299
- end
300
-
301
- it "skips converting to short_zipcode" do
302
- @query = Barometer::Query.new(@long_zipcode)
303
- acceptable_formats = [:short_zipcode]
304
- query = @query.convert!(acceptable_formats)
305
- query.should be_nil
306
- end
307
-
308
- it "converts to weather_id" do
309
- acceptable_formats = [:weather_id]
310
- query = @query.convert!(acceptable_formats)
311
- query.q.should == @zipcode_to_weather_id
312
- query.country_code.should == "US"
313
- end
314
- end
315
-
316
- describe "with an intial format of :postalcode," do
317
- before(:each) do
318
- @query = Barometer::Query.new(@postal_code)
319
- end
320
-
321
- it "converts to coordinates" do
322
- acceptable_formats = [:coordinates]
323
- query = @query.convert!(acceptable_formats)
324
- query.q.should == @postalcode_to_coordinates
325
- query.country_code.should == "CA"
326
- end
327
-
328
- it "skips converting to geocode" do
329
- acceptable_formats = [:geocode]
330
- query = @query.convert!(acceptable_formats)
331
- query.should be_nil
332
- end
333
-
334
- it "skips converting to icao" do
335
- acceptable_formats = [:icao]
336
- query = @query.convert!(acceptable_formats)
337
- query.should be_nil
338
- end
339
-
340
- it "skips converting to short_zipcode" do
341
- acceptable_formats = [:short_zipcode]
342
- query = @query.convert!(acceptable_formats)
343
- query.should be_nil
344
- end
345
-
346
- it "skips converting to weather_id" do
347
- acceptable_formats = [:weather_id]
348
- query = @query.convert!(acceptable_formats)
349
- query.should be_nil
350
- end
351
-
352
- it "skips converting to zipcode" do
353
- acceptable_formats = [:zipcode]
354
- query = @query.convert!(acceptable_formats)
355
- query.should be_nil
356
- end
357
- end
358
-
359
- describe "with an intial format of :icao," do
360
- before(:each) do
361
- @query = Barometer::Query.new(@icao)
362
- end
363
-
364
- it "converts to coordinates" do
365
- acceptable_formats = [:coordinates]
366
- query = @query.convert!(acceptable_formats)
367
- query.q.should == @icao_to_coordinates
368
- query.country_code.should == "US"
369
- end
370
-
371
- it "converts to geocode" do
372
- acceptable_formats = [:geocode]
373
- query = @query.convert!(acceptable_formats)
374
- query.q.should == @icao_to_geocode
375
- query.country_code.should == "US"
376
- end
377
-
378
- it "skips converting to postalcode" do
379
- acceptable_formats = [:postalcode]
380
- query = @query.convert!(acceptable_formats)
381
- query.should be_nil
382
- end
383
-
384
- it "skips converting to short_zipcode" do
385
- acceptable_formats = [:short_zipcode]
386
- query = @query.convert!(acceptable_formats)
387
- query.should be_nil
388
- end
389
-
390
- it "converts to weather_id" do
391
- acceptable_formats = [:weather_id]
392
- query = @query.convert!(acceptable_formats)
393
- query.q.should == @icao_to_weather_id
394
- query.country_code.should == "US"
395
- end
396
-
397
- it "skips converting to zipcode" do
398
- acceptable_formats = [:zipcode]
399
- query = @query.convert!(acceptable_formats)
400
- query.should be_nil
401
- end
402
- end
403
-
404
- describe "with an intial format of :geocode," do
405
- before(:each) do
406
- @query = Barometer::Query.new(@geocode)
407
- end
408
-
409
- it "converts to coordinates" do
410
- acceptable_formats = [:coordinates]
411
- query = @query.convert!(acceptable_formats)
412
-
413
- query_coords = query.q.split(',').map{|c| c.to_f}
414
- expected_coords = @geocode_to_coordinates.split(',').map{|c| c.to_f}
415
-
416
- query_coords[0].should be_within(0.00001).of(expected_coords[0])
417
- query_coords[1].should be_within(0.00001).of(expected_coords[1])
418
- query.country_code.should == "US"
419
- end
420
-
421
- it "skips converting to icao" do
422
- acceptable_formats = [:icao]
423
- query = @query.convert!(acceptable_formats)
424
- query.should be_nil
425
- end
426
-
427
- it "skips converting to postalcode" do
428
- acceptable_formats = [:postalcode]
429
- query = @query.convert!(acceptable_formats)
430
- query.should be_nil
431
- end
432
-
433
- it "skips converting to short_zipcode" do
434
- acceptable_formats = [:short_zipcode]
435
- query = @query.convert!(acceptable_formats)
436
- query.should be_nil
437
- end
438
-
439
- it "converts to weather_id" do
440
- acceptable_formats = [:weather_id]
441
- query = @query.convert!(acceptable_formats)
442
- query.q.should == @geocode_to_weather_id
443
- query.country_code.should == "US"
444
- end
445
-
446
- it "skips converting to zipcode" do
447
- acceptable_formats = [:zipcode]
448
- query = @query.convert!(acceptable_formats)
449
- query.should be_nil
450
- end
451
- end
452
-
453
- describe "with an intial format of :coordinates," do
454
- before(:each) do
455
- @query = Barometer::Query.new(@coordinates)
456
- end
457
-
458
- it "converts to geocode" do
459
- acceptable_formats = [:geocode]
460
- query = @query.convert!(acceptable_formats)
461
- query.q.should == @coordinates_to_geocode
462
- query.country_code.should == "US"
463
- end
464
-
465
- it "skips converting to icao" do
466
- acceptable_formats = [:icao]
467
- query = @query.convert!(acceptable_formats)
468
- query.should be_nil
469
- end
470
-
471
- it "skips converting to postalcode" do
472
- acceptable_formats = [:postalcode]
473
- query = @query.convert!(acceptable_formats)
474
- query.should be_nil
475
- end
476
-
477
- it "skips converting to short_zipcode" do
478
- acceptable_formats = [:short_zipcode]
479
- query = @query.convert!(acceptable_formats)
480
- query.should be_nil
481
- end
482
-
483
- it "converts to weather_id" do
484
- acceptable_formats = [:weather_id]
485
- query = @query.convert!(acceptable_formats)
486
- query.q.should == @coordinates_to_weather_id
487
- query.country_code.should == "US"
488
- end
489
-
490
- it "skips converting to zipcode" do
491
- acceptable_formats = [:zipcode]
492
- query = @query.convert!(acceptable_formats)
493
- query.should be_nil
494
- end
495
- end
496
- end
497
- end
498
- end