barometer 0.7.0 → 0.7.1
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/README.rdoc +2 -11
- data/VERSION.yml +1 -1
- data/barometer.gemspec +2 -2
- data/bin/barometer +18 -58
- metadata +3 -16
- data/lib/demometer/demometer.rb +0 -104
- data/lib/demometer/public/css/master.css +0 -188
- data/lib/demometer/public/css/print.css +0 -93
- data/lib/demometer/public/css/syntax.css +0 -63
- data/lib/demometer/public/images/go.png +0 -0
- data/lib/demometer/public/images/link-out.gif +0 -0
- data/lib/demometer/views/about.erb +0 -10
- data/lib/demometer/views/contributing.erb +0 -32
- data/lib/demometer/views/forecast.erb +0 -35
- data/lib/demometer/views/index.erb +0 -88
- data/lib/demometer/views/layout.erb +0 -38
- data/lib/demometer/views/measurement.erb +0 -102
- data/lib/demometer/views/readme.erb +0 -453
data/README.rdoc
CHANGED
@@ -15,7 +15,7 @@ this.
|
|
15
15
|
|
16
16
|
== version
|
17
17
|
|
18
|
-
Version 0.
|
18
|
+
Version 0.7.1 is the current release of this gem. The gem is available from
|
19
19
|
gemcutter (barometer: http://gemcutter.org/gems/barometer).
|
20
20
|
Older version are available through rubyforge (barometer) and github
|
21
21
|
(attack-barometer).
|
@@ -25,7 +25,7 @@ It is fully functional (for five weather service APIs).
|
|
25
25
|
|
26
26
|
Currently this project has completed initial development and will work for a
|
27
27
|
few weather services (wunderground, google, yahoo, weather.com, weather_bug).
|
28
|
-
Barometer
|
28
|
+
Barometer is developed using only Ruby 1.9.2, but will probably on both Ruby 1.8.7 and 1.9.1.
|
29
29
|
|
30
30
|
Features to be added in the future:
|
31
31
|
- better command line output
|
@@ -198,15 +198,6 @@ This will output the weather information for the given query.
|
|
198
198
|
See the help for more command line information.
|
199
199
|
|
200
200
|
# barometer -h
|
201
|
-
|
202
|
-
=== web demo
|
203
|
-
|
204
|
-
There is a Sinatra application that demos the functionality of Barometer,
|
205
|
-
and provides Barometer information. Start this local demo with:
|
206
|
-
|
207
|
-
# barometer -w
|
208
|
-
|
209
|
-
NOTE: This requires the gems "sinatra" and "vegas".
|
210
201
|
|
211
202
|
=== fail
|
212
203
|
|
data/VERSION.yml
CHANGED
data/barometer.gemspec
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{barometer}
|
5
|
-
s.version = "0.7.
|
5
|
+
s.version = "0.7.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.rubygems_version = %q{1.3.5}
|
9
9
|
|
10
10
|
s.authors = ["Mark G"]
|
11
11
|
s.email = %q{barometer@attackcorp.com}
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-06-01}
|
13
13
|
|
14
14
|
s.summary = %q{A multi API consuming weather forecasting superstar.}
|
15
15
|
s.description = %q{A multi API consuming weather forecasting superstar.}
|
data/bin/barometer
CHANGED
@@ -11,14 +11,6 @@
|
|
11
11
|
# barometer --yahoo 90210
|
12
12
|
# barometer --verbose 'new york'
|
13
13
|
#
|
14
|
-
# == Local Web Demo
|
15
|
-
# You can easily interact directly with barometer with the command:
|
16
|
-
# barometer -w
|
17
|
-
#
|
18
|
-
# This demo has 2 gem requirements:
|
19
|
-
# - sinatra (tested with 0.9.1.1)
|
20
|
-
# - vegas (tested with 0.0.1)
|
21
|
-
#
|
22
14
|
# == Usage
|
23
15
|
# barometer [options] query
|
24
16
|
#
|
@@ -41,22 +33,17 @@
|
|
41
33
|
# -s, --wind wind speed threshold used to determine windy?
|
42
34
|
# -a, --at time/date used to determine when to calculate summary
|
43
35
|
#
|
44
|
-
# Web Demo:
|
45
|
-
# -w, --web run web-app with barometer demo
|
46
|
-
# -k, --kill stop the web demo background process
|
47
|
-
# -S, --status show the web demo status
|
48
|
-
#
|
49
36
|
# == Author
|
50
37
|
# Mark G
|
51
38
|
# http://github.com/attack/barometer
|
52
39
|
#
|
53
40
|
# == Copyright
|
54
|
-
# Copyright (c) 2009-
|
41
|
+
# Copyright (c) 2009-2011 Mark G. Licensed under the MIT License:
|
55
42
|
# http://www.opensource.org/licenses/mit-license.php
|
56
43
|
|
57
44
|
require 'rubygems'
|
58
|
-
|
59
|
-
require '/Users/mark/
|
45
|
+
require 'barometer'
|
46
|
+
#require '/Users/mark/code/gems/barometer/lib/barometer'
|
60
47
|
|
61
48
|
require 'optparse'
|
62
49
|
require 'ostruct'
|
@@ -66,7 +53,7 @@ require 'yaml'
|
|
66
53
|
|
67
54
|
# file where API keys are stored
|
68
55
|
KEY_FILE = File.expand_path(File.join('~', '.barometer'))
|
69
|
-
BAROMETER_VERSION = '0.
|
56
|
+
BAROMETER_VERSION = '0.7.1'
|
70
57
|
|
71
58
|
class App
|
72
59
|
|
@@ -83,7 +70,6 @@ class App
|
|
83
70
|
@options.metric = true
|
84
71
|
@options.sources = []
|
85
72
|
@options.verbode = false
|
86
|
-
@options.web = false
|
87
73
|
@options.at = nil
|
88
74
|
@options.default = true
|
89
75
|
|
@@ -133,11 +119,6 @@ class App
|
|
133
119
|
opt.on('--bug') { @options.sources << :weather_bug; @options.default = false }
|
134
120
|
opt.on('-p n', '--pop n') {|n| @options.pop = n.to_i || 50 }
|
135
121
|
opt.on('-s n', '--wind n') {|n| @options.metric ? @options.windy_m = n.to_f || 10 : @options.windy_i = n.to_f || 7 }
|
136
|
-
|
137
|
-
# pass these onto vegas
|
138
|
-
opt.on('-w', '--web') { @options.web = true; ARGV.shift }
|
139
|
-
opt.on('-k', '--kill') { @options.web = true }
|
140
|
-
opt.on('-S', '--status') { @options.web = true }
|
141
122
|
|
142
123
|
opt.parse!(@arguments) rescue return false
|
143
124
|
|
@@ -244,11 +225,6 @@ class App
|
|
244
225
|
puts " -p, --pop pop threshold used to determine wet?"
|
245
226
|
puts " -s, --wind wind speed threshold used to determine windy?"
|
246
227
|
puts " -a, --at time/date used to determine when to calculate summary"
|
247
|
-
puts
|
248
|
-
puts " Web Demo:"
|
249
|
-
puts " -w, --web run web-app with barometer demo"
|
250
|
-
puts " -k, --kill stop the web demo background process"
|
251
|
-
puts " -S, --status show the web demo status"
|
252
228
|
end
|
253
229
|
|
254
230
|
def output_version
|
@@ -256,25 +232,21 @@ class App
|
|
256
232
|
end
|
257
233
|
|
258
234
|
def process_command
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
div(char="*")
|
267
|
-
puts "DEBUG LOG"
|
268
|
-
blank
|
269
|
-
end
|
270
|
-
barometer.measure(@options.metric) if barometer
|
271
|
-
blank if @options.verbose
|
272
|
-
pretty_output(barometer) if barometer.weather
|
273
|
-
rescue Barometer::OutOfSources
|
274
|
-
puts
|
275
|
-
puts " SORRY: your query did not provide any results"
|
276
|
-
puts
|
235
|
+
barometer = Barometer.new(@arguments.join(" "))
|
236
|
+
begin
|
237
|
+
if @options.verbose
|
238
|
+
Barometer::debug!
|
239
|
+
div(char="*")
|
240
|
+
puts "DEBUG LOG"
|
241
|
+
blank
|
277
242
|
end
|
243
|
+
barometer.measure(@options.metric) if barometer
|
244
|
+
blank if @options.verbose
|
245
|
+
pretty_output(barometer) if barometer.weather
|
246
|
+
rescue Barometer::OutOfSources
|
247
|
+
puts
|
248
|
+
puts " SORRY: your query did not provide any results"
|
249
|
+
puts
|
278
250
|
end
|
279
251
|
end
|
280
252
|
end
|
@@ -477,18 +449,6 @@ def pretty_output(barometer)
|
|
477
449
|
end
|
478
450
|
end
|
479
451
|
|
480
|
-
def run_web_mode(query=nil)
|
481
|
-
|
482
|
-
require 'rubygems'
|
483
|
-
require File.expand_path(File.dirname(__FILE__) + '/../lib/demometer/demometer.rb')
|
484
|
-
require 'vegas'
|
485
|
-
|
486
|
-
Vegas::Runner.new(Demometer, 'demometer') do |opts, app|
|
487
|
-
# opts is an option parser object
|
488
|
-
# app is your app class
|
489
|
-
end
|
490
|
-
end
|
491
|
-
|
492
452
|
def geocode_google_key_message
|
493
453
|
puts
|
494
454
|
puts "MISSING KEYS !!!"
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 7
|
8
|
-
-
|
9
|
-
version: 0.7.
|
8
|
+
- 1
|
9
|
+
version: 0.7.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Mark G
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date:
|
17
|
+
date: 2011-06-01 00:00:00 -04:00
|
18
18
|
default_executable: barometer
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -164,19 +164,6 @@ files:
|
|
164
164
|
- lib/barometer/web_services/timezone.rb
|
165
165
|
- lib/barometer/web_services/weather_id.rb
|
166
166
|
- lib/barometer/web_services/web_service.rb
|
167
|
-
- lib/demometer/demometer.rb
|
168
|
-
- lib/demometer/public/css/master.css
|
169
|
-
- lib/demometer/public/css/print.css
|
170
|
-
- lib/demometer/public/css/syntax.css
|
171
|
-
- lib/demometer/public/images/go.png
|
172
|
-
- lib/demometer/public/images/link-out.gif
|
173
|
-
- lib/demometer/views/about.erb
|
174
|
-
- lib/demometer/views/contributing.erb
|
175
|
-
- lib/demometer/views/forecast.erb
|
176
|
-
- lib/demometer/views/index.erb
|
177
|
-
- lib/demometer/views/layout.erb
|
178
|
-
- lib/demometer/views/measurement.erb
|
179
|
-
- lib/demometer/views/readme.erb
|
180
167
|
- spec/barometer_spec.rb
|
181
168
|
- spec/data/distance_spec.rb
|
182
169
|
- spec/data/geo_spec.rb
|
data/lib/demometer/demometer.rb
DELETED
@@ -1,104 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'sinatra'
|
3
|
-
require 'barometer'
|
4
|
-
|
5
|
-
# load API keys
|
6
|
-
@@config_file ||= File.expand_path(File.join('~', '.barometer'))
|
7
|
-
keys = YAML.load_file(@@config_file)
|
8
|
-
if keys["google"] && keys["google"]["geocode"]
|
9
|
-
Barometer.google_geocode_key = keys["google"]["geocode"]
|
10
|
-
else
|
11
|
-
raise RunTimeError "no geocoding keys"
|
12
|
-
exit
|
13
|
-
end
|
14
|
-
|
15
|
-
class Demometer < Sinatra::Default
|
16
|
-
|
17
|
-
def config_weather_dot_com
|
18
|
-
if File.exists?(@@config_file)
|
19
|
-
keys = YAML.load_file(@@config_file)
|
20
|
-
if keys["weather"] && keys["weather"]["partner"] && keys["weather"]["license"]
|
21
|
-
partner_key = keys["weather"]["partner"].to_s
|
22
|
-
license_key = keys["weather"]["license"].to_s
|
23
|
-
else
|
24
|
-
raise RunTimeError "no weather.com keys"
|
25
|
-
exit
|
26
|
-
end
|
27
|
-
else
|
28
|
-
File.open(@@config_file, 'w') {|f| f << "\nweather:\n partner: PARTNER_KEY\n license: LICENSE_KEY" }
|
29
|
-
raise RunTimeError "no weather.com keys"
|
30
|
-
exit
|
31
|
-
end
|
32
|
-
{ :weather_dot_com => { :keys => { :partner => partner_key, :license => license_key } } }
|
33
|
-
end
|
34
|
-
|
35
|
-
def config_weather_bug
|
36
|
-
if File.exists?(@@config_file)
|
37
|
-
keys = YAML.load_file(@@config_file)
|
38
|
-
if keys["weather_bug"] && keys["weather_bug"]["code"]
|
39
|
-
code = keys["weather_bug"]["code"].to_s
|
40
|
-
else
|
41
|
-
raise RunTimeError "no weatherbug.com keys"
|
42
|
-
exit
|
43
|
-
end
|
44
|
-
else
|
45
|
-
File.open(@@config_file, 'w') {|f| f << "\weather_bug:\n code: API_CODE" }
|
46
|
-
raise RunTimeError "no weatherbug.com keys"
|
47
|
-
exit
|
48
|
-
end
|
49
|
-
{ :weather_bug => { :keys => { :code => code } } }
|
50
|
-
end
|
51
|
-
|
52
|
-
helpers do
|
53
|
-
def data(title, value)
|
54
|
-
return if value.nil?
|
55
|
-
"<li>#{title}: #{value}</li>"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
get '/' do
|
60
|
-
erb :index
|
61
|
-
end
|
62
|
-
|
63
|
-
post '/' do
|
64
|
-
# apply options
|
65
|
-
Barometer.force_geocode = (params[:query][:geocode].to_s == "1" ? true : false)
|
66
|
-
metric = (params[:query][:metric].to_s == "1" ? true : false)
|
67
|
-
|
68
|
-
# determine sources
|
69
|
-
Barometer.config = { 1 => params[:query][:source].collect{|s| s.to_sym } }
|
70
|
-
|
71
|
-
# setup weather.com
|
72
|
-
if Barometer::Base.config && Barometer::Base.config[1] &&
|
73
|
-
Barometer::Base.config[1].include?(:weather_dot_com)
|
74
|
-
Barometer::Base.config[1].delete(:weather_dot_com)
|
75
|
-
Barometer::Base.config[1] << config_weather_dot_com
|
76
|
-
end
|
77
|
-
|
78
|
-
# setup weatherbug.com
|
79
|
-
if Barometer::Base.config && Barometer::Base.config[1] &&
|
80
|
-
Barometer::Base.config[1].include?(:weather_bug)
|
81
|
-
Barometer::Base.config[1].delete(:weather_bug)
|
82
|
-
Barometer::Base.config[1] << config_weather_bug
|
83
|
-
end
|
84
|
-
|
85
|
-
if params[:query] && !params[:query][:q].empty?
|
86
|
-
@barometer = Barometer.new(params[:query][:q])
|
87
|
-
@weather = @barometer.measure(metric)
|
88
|
-
end
|
89
|
-
erb :index
|
90
|
-
end
|
91
|
-
|
92
|
-
get '/contributing.html' do
|
93
|
-
erb :contributing
|
94
|
-
end
|
95
|
-
|
96
|
-
get '/readme.html' do
|
97
|
-
erb :readme
|
98
|
-
end
|
99
|
-
|
100
|
-
get '/about.html' do
|
101
|
-
erb :about
|
102
|
-
end
|
103
|
-
|
104
|
-
end
|
@@ -1,188 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
Inspired By: Blake Mizerany, www.sinatrarb.com
|
3
|
-
*/
|
4
|
-
|
5
|
-
body {
|
6
|
-
color:#000;
|
7
|
-
font-family:"Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Helvetica, Arial, sans-serif;
|
8
|
-
font-size:100%;
|
9
|
-
line-height:1.3;
|
10
|
-
background-color:#fff;
|
11
|
-
margin:0;
|
12
|
-
padding:0;
|
13
|
-
}
|
14
|
-
|
15
|
-
/* HEADER */
|
16
|
-
#head {
|
17
|
-
text-align:center;
|
18
|
-
}
|
19
|
-
#head h1 {
|
20
|
-
color:#000;
|
21
|
-
font-size:4em;
|
22
|
-
font-weight:normal;
|
23
|
-
letter-spacing:-3px;
|
24
|
-
line-height:1;
|
25
|
-
margin:0;
|
26
|
-
padding:20px 0 15px 0;
|
27
|
-
}
|
28
|
-
#head h1 a, #head h1 a:link, #head h1 a:visited, #head h1 a:hover {
|
29
|
-
color:#100;
|
30
|
-
text-decoration:none;
|
31
|
-
}
|
32
|
-
#head ul {
|
33
|
-
font-size:1.1em;
|
34
|
-
font-weight:normal;
|
35
|
-
text-transform:uppercase;
|
36
|
-
letter-spacing:2px;
|
37
|
-
text-align:center;
|
38
|
-
margin:0;
|
39
|
-
padding:0 40px 0.25em 40px;
|
40
|
-
}
|
41
|
-
#head ul li {
|
42
|
-
display:inline;
|
43
|
-
list-style-type:none;
|
44
|
-
padding:0 0.5em 0 0;
|
45
|
-
}
|
46
|
-
#head ul a, #head ul a:link, #head ul a:visited {
|
47
|
-
color:#56534f;
|
48
|
-
text-decoration:none;
|
49
|
-
}
|
50
|
-
#head ul a:hover {
|
51
|
-
color:#000;
|
52
|
-
text-decoration:underline
|
53
|
-
}
|
54
|
-
|
55
|
-
/* CONTENT */
|
56
|
-
|
57
|
-
#content {
|
58
|
-
color:#333;
|
59
|
-
font-size:1.1em;
|
60
|
-
max-width:44em;
|
61
|
-
min-width:30em;
|
62
|
-
margin:7px auto;
|
63
|
-
border-top:2px solid #837d7c;
|
64
|
-
}
|
65
|
-
strong {
|
66
|
-
font-weight:bold;
|
67
|
-
}
|
68
|
-
|
69
|
-
/* HEADINGS */
|
70
|
-
|
71
|
-
h1, h2, h3, h4, h5, h6 {
|
72
|
-
color:#000;
|
73
|
-
}
|
74
|
-
h1, h2 {
|
75
|
-
color:#211d1f;
|
76
|
-
font-weight:normal;
|
77
|
-
}
|
78
|
-
h1 a, h2 a { color:#222 }
|
79
|
-
h1 {
|
80
|
-
font-size:2.25em;
|
81
|
-
letter-spacing:-1px;
|
82
|
-
margin-bottom:0;
|
83
|
-
}
|
84
|
-
h2 {
|
85
|
-
font-size:1.5em;
|
86
|
-
letter-spacing:-1px;
|
87
|
-
margin:1.25em 0 -0.32em 0;
|
88
|
-
}
|
89
|
-
h3 {
|
90
|
-
color:#211d1f;
|
91
|
-
font-size:1.02em;
|
92
|
-
font-weight:bold;
|
93
|
-
margin:1.8em 0 -0.25em 0;
|
94
|
-
letter-spacing:-1px;
|
95
|
-
}
|
96
|
-
h3 a {
|
97
|
-
color:#000;
|
98
|
-
text-decoration:underline;
|
99
|
-
}
|
100
|
-
|
101
|
-
/* LINKS */
|
102
|
-
a {
|
103
|
-
color:#000;
|
104
|
-
text-decoration:underline;
|
105
|
-
}
|
106
|
-
a:hover {
|
107
|
-
color:#910;
|
108
|
-
text-decoration:underline;
|
109
|
-
}
|
110
|
-
a img {
|
111
|
-
border:none;
|
112
|
-
}
|
113
|
-
a.out {
|
114
|
-
background: url('/images/link-out.gif') center right no-repeat;
|
115
|
-
padding-right: 12px;
|
116
|
-
}
|
117
|
-
|
118
|
-
|
119
|
-
/* CODE */
|
120
|
-
|
121
|
-
code, pre, textarea, tt {
|
122
|
-
font-family:"lucida console", "monaco", "andale mono", "bitstream vera sans mono",
|
123
|
-
"consolas", monospace;
|
124
|
-
}
|
125
|
-
pre {
|
126
|
-
font-size:0.85em;
|
127
|
-
background:#f4f5f5;
|
128
|
-
border:2px solid #d5d0d2;
|
129
|
-
padding:0.5em;
|
130
|
-
line-height:1.15;
|
131
|
-
color:#222;
|
132
|
-
}
|
133
|
-
code, tt {
|
134
|
-
font-size:0.85em;
|
135
|
-
color:#444;
|
136
|
-
}
|
137
|
-
h1 code, h2 code, h3 code, h4 code {
|
138
|
-
color:#333;
|
139
|
-
}
|
140
|
-
pre code {
|
141
|
-
font-size:1em;
|
142
|
-
color:#222;
|
143
|
-
}
|
144
|
-
|
145
|
-
/* MISC */
|
146
|
-
|
147
|
-
hr {
|
148
|
-
margin:3em 0;
|
149
|
-
padding:0;
|
150
|
-
color:#eee;
|
151
|
-
}
|
152
|
-
|
153
|
-
/* HOME */
|
154
|
-
|
155
|
-
#home #content {
|
156
|
-
font-size:1.05em;
|
157
|
-
margin:20px 0 0 0;
|
158
|
-
padding:0 20px;
|
159
|
-
border-width:0;
|
160
|
-
}
|
161
|
-
#home #head, #home #foot {
|
162
|
-
display:none;
|
163
|
-
}
|
164
|
-
form {
|
165
|
-
text-align: center;
|
166
|
-
}
|
167
|
-
|
168
|
-
form .text-input input {
|
169
|
-
font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", Helvetica, Arial, sans-serif;
|
170
|
-
margin: 10px 0 5px 10px;
|
171
|
-
color: #686868;
|
172
|
-
font-size: 40px;
|
173
|
-
text-align: left;
|
174
|
-
text-transform: lowercase;
|
175
|
-
}
|
176
|
-
|
177
|
-
form .submit-input input {
|
178
|
-
position: relative;
|
179
|
-
margin: 0 7% 0 0;
|
180
|
-
float: right;
|
181
|
-
}
|
182
|
-
|
183
|
-
form .options-input {
|
184
|
-
position: relative;
|
185
|
-
margin: 0 7% 0 0;
|
186
|
-
text-align: left;
|
187
|
-
}
|
188
|
-
|