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
data/Rakefile CHANGED
@@ -9,4 +9,4 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
9
9
  spec.rspec_opts = ["--color"]
10
10
  end
11
11
 
12
- task :default => :spec
12
+ task default: :spec
@@ -1,36 +1,34 @@
1
1
  # -*- encoding: utf-8 -*-
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
2
+ $:.push File.expand_path('../lib', __FILE__)
4
3
  require 'barometer/version'
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{barometer}
6
+ s.name = 'barometer'
8
7
  s.version = Barometer::VERSION
9
- s.authors = ["Mark G"]
10
- s.email = %q{barometer@attackcorp.com}
11
- s.summary = %q{A multi API consuming weather forecasting superstar.}
12
- s.description = %q{A multi API consuming weather forecasting superstar.}
13
- s.homepage = %q{http://github.com/attack/barometer}
14
-
15
- s.default_executable = %q{barometer}
8
+ s.authors = ['Mark G']
9
+ s.email = ['barometer@attackcorp.com']
10
+ s.description = 'A multi API consuming weather forecasting superstar.'
11
+ s.summary = s.description
12
+ s.homepage = 'http://github.com/attack/barometer'
13
+ s.license = 'MIT'
16
14
 
17
15
  s.files = `git ls-files`.split("\n")
18
16
  s.test_files = `git ls-files -- spec/*`.split("\n")
19
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
- s.require_paths = ["lib"]
17
+ s.require_paths = ['lib']
21
18
 
22
- s.rdoc_options = ["--charset=UTF-8"]
19
+ s.rdoc_options = ['--charset=UTF-8']
23
20
 
24
- s.add_dependency %q<httparty>, ">= 0.4.5"
25
- s.add_dependency %q<tzinfo>, ">= 0.3.14"
26
- s.add_dependency "nokogiri"
27
- s.add_dependency "yajl-ruby"
28
- s.add_dependency "crack"
21
+ s.add_dependency 'httpclient'
22
+ s.add_dependency 'tzinfo', '>= 0.3.14'
23
+ s.add_dependency 'nokogiri'
24
+ s.add_dependency 'yajl-ruby'
25
+ s.add_dependency 'nori'
26
+ s.add_dependency 'multi_json', '~> 1.0'
27
+ s.add_dependency 'virtus', '>= 1.0.0'
29
28
 
30
- s.add_development_dependency "rspec"
31
- s.add_development_dependency "webmock"
32
- s.add_development_dependency "rake"
33
- s.add_development_dependency "pry"
34
- s.add_development_dependency "vcr"
35
- s.add_development_dependency "fakefs"
29
+ s.add_development_dependency 'rspec', '>= 2.11'
30
+ s.add_development_dependency 'webmock'
31
+ s.add_development_dependency 'rake'
32
+ s.add_development_dependency 'pry'
33
+ s.add_development_dependency 'vcr'
36
34
  end
@@ -1,76 +1,25 @@
1
- $:.unshift(File.dirname(__FILE__))
2
-
3
- require 'barometer/version'
4
- require 'barometer/base'
5
- require 'barometer/query'
6
- require 'barometer/weather'
7
- require 'barometer/services'
8
- require 'barometer/data'
9
- require 'barometer/formats'
10
- require 'barometer/key_file_parser'
1
+ require_relative 'barometer/version'
2
+ require_relative 'barometer/utils'
3
+ require_relative 'barometer/base'
4
+ require_relative 'barometer/query'
5
+ require_relative 'barometer/weather'
6
+ require_relative 'barometer/data'
7
+ require_relative 'barometer/response'
8
+ require_relative 'barometer/weather_service'
11
9
 
12
10
  module Barometer
11
+ @@config = { 1 => {wunderground: {version: :v1}} }
12
+ def self.config; @@config; end;
13
+ def self.config=(hash); @@config = hash; end;
13
14
 
14
- @@debug_mode = false
15
- def self.debug; @@debug_mode; end;
16
- def self.debug=(value); @@debug_mode = value; end;
17
- def self.debug!; @@debug_mode = true; end;
18
- def self.debug?; @@debug_mode; end;
19
-
20
- def self.google_geocode_key
21
- warn "[DEPRECATION] `Barometer.google_geocode_key` is deprecated. A Google API key is no longer needed"
22
- end
23
- def self.google_geocode_key=(google_key)
24
- warn "[DEPRECATION] `Barometer.google_geocode_key=(key)` is deprecated. A Google API key is no longer needed"
25
- end
26
-
27
- @@yahoo_placemaker_app_id = nil
28
- def self.yahoo_placemaker_app_id; @@yahoo_placemaker_app_id; end;
29
- def self.yahoo_placemaker_app_id=(yahoo_key); @@yahoo_placemaker_app_id = yahoo_key; end;
30
-
31
- # sometimes a query is used as is and never gets geocoded (ie zipcode)
32
- # often, it is useful to have queries geocoded to know where in the
33
- # world that query points to. you can force the geocoding of
34
- # queries (even when not required) so that you have the geocoded
35
- # data. the reason this isn't the default is that it will use an
36
- # extra web service query when not normally required
37
- #
38
- @@force_geocode = false
39
- def self.force_geocode; @@force_geocode; end;
40
- def self.force_geocode=(value); @@force_geocode = value; end;
41
- def self.force_geocode!; @@force_geocode = true; end;
42
-
43
- @@enhance_timezone = false
44
- def self.enhance_timezone; @@enhance_timezone; end;
45
- def self.enhance_timezone=(value); @@enhance_timezone = value; end;
46
- def self.enhance_timezone!; @@enhance_timezone = true; end;
47
-
48
- # adjust the timeout used when interactind with external web services
49
- #
50
15
  @@timeout = 15
51
16
  def self.timeout; @@timeout; end;
52
17
  def self.timeout=(value); @@timeout = value; end;
53
18
 
54
- def self.new(query=nil)
55
- Barometer::Base.new(query)
56
- end
57
-
58
- # update the Barometer configuration
59
- #
60
- def self.config=(config=nil)
61
- Barometer::Base.config = config
19
+ def self.new(*args)
20
+ Barometer::Base.new(*args)
62
21
  end
63
22
 
64
- # shortcut to Barometer::Service.source method
65
- # allows Barometer.source(:wunderground)
66
- #
67
- def self.source(source)
68
- Barometer::WeatherService.source(source)
69
- end
70
-
71
- # custom errors
72
- #
73
23
  class OutOfSources < StandardError; end
74
-
24
+ class TimeoutError < StandardError; end
75
25
  end
76
-
@@ -1,83 +1,53 @@
1
1
  module Barometer
2
2
  class Base
3
+ attr_reader :weather
3
4
 
4
- # allow the configuration of specific weather APIs to be used,
5
- # and the order in which they would be used
6
- #
7
- @@config = { 1 => [:wunderground] }
8
- def self.config; @@config; end;
9
- def self.config=(hash); @@config = hash; end;
10
-
11
- attr_reader :query
12
- attr_accessor :weather, :success
13
-
14
- def initialize(query=nil)
15
- @query = Barometer::Query.new(query)
16
- @weather = Barometer::Weather.new
17
- @success = false
5
+ def initialize(query, units=:metric)
6
+ @query = Query.new(query, units)
7
+ @weather = Weather.new(units)
18
8
  end
19
9
 
20
- # iterate through all the configured sources and
21
- # collect weather data for each one
22
- #
23
- def measure(metric=nil)
24
- return nil unless @query
25
- @weather.start_at = Time.now.utc
26
-
27
- level = 1
28
- until self.success?
29
- if sources = @@config[level]
30
- _dig(sources, nil, metric)
31
- else
32
- raise OutOfSources
33
- end
34
- level += 1
10
+ def measure
11
+ record_time do
12
+ measure_until_successful or raise OutOfSources
35
13
  end
36
-
37
- @weather.end_at = Time.now.utc
38
- @weather
14
+ weather
39
15
  end
40
16
 
41
- def success?; @success; end
42
-
43
17
  private
44
18
 
45
- # iterate through the setup until we have a source name (and possibly
46
- # a config for that source), then measure with that source
47
- #
48
- # this allows for many different config formats, like
49
- # { 1 => :wunderground }
50
- # { 1 => [:wunderground]}
51
- # { 1 => [:wunderground, :yahoo]}
52
- # { 1 => [:wunderground, {:yahoo => {:weight => 2}}]}
53
- # { 1 => {:wunderground => {:weight => 2}}}
54
- # { 1 => [{:wunderground => {:weight => 2}}]}
55
- #
56
- def _dig(data, config=nil, metric=nil)
57
- if data.is_a?(String) || data.is_a?(Symbol)
58
- _measure(data, config, metric)
59
- elsif data.is_a?(Array)
60
- data.each do |datum|
61
- _dig(datum, nil, metric)
62
- end
63
- elsif data.is_a?(Hash)
64
- data.each do |datum, config|
65
- _dig(datum, config, metric)
66
- end
19
+ attr_reader :query
20
+
21
+ def record_time
22
+ weather.start_at = Time.now.utc
23
+ yield
24
+ weather.end_at = Time.now.utc
25
+ end
26
+
27
+ def measure_until_successful
28
+ Utils::ConfigReader.take_level_while do |level|
29
+ measure_using_all_services_in_level(level)
30
+ measure_with_next_level?
67
31
  end
32
+ success?
68
33
  end
69
34
 
70
- # do that actual source measurement
71
- #
72
- def _measure(datum, config=nil, metric=nil)
73
- Barometer.source(datum.to_sym).keys = config[:keys] if (config && config[:keys])
74
- measurement = Barometer.source(datum.to_sym).measure(@query, metric)
75
- if config && config[:weight]
76
- measurement.weight = config[:weight]
35
+ def measure_using_all_services_in_level(level)
36
+ Utils::ConfigReader.services(level) do |source, config|
37
+ measure_and_record(source, config)
77
38
  end
78
- @success = true if measurement.success?
79
- @weather.measurements << measurement
80
39
  end
81
40
 
41
+ def measure_and_record(source, config)
42
+ weather.responses << WeatherService.new(source, config[:version]).measure(query, config)
43
+ end
44
+
45
+ def success?
46
+ weather.success?
47
+ end
48
+
49
+ def measure_with_next_level?
50
+ !success?
51
+ end
82
52
  end
83
53
  end
@@ -1,21 +1,16 @@
1
- $:.unshift(File.dirname(__FILE__))
1
+ module Barometer
2
+ module Data
3
+ end
4
+ end
2
5
 
3
- # units
4
- #
5
- require 'data/zone'
6
- require 'data/sun'
7
- require 'data/geo'
8
- require 'data/location'
9
- require 'data/units'
10
- require 'data/temperature'
11
- require 'data/distance'
12
- require 'data/speed'
13
- require 'data/pressure'
14
- require 'data/local_time'
15
- require 'data/local_datetime'
16
-
17
- # measurements
18
- #
19
- require 'measurements/measurement'
20
- require 'measurements/result'
21
- require 'measurements/result_array'
6
+ require_relative 'data/convertable_units'
7
+ require_relative 'data/temperature'
8
+ require_relative 'data/distance'
9
+ require_relative 'data/vector'
10
+ require_relative 'data/pressure'
11
+ require_relative 'data/zone'
12
+ require_relative 'data/coordinates'
13
+ require_relative 'data/location'
14
+ require_relative 'data/geo'
15
+ require_relative 'data/sun'
16
+ require_relative 'data/attribute'
@@ -0,0 +1,19 @@
1
+ require 'virtus'
2
+
3
+ module Barometer
4
+ module Data
5
+ module Attribute
6
+ end
7
+ end
8
+ end
9
+
10
+ require_relative 'attributes/temperature.rb'
11
+ require_relative 'attributes/vector.rb'
12
+ require_relative 'attributes/pressure.rb'
13
+ require_relative 'attributes/distance.rb'
14
+ require_relative 'attributes/location.rb'
15
+ require_relative 'attributes/zone.rb'
16
+ require_relative 'attributes/sun.rb'
17
+ require_relative 'attributes/time.rb'
18
+ require_relative 'attributes/float.rb'
19
+ require_relative 'attributes/integer.rb'
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Distance < Virtus::Attribute
5
+ def coerce(value)
6
+ value.is_a?(Barometer::Data::Distance) ? value : Barometer::Data::Distance.new(*value)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Float < Virtus::Attribute
5
+ def coerce(value, *args)
6
+ value ? value.to_f : default_value.call
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Integer < Virtus::Attribute
5
+ def coerce(value, *args)
6
+ value ? value.to_i : default_value.call
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Location < Virtus::Attribute
5
+ def coerce(value)
6
+ value.is_a?(Barometer::Data::Location) ? value : Barometer::Data::Location.new(*value)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Pressure < Virtus::Attribute
5
+ def coerce(value)
6
+ value.is_a?(Barometer::Data::Pressure) ? value : Barometer::Data::Pressure.new(*value)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Sun < Virtus::Attribute
5
+ def coerce(value)
6
+ if value.nil?
7
+ Barometer::Data::Sun.new
8
+ elsif value.is_a?(Barometer::Data::Sun)
9
+ value
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Temperature < Virtus::Attribute
5
+ def coerce(value, *args)
6
+ value.is_a?(Barometer::Data::Temperature) ? value : Barometer::Data::Temperature.new(*value)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Time < Virtus::Attribute
5
+ def coerce(value)
6
+ value.nil? || value.is_a?(::Time) ? value : Utils::Time.parse(*value)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module Barometer
2
+ module Data
3
+ module Attribute
4
+ class Vector < Virtus::Attribute
5
+ def coerce(value)
6
+ value.is_a?(Barometer::Data::Vector) ? value : Barometer::Data::Vector.new(*value)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end