barometer 0.7.3 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +1 -0
- data/.travis.yml +7 -0
- data/LICENSE +1 -1
- data/{README.rdoc → README.md} +124 -110
- data/Rakefile +1 -21
- data/TODO +8 -9
- data/barometer.gemspec +20 -19
- data/bin/barometer +36 -83
- data/lib/barometer.rb +13 -11
- data/lib/barometer/base.rb +10 -10
- data/lib/barometer/data.rb +1 -1
- data/lib/barometer/data/distance.rb +25 -25
- data/lib/barometer/data/geo.rb +9 -9
- data/lib/barometer/data/local_datetime.rb +24 -20
- data/lib/barometer/data/local_time.rb +13 -13
- data/lib/barometer/data/location.rb +6 -6
- data/lib/barometer/data/pressure.rb +24 -24
- data/lib/barometer/data/speed.rb +28 -28
- data/lib/barometer/data/sun.rb +7 -7
- data/lib/barometer/data/temperature.rb +29 -29
- data/lib/barometer/data/units.rb +9 -9
- data/lib/barometer/data/zone.rb +19 -19
- data/lib/barometer/formats.rb +1 -1
- data/lib/barometer/formats/coordinates.rb +7 -7
- data/lib/barometer/formats/format.rb +6 -6
- data/lib/barometer/formats/geocode.rb +5 -5
- data/lib/barometer/formats/icao.rb +6 -6
- data/lib/barometer/formats/postalcode.rb +3 -3
- data/lib/barometer/formats/short_zipcode.rb +2 -2
- data/lib/barometer/formats/weather_id.rb +10 -10
- data/lib/barometer/formats/woe_id.rb +20 -20
- data/lib/barometer/formats/zipcode.rb +3 -3
- data/lib/barometer/key_file_parser.rb +20 -0
- data/lib/barometer/measurements/measurement.rb +32 -32
- data/lib/barometer/measurements/result.rb +39 -39
- data/lib/barometer/measurements/result_array.rb +12 -12
- data/lib/barometer/query.rb +15 -15
- data/lib/barometer/services.rb +3 -3
- data/lib/barometer/translations/icao_country_codes.yml +20 -20
- data/lib/barometer/translations/weather_country_codes.yml +1 -1
- data/lib/barometer/translations/zone_codes.yml +2 -2
- data/lib/barometer/version.rb +3 -0
- data/lib/barometer/weather.rb +27 -27
- data/lib/barometer/weather_services/noaa.rb +314 -3
- data/lib/barometer/weather_services/service.rb +32 -30
- data/lib/barometer/weather_services/weather_bug.rb +35 -33
- data/lib/barometer/weather_services/wunderground.rb +31 -29
- data/lib/barometer/weather_services/yahoo.rb +36 -35
- data/lib/barometer/web_services/geocode.rb +5 -7
- data/lib/barometer/web_services/noaa_station_id.rb +53 -0
- data/lib/barometer/web_services/placemaker.rb +11 -13
- data/lib/barometer/web_services/timezone.rb +5 -7
- data/lib/barometer/web_services/weather_id.rb +4 -6
- data/lib/barometer/web_services/web_service.rb +4 -4
- data/spec/barometer_spec.rb +25 -27
- data/spec/cassettes/Barometer.json +1 -0
- data/spec/cassettes/Query.json +1 -0
- data/spec/cassettes/Query_Format_Coordinates.json +1 -0
- data/spec/cassettes/Query_Format_Geocode.json +1 -0
- data/spec/cassettes/Query_Format_WeatherID.json +1 -0
- data/spec/cassettes/Query_Format_WoeID.json +1 -0
- data/spec/cassettes/WeatherService.json +1 -0
- data/spec/cassettes/WeatherService_Noaa.json +1 -0
- data/spec/cassettes/WeatherService_WeatherBug.json +1 -0
- data/spec/cassettes/WeatherService_Wunderground.json +1 -0
- data/spec/cassettes/WeatherService_Yahoo.json +1 -0
- data/spec/cassettes/WebService_Geocode.json +1 -0
- data/spec/cassettes/WebService_NoaaStation.json +1 -0
- data/spec/data/distance_spec.rb +60 -60
- data/spec/data/geo_spec.rb +23 -23
- data/spec/data/local_datetime_spec.rb +44 -44
- data/spec/data/local_time_spec.rb +47 -47
- data/spec/data/location_spec.rb +16 -16
- data/spec/data/pressure_spec.rb +61 -61
- data/spec/data/speed_spec.rb +69 -69
- data/spec/data/sun_spec.rb +25 -25
- data/spec/data/temperature_spec.rb +68 -68
- data/spec/data/units_spec.rb +21 -21
- data/spec/data/zone_spec.rb +35 -35
- data/spec/formats/coordinates_spec.rb +27 -27
- data/spec/formats/format_spec.rb +17 -25
- data/spec/formats/geocode_spec.rb +23 -31
- data/spec/formats/icao_spec.rb +26 -32
- data/spec/formats/postalcode_spec.rb +22 -28
- data/spec/formats/short_zipcode_spec.rb +20 -26
- data/spec/formats/weather_id_spec.rb +57 -67
- data/spec/formats/woe_id_spec.rb +59 -59
- data/spec/formats/zipcode_spec.rb +39 -47
- data/spec/key_file_parser_spec.rb +28 -0
- data/spec/measurements/measurement_spec.rb +79 -133
- data/spec/measurements/result_array_spec.rb +23 -38
- data/spec/measurements/result_spec.rb +100 -128
- data/spec/query_spec.rb +83 -100
- data/spec/spec_helper.rb +24 -6
- data/spec/weather_services/noaa_spec.rb +179 -0
- data/spec/weather_services/services_spec.rb +28 -36
- data/spec/weather_services/weather_bug_spec.rb +57 -77
- data/spec/weather_services/wunderground_spec.rb +36 -65
- data/spec/weather_services/yahoo_spec.rb +38 -60
- data/spec/weather_spec.rb +79 -79
- data/spec/web_services/geocode_spec.rb +7 -11
- data/spec/web_services/noaa_station_id_spec.rb +33 -0
- data/spec/web_services/placemaker_spec.rb +7 -12
- data/spec/web_services/web_services_spec.rb +3 -9
- metadata +214 -163
- data/VERSION.yml +0 -5
- data/lib/barometer/weather_services/google.rb +0 -142
- data/lib/barometer/weather_services/weather_dot_com.rb +0 -279
- data/spec/fakeweb_helper.rb +0 -179
- data/spec/fixtures/formats/weather_id/90210.xml +0 -7
- data/spec/fixtures/formats/weather_id/from_USGA0028.xml +0 -3
- data/spec/fixtures/formats/weather_id/ksfo.xml +0 -1
- data/spec/fixtures/formats/weather_id/manhattan.xml +0 -7
- data/spec/fixtures/formats/weather_id/new_york.xml +0 -1
- data/spec/fixtures/formats/weather_id/the_hills.xml +0 -1
- data/spec/fixtures/geocode/40_73_v3.json +0 -497
- data/spec/fixtures/geocode/90210_v3.json +0 -63
- data/spec/fixtures/geocode/T5B4M9_v3.json +0 -68
- data/spec/fixtures/geocode/atlanta_v3.json +0 -58
- data/spec/fixtures/geocode/calgary_ab_v3.json +0 -58
- data/spec/fixtures/geocode/ksfo_v3.json +0 -73
- data/spec/fixtures/geocode/newyork_ny_v3.json +0 -58
- data/spec/fixtures/services/google/calgary_ab.xml +0 -1
- data/spec/fixtures/services/placemaker/T5B4M9.xml +0 -65
- data/spec/fixtures/services/placemaker/atlanta.xml +0 -65
- data/spec/fixtures/services/placemaker/coords.xml +0 -65
- data/spec/fixtures/services/placemaker/ksfo.xml +0 -65
- data/spec/fixtures/services/placemaker/new_york.xml +0 -65
- data/spec/fixtures/services/placemaker/the_hills.xml +0 -65
- data/spec/fixtures/services/placemaker/w615702.xml +0 -47
- data/spec/fixtures/services/weather_bug/90210_current.xml +0 -93
- data/spec/fixtures/services/weather_bug/90210_forecast.xml +0 -76
- data/spec/fixtures/services/weather_dot_com/90210.xml +0 -1
- data/spec/fixtures/services/wunderground/current_calgary_ab.xml +0 -9
- data/spec/fixtures/services/wunderground/forecast_calgary_ab.xml +0 -13
- data/spec/fixtures/services/yahoo/90210.xml +0 -3
- data/spec/weather_services/google_spec.rb +0 -181
- data/spec/weather_services/weather_dot_com_spec.rb +0 -224
data/Rakefile
CHANGED
@@ -6,27 +6,7 @@ require 'rspec/core/rake_task'
|
|
6
6
|
|
7
7
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
8
8
|
spec.pattern = 'spec/**/*_spec.rb'
|
9
|
-
spec.rspec_opts = ["
|
10
|
-
end
|
11
|
-
|
12
|
-
RSpec::Core::RakeTask.new(:rcov) do |spec|
|
13
|
-
spec.pattern = 'spec/**/*_spec.rb'
|
14
|
-
spec.rcov = true
|
9
|
+
spec.rspec_opts = ["--color"]
|
15
10
|
end
|
16
11
|
|
17
12
|
task :default => :spec
|
18
|
-
|
19
|
-
require 'rake/rdoctask'
|
20
|
-
Rake::RDocTask.new do |rdoc|
|
21
|
-
if File.exist?('VERSION.yml')
|
22
|
-
config = YAML.load(File.read('VERSION.yml'))
|
23
|
-
version = "#{config[:major]}.#{config[:minor]}.#{config[:patch]}"
|
24
|
-
else
|
25
|
-
version = ""
|
26
|
-
end
|
27
|
-
|
28
|
-
rdoc.rdoc_dir = 'rdoc'
|
29
|
-
rdoc.title = "barometer #{version}"
|
30
|
-
rdoc.rdoc_files.include('README*')
|
31
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
32
|
-
end
|
data/TODO
CHANGED
@@ -1,12 +1,11 @@
|
|
1
1
|
== now
|
2
2
|
- use Yahoo placemaker for geocoding (as exclusive, or as priority for supported conversions)
|
3
|
-
- remove use of google api key
|
4
3
|
|
5
4
|
== very soon
|
6
5
|
|
7
6
|
- google geocoding terms of service indicate that "a map must be shown" ... what to do?
|
8
7
|
- driver: hamweather
|
9
|
-
- driver:
|
8
|
+
- driver: metar
|
10
9
|
- improve code based on metrics
|
11
10
|
- use Geomojo to convert coords to woe_id (when no yahoo key)
|
12
11
|
- remove use of HTTParty, use Net:HTTP and Nokogiri instead
|
@@ -20,13 +19,13 @@
|
|
20
19
|
|
21
20
|
- Rdoc compatible documentation
|
22
21
|
- add uv, moon, elevation info to current
|
23
|
-
- driver:
|
22
|
+
- driver: intellicast
|
24
23
|
- weather.com simple_questions improve answers (use extra data)
|
25
24
|
- make sure you can compare LocalTime to LocalDateTime in LocalTime class
|
26
25
|
|
27
26
|
- be smart, never make duplicate queries
|
28
27
|
- ie. if you are including wunderground, do it first and use the timezone info
|
29
|
-
|
28
|
+
|
30
29
|
- conversion and weather fetching queries should have hooks to allow
|
31
30
|
for configurable caching via memcache, then web service calls can
|
32
31
|
be cached across multiple measurement instances.
|
@@ -38,15 +37,15 @@
|
|
38
37
|
- Parsing dates is slow (ie Time.parse)
|
39
38
|
for data parsing with known date/time formats, parse the
|
40
39
|
needed information explicitly
|
41
|
-
|
40
|
+
|
42
41
|
example:
|
43
|
-
|
42
|
+
|
44
43
|
_parse_date(text)
|
45
44
|
text =~ /^(\d\d\d\d)-(\d\d)-(\d\d)/
|
46
45
|
Time.new($3,$2,$1)
|
47
46
|
end
|
48
|
-
|
49
|
-
|
47
|
+
|
48
|
+
|
50
49
|
== other weather info
|
51
50
|
|
52
51
|
=== intellicast
|
@@ -58,4 +57,4 @@ http://www.arl.noaa.gov/READYcmet.php
|
|
58
57
|
http://www.windguru.cz/int/index.php
|
59
58
|
http://www.nco.ncep.noaa.gov/pmb/products/gfs/
|
60
59
|
http://www.weatherdeveloper.com/2008/01/31/grib2-migration/
|
61
|
-
http://www.cpc.noaa.gov/products/wesley/wgrib2/
|
60
|
+
http://www.cpc.noaa.gov/products/wesley/wgrib2/
|
data/barometer.gemspec
CHANGED
@@ -1,35 +1,36 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'barometer/version'
|
2
5
|
|
3
6
|
Gem::Specification.new do |s|
|
4
7
|
s.name = %q{barometer}
|
5
|
-
s.version =
|
6
|
-
|
7
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
-
s.rubygems_version = %q{1.3.5}
|
9
|
-
|
8
|
+
s.version = Barometer::VERSION
|
10
9
|
s.authors = ["Mark G"]
|
11
10
|
s.email = %q{barometer@attackcorp.com}
|
12
|
-
s.date = %q{2011-06-02}
|
13
|
-
|
14
11
|
s.summary = %q{A multi API consuming weather forecasting superstar.}
|
15
12
|
s.description = %q{A multi API consuming weather forecasting superstar.}
|
16
13
|
s.homepage = %q{http://github.com/attack/barometer}
|
17
14
|
|
18
15
|
s.default_executable = %q{barometer}
|
19
|
-
|
20
|
-
s.files
|
21
|
-
s.test_files
|
22
|
-
s.executables
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- spec/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
20
|
s.require_paths = ["lib"]
|
24
21
|
|
25
22
|
s.rdoc_options = ["--charset=UTF-8"]
|
26
23
|
|
27
|
-
s.add_dependency
|
28
|
-
s.add_dependency
|
29
|
-
s.add_dependency
|
30
|
-
|
31
|
-
s.
|
32
|
-
|
33
|
-
s.add_development_dependency
|
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"
|
29
|
+
|
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"
|
34
36
|
end
|
35
|
-
|
data/bin/barometer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# == Barometer
|
3
|
+
# == Barometer
|
4
4
|
# This is the command line interface to the barometer gem.
|
5
5
|
#
|
6
6
|
# == Examples
|
@@ -11,7 +11,7 @@
|
|
11
11
|
# barometer --yahoo 90210
|
12
12
|
# barometer --verbose 'new york'
|
13
13
|
#
|
14
|
-
# == Usage
|
14
|
+
# == Usage
|
15
15
|
# barometer [options] query
|
16
16
|
#
|
17
17
|
# For help use: barometer -h
|
@@ -26,9 +26,8 @@
|
|
26
26
|
# -i, --imperial measure in imperial
|
27
27
|
# --wunderground add wunderground as a source
|
28
28
|
# --yahoo add yahoo as a source
|
29
|
-
# --google add google as a source
|
30
|
-
# --weather add weather.com as a source
|
31
29
|
# --bug add weather_bug as a source
|
30
|
+
# --noaa add NOAA as a source
|
32
31
|
# -p, --pop pop threshold used to determine wet?
|
33
32
|
# -s, --wind wind speed threshold used to determine windy?
|
34
33
|
# -a, --at time/date used to determine when to calculate summary
|
@@ -38,7 +37,7 @@
|
|
38
37
|
# http://github.com/attack/barometer
|
39
38
|
#
|
40
39
|
# == Copyright
|
41
|
-
# Copyright (c) 2009-
|
40
|
+
# Copyright (c) 2009-2013 Mark G. Licensed under the MIT License:
|
42
41
|
# http://www.opensource.org/licenses/mit-license.php
|
43
42
|
|
44
43
|
require 'rubygems'
|
@@ -53,15 +52,13 @@ require 'yaml'
|
|
53
52
|
|
54
53
|
# file where API keys are stored
|
55
54
|
KEY_FILE = File.expand_path(File.join('~', '.barometer'))
|
56
|
-
BAROMETER_VERSION = '0.7.3'
|
57
55
|
|
58
56
|
class App
|
59
|
-
|
60
57
|
attr_reader :options
|
61
58
|
|
62
59
|
def initialize(arguments, stdin)
|
63
60
|
@arguments = arguments.dup
|
64
|
-
|
61
|
+
|
65
62
|
# Set defaults
|
66
63
|
@options = OpenStruct.new
|
67
64
|
@options.timeout = 15
|
@@ -72,7 +69,7 @@ class App
|
|
72
69
|
@options.verbose = false
|
73
70
|
@options.at = nil
|
74
71
|
@options.default = true
|
75
|
-
|
72
|
+
|
76
73
|
# thresholds
|
77
74
|
@options.windy_m = 10
|
78
75
|
@options.windy_i = 7
|
@@ -81,28 +78,27 @@ class App
|
|
81
78
|
|
82
79
|
# Parse options, check arguments, then process the command
|
83
80
|
def run
|
84
|
-
if parsed_options? && arguments_valid?
|
81
|
+
if parsed_options? && arguments_valid?
|
85
82
|
puts "Start at #{DateTime.now}\n\n" if @options.verbose
|
86
83
|
output_options if @options.verbose # [Optional]
|
87
|
-
|
88
|
-
process_arguments
|
84
|
+
|
89
85
|
process_command
|
90
|
-
|
86
|
+
|
91
87
|
puts "\nFinished at #{DateTime.now}" if @options.verbose
|
92
88
|
else
|
93
89
|
output_usage
|
94
90
|
end
|
95
91
|
end
|
96
|
-
|
92
|
+
|
97
93
|
protected
|
98
|
-
|
94
|
+
|
99
95
|
# future options
|
100
96
|
#
|
101
97
|
# time: -a --at
|
102
98
|
#
|
103
99
|
def parsed_options?
|
104
100
|
# Specify options
|
105
|
-
opt = OptionParser.new
|
101
|
+
opt = OptionParser.new
|
106
102
|
opt.on('-v', '--version') { output_version ; exit 0 }
|
107
103
|
opt.on('-h', '--help') { output_help }
|
108
104
|
opt.on('-V', '--verbose') { @options.verbose = true }
|
@@ -114,41 +110,22 @@ class App
|
|
114
110
|
opt.on('-i', '--imperial') { @options.metric = false }
|
115
111
|
opt.on('--wunderground') { @options.sources << :wunderground; @options.default = false }
|
116
112
|
opt.on('--yahoo') { @options.sources << :yahoo; @options.default = false }
|
117
|
-
opt.on('--google') { @options.sources << :google; @options.default = false }
|
118
|
-
opt.on('--weather') { @options.sources << :weather_dot_com; @options.default = false }
|
119
113
|
opt.on('--bug') { @options.sources << :weather_bug; @options.default = false }
|
114
|
+
opt.on('--noaa') { @options.sources << :noaa; @options.default = false }
|
120
115
|
opt.on('-p n', '--pop n') {|n| @options.pop = n.to_i || 50 }
|
121
116
|
opt.on('-s n', '--wind n') {|n| @options.metric ? @options.windy_m = n.to_f || 10 : @options.windy_i = n.to_f || 7 }
|
122
|
-
|
117
|
+
|
123
118
|
opt.parse!(@arguments) rescue return false
|
124
|
-
|
119
|
+
|
125
120
|
process_options
|
126
|
-
true
|
127
|
-
end
|
128
|
-
|
129
|
-
def config_weather_dot_com
|
130
|
-
if File.exists?(KEY_FILE)
|
131
|
-
keys = YAML.load_file(KEY_FILE)
|
132
|
-
if keys["weather"] && keys["weather"]["partner"] && keys["weather"]["license"]
|
133
|
-
partner_key = keys["weather"]["partner"].to_s
|
134
|
-
license_key = keys["weather"]["license"].to_s
|
135
|
-
else
|
136
|
-
weather_key_message
|
137
|
-
exit
|
138
|
-
end
|
139
|
-
else
|
140
|
-
File.open(KEY_FILE, 'w') {|f| f << "\nweather:\n partner: PARTNER_KEY\n license: LICENSE_KEY" }
|
141
|
-
weather_key_message
|
142
|
-
exit
|
143
|
-
end
|
144
|
-
{ :weather_dot_com => { :keys => { :partner => partner_key, :license => license_key } } }
|
121
|
+
true
|
145
122
|
end
|
146
|
-
|
123
|
+
|
147
124
|
def config_weather_bug
|
148
125
|
if File.exists?(KEY_FILE)
|
149
|
-
|
150
|
-
|
151
|
-
|
126
|
+
keys = YAML.load_file(KEY_FILE)
|
127
|
+
if keys["weather_bug"] && keys["weather_bug"]["code"]
|
128
|
+
code = keys["weather_bug"]["code"].to_s
|
152
129
|
else
|
153
130
|
bug_key_message
|
154
131
|
exit
|
@@ -167,10 +144,6 @@ class App
|
|
167
144
|
@options.sources = @options.sources.uniq
|
168
145
|
Barometer.force_geocode = @options.geocode
|
169
146
|
Barometer.enhance_timezone = @options.timezone
|
170
|
-
if @options.sources.include?(:weather_dot_com)
|
171
|
-
@options.sources.delete(:weather_dot_com)
|
172
|
-
@options.sources << config_weather_dot_com
|
173
|
-
end
|
174
147
|
if @options.sources.include?(:weather_bug)
|
175
148
|
@options.sources.delete(:weather_bug)
|
176
149
|
@options.sources << config_weather_bug
|
@@ -178,11 +151,11 @@ class App
|
|
178
151
|
Barometer.config = { 1 => @options.sources }
|
179
152
|
Barometer.timeout = @options.timeout
|
180
153
|
end
|
181
|
-
|
154
|
+
|
182
155
|
def output_options
|
183
156
|
puts "Options:\n"
|
184
|
-
|
185
|
-
@options.marshal_dump.each do |name, val|
|
157
|
+
|
158
|
+
@options.marshal_dump.each do |name, val|
|
186
159
|
puts " #{name} = #{val}"
|
187
160
|
end
|
188
161
|
puts
|
@@ -192,17 +165,11 @@ class App
|
|
192
165
|
def arguments_valid?
|
193
166
|
true if (@arguments.length >= 1 || @options.web)
|
194
167
|
end
|
195
|
-
|
196
|
-
# Setup the arguments
|
197
|
-
def process_arguments
|
198
|
-
#puts @arguments.inspect
|
199
|
-
end
|
200
|
-
|
168
|
+
|
201
169
|
def output_help
|
202
170
|
output_version
|
203
|
-
#output_usage
|
204
171
|
end
|
205
|
-
|
172
|
+
|
206
173
|
def output_usage
|
207
174
|
puts "Usage: "
|
208
175
|
puts "barometer [options] query"
|
@@ -219,18 +186,17 @@ class App
|
|
219
186
|
puts " -i, --imperial measure in imperial"
|
220
187
|
puts " --wunderground add wunderground as a source"
|
221
188
|
puts " --yahoo add yahoo as a source"
|
222
|
-
puts " --google add google as a source"
|
223
|
-
puts " --weather add weather.com as a source"
|
224
189
|
puts " --bug add weather_bug as a source"
|
190
|
+
puts " --noaa add NOAA as a source"
|
225
191
|
puts " -p, --pop pop threshold used to determine wet?"
|
226
192
|
puts " -s, --wind wind speed threshold used to determine windy?"
|
227
193
|
puts " -a, --at time/date used to determine when to calculate summary"
|
228
194
|
end
|
229
|
-
|
195
|
+
|
230
196
|
def output_version
|
231
|
-
puts "#{File.basename(__FILE__)} version #{
|
197
|
+
puts "#{File.basename(__FILE__)} version #{Barometer::VERSION}"
|
232
198
|
end
|
233
|
-
|
199
|
+
|
234
200
|
def process_command
|
235
201
|
barometer = Barometer.new(@arguments.join(" "))
|
236
202
|
begin
|
@@ -359,7 +325,7 @@ def pretty_current(c)
|
|
359
325
|
return unless c
|
360
326
|
section("CURRENT", 2) do
|
361
327
|
pretty_hash({
|
362
|
-
"Measured at" => c.current_at, "Updated at" => c.updated_at,
|
328
|
+
"Measured at" => c.current_at, "Updated at" => c.updated_at.to_s(true),
|
363
329
|
"Humidity" => c.humidity, "Icon" => c.icon,
|
364
330
|
"Condition" => c.condition, "Temperature" => c.temperature,
|
365
331
|
"Dew Point" => c.dew_point, "Heat Index" => c.heat_index,
|
@@ -375,7 +341,7 @@ def pretty_forecast(f)
|
|
375
341
|
return unless f
|
376
342
|
section("FOR: #{f.date}", 3) do
|
377
343
|
pretty_hash({
|
378
|
-
"Valid From" => f.valid_start_date.to_s(true),
|
344
|
+
"Valid From" => f.valid_start_date.to_s(true),
|
379
345
|
"Valid Until" => f.valid_end_date.to_s(true),
|
380
346
|
"Icon" => f.icon, "Description" => f.description,
|
381
347
|
"Condition" => f.condition, "High" => f.high,
|
@@ -428,7 +394,7 @@ end
|
|
428
394
|
def pretty_info(w)
|
429
395
|
title("INFO", 1)
|
430
396
|
value("GitHub", "http://github.com/attack/barometer")
|
431
|
-
value("Barometer Version",
|
397
|
+
value("Barometer Version", Barometer::VERSION)
|
432
398
|
value("Total Time", "#{(w.end_at - w.start_at)} s")
|
433
399
|
end
|
434
400
|
|
@@ -449,18 +415,6 @@ def pretty_output(barometer)
|
|
449
415
|
end
|
450
416
|
end
|
451
417
|
|
452
|
-
def weather_key_message
|
453
|
-
puts
|
454
|
-
puts "MISSING KEYS !!!"
|
455
|
-
puts "Please update the key_file '#{KEY_FILE}' with your weather api keys"
|
456
|
-
puts "Get it here: ???"
|
457
|
-
puts "Then, add these lines to the file:"
|
458
|
-
puts "weather:"
|
459
|
-
puts " partner: PARTNER_KEY"
|
460
|
-
puts " license: LICENSE_KEY"
|
461
|
-
puts
|
462
|
-
end
|
463
|
-
|
464
418
|
def bug_key_message
|
465
419
|
puts
|
466
420
|
puts "MISSING KEYS !!!"
|
@@ -474,13 +428,12 @@ end
|
|
474
428
|
|
475
429
|
# set API keys
|
476
430
|
if File.exists?(KEY_FILE)
|
477
|
-
|
478
|
-
|
479
|
-
|
431
|
+
keys = YAML.load_file(KEY_FILE)
|
432
|
+
if keys["yahoo"] && keys["yahoo"]["app_id"]
|
433
|
+
Barometer.yahoo_placemaker_app_id = keys["yahoo"]["app_id"]
|
480
434
|
end
|
481
435
|
else
|
482
|
-
File.open(KEY_FILE, 'w') {|f| f << "yahoo
|
483
|
-
exit
|
436
|
+
File.open(KEY_FILE, 'w') {|f| f << "yahoo:\n app_id: YOUR_KEY_KERE" }
|
484
437
|
end
|
485
438
|
|
486
439
|
# Create and run the application
|
data/lib/barometer.rb
CHANGED
@@ -1,31 +1,33 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__))
|
2
2
|
|
3
|
+
require 'barometer/version'
|
3
4
|
require 'barometer/base'
|
4
5
|
require 'barometer/query'
|
5
6
|
require 'barometer/weather'
|
6
7
|
require 'barometer/services'
|
7
8
|
require 'barometer/data'
|
8
9
|
require 'barometer/formats'
|
9
|
-
|
10
|
+
require 'barometer/key_file_parser'
|
11
|
+
|
10
12
|
module Barometer
|
11
|
-
|
13
|
+
|
12
14
|
@@debug_mode = false
|
13
15
|
def self.debug; @@debug_mode; end;
|
14
16
|
def self.debug=(value); @@debug_mode = value; end;
|
15
17
|
def self.debug!; @@debug_mode = true; end;
|
16
18
|
def self.debug?; @@debug_mode; end;
|
17
|
-
|
19
|
+
|
18
20
|
def self.google_geocode_key
|
19
21
|
warn "[DEPRECATION] `Barometer.google_geocode_key` is deprecated. A Google API key is no longer needed"
|
20
22
|
end
|
21
23
|
def self.google_geocode_key=(google_key)
|
22
24
|
warn "[DEPRECATION] `Barometer.google_geocode_key=(key)` is deprecated. A Google API key is no longer needed"
|
23
25
|
end
|
24
|
-
|
26
|
+
|
25
27
|
@@yahoo_placemaker_app_id = nil
|
26
28
|
def self.yahoo_placemaker_app_id; @@yahoo_placemaker_app_id; end;
|
27
29
|
def self.yahoo_placemaker_app_id=(yahoo_key); @@yahoo_placemaker_app_id = yahoo_key; end;
|
28
|
-
|
30
|
+
|
29
31
|
# sometimes a query is used as is and never gets geocoded (ie zipcode)
|
30
32
|
# often, it is useful to have queries geocoded to know where in the
|
31
33
|
# world that query points to. you can force the geocoding of
|
@@ -37,28 +39,28 @@ module Barometer
|
|
37
39
|
def self.force_geocode; @@force_geocode; end;
|
38
40
|
def self.force_geocode=(value); @@force_geocode = value; end;
|
39
41
|
def self.force_geocode!; @@force_geocode = true; end;
|
40
|
-
|
42
|
+
|
41
43
|
@@enhance_timezone = false
|
42
44
|
def self.enhance_timezone; @@enhance_timezone; end;
|
43
45
|
def self.enhance_timezone=(value); @@enhance_timezone = value; end;
|
44
46
|
def self.enhance_timezone!; @@enhance_timezone = true; end;
|
45
|
-
|
47
|
+
|
46
48
|
# adjust the timeout used when interactind with external web services
|
47
49
|
#
|
48
50
|
@@timeout = 15
|
49
51
|
def self.timeout; @@timeout; end;
|
50
52
|
def self.timeout=(value); @@timeout = value; end;
|
51
|
-
|
53
|
+
|
52
54
|
def self.new(query=nil)
|
53
55
|
Barometer::Base.new(query)
|
54
56
|
end
|
55
|
-
|
57
|
+
|
56
58
|
# update the Barometer configuration
|
57
59
|
#
|
58
60
|
def self.config=(config=nil)
|
59
61
|
Barometer::Base.config = config
|
60
62
|
end
|
61
|
-
|
63
|
+
|
62
64
|
# shortcut to Barometer::Service.source method
|
63
65
|
# allows Barometer.source(:wunderground)
|
64
66
|
#
|
@@ -69,6 +71,6 @@ module Barometer
|
|
69
71
|
# custom errors
|
70
72
|
#
|
71
73
|
class OutOfSources < StandardError; end
|
72
|
-
|
74
|
+
|
73
75
|
end
|
74
76
|
|