concerto_weather 0.4 → 0.5
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.
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 71f297c5a33be038f4b200406aa29a80b9fb6d18
|
|
4
|
+
data.tar.gz: 153d8f18b91219bc5592e5d3e36e97bff4498ba6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 83d44d494a800265ec646e4af6f699ac910e42be7ade1ec1514dcd98f2be18898fe672307d2a9471e399d8ce106e48394b937c4b8a5a543b1cfbe248f71b65b7
|
|
7
|
+
data.tar.gz: 3db8207e0d7cd9cdf60f8f80809aedf66c6830ed88ed4fe2fb69689fc821d9487d7a9844c3c862f8b304540e5adf04d1ddf4eb919f453af969cab1dbb4600cff
|
|
@@ -24,7 +24,7 @@ function reverseGeocode(place) {
|
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
$.ajax({
|
|
27
|
-
url: "
|
|
27
|
+
url: "//nominatim.openstreetmap.org/reverse",
|
|
28
28
|
data: params,
|
|
29
29
|
dataType: "json",
|
|
30
30
|
success: function(data) {
|
|
@@ -51,13 +51,15 @@ function buildResultsTable(data) {
|
|
|
51
51
|
table = "<table id='cityResults' class='table table-condensed'> \
|
|
52
52
|
<thead><th>Name</th><th>District/County/Region</th><th>Province/State</th><th>Country</th>";
|
|
53
53
|
tableBody = "<tbody></tbody></table>";
|
|
54
|
-
tableBody += "<hr/><i>Can't find your city? Try entering your zip code <b>or</b> your city along with its state (ex: Madison, WI).</i>"
|
|
54
|
+
tableBody += "<hr/><i>You must select your city from the list above. Can't find your city? Try entering your zip code <b>or</b> your city along with its state (ex: Madison, WI).</i>"
|
|
55
55
|
// Insert our empty results table
|
|
56
56
|
$(info_el).empty().html(table + tableBody);
|
|
57
57
|
// Find the address info for each weather search result
|
|
58
58
|
// Then insert the place data into our results table
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
if (typeof places != 'undefined') {
|
|
60
|
+
for (var i = 0; i < places.length; i++) {
|
|
61
|
+
reverseGeocode(places[i]);
|
|
62
|
+
}
|
|
61
63
|
}
|
|
62
64
|
}
|
|
63
65
|
|
|
@@ -66,6 +68,10 @@ function searchForCityInfo() {
|
|
|
66
68
|
var cityQuery = $("input#weather_config_city_query").val();
|
|
67
69
|
|
|
68
70
|
if (info_el.length != 0 && cityQuery.length > 0) {
|
|
71
|
+
// clear out any prior selected city
|
|
72
|
+
$("#weather_config_lat").val("");
|
|
73
|
+
$("#weather_config_lng").val("");
|
|
74
|
+
|
|
69
75
|
// Add a 'searching' placeholder while city query results are loading
|
|
70
76
|
$(info_el).empty().html("<i class='fa fa-spinner fa-spin'></i> searching...");
|
|
71
77
|
// Query the OpenWeatherAPI to find a list of matching cities based on input
|
|
@@ -73,12 +79,12 @@ function searchForCityInfo() {
|
|
|
73
79
|
url: "/concerto_weather/city_search.js",
|
|
74
80
|
data: {"q": cityQuery},
|
|
75
81
|
dataType: "json",
|
|
76
|
-
timeout:
|
|
82
|
+
timeout: 6000,
|
|
77
83
|
success: function(data) {
|
|
78
84
|
// Build a table of results returned from city query
|
|
79
85
|
buildResultsTable(data);
|
|
80
86
|
},
|
|
81
|
-
error: function() {
|
|
87
|
+
error: function(data) {
|
|
82
88
|
$(info_el).empty().html("<p>No results found.</p>");
|
|
83
89
|
}
|
|
84
90
|
});
|
data/app/models/weather.rb
CHANGED
|
@@ -8,7 +8,7 @@ class Weather < DynamicContent
|
|
|
8
8
|
|
|
9
9
|
FONTS = {
|
|
10
10
|
'owf' => 'Open Weather Font',
|
|
11
|
-
'wi' => 'Weather Icons'
|
|
11
|
+
'wi' => 'Weather Icons'
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
FORECAST = {
|
|
@@ -16,6 +16,8 @@ class Weather < DynamicContent
|
|
|
16
16
|
'forecast' => 'Max and Min temps forecast for the day'
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
validate :validate_config
|
|
20
|
+
|
|
19
21
|
def build_content
|
|
20
22
|
require 'json'
|
|
21
23
|
require 'net/http'
|
|
@@ -41,8 +43,14 @@ class Weather < DynamicContent
|
|
|
41
43
|
response = Net::HTTP.get_response(URI.parse(url)).body
|
|
42
44
|
data = JSON.parse(response)
|
|
43
45
|
|
|
46
|
+
# if there was an error, then return nil
|
|
47
|
+
if data['cod'].present? && !data['cod'].to_s.starts_with?('2')
|
|
48
|
+
Rails.logger.error("response (#{url}) = #{response}")
|
|
49
|
+
return nil
|
|
50
|
+
end
|
|
51
|
+
|
|
44
52
|
# Build HTML using API data
|
|
45
|
-
|
|
53
|
+
|
|
46
54
|
self.config["location_name"] = data["city"]["name"]
|
|
47
55
|
|
|
48
56
|
format_city = data['city']['name']
|
|
@@ -56,7 +64,7 @@ class Weather < DynamicContent
|
|
|
56
64
|
|
|
57
65
|
format_high = "#{data['list'][0]['temp']['max'].round(0)} °#{UNITS[params[:units]][0]}"
|
|
58
66
|
format_low = "#{data['list'][0]['temp']['min'].round(0)} °#{UNITS[params[:units]][0]}"
|
|
59
|
-
|
|
67
|
+
empty_html = "
|
|
60
68
|
<h1> Today in #{format_city} </h1>
|
|
61
69
|
<div style='float: left; width: 50%'>
|
|
62
70
|
#{format_icon}
|
|
@@ -85,6 +93,12 @@ class Weather < DynamicContent
|
|
|
85
93
|
response = Net::HTTP.get_response(URI.parse(url)).body
|
|
86
94
|
data = JSON.parse(response)
|
|
87
95
|
|
|
96
|
+
# if there was an error, then return nil
|
|
97
|
+
if data['cod'].present? && !data['cod'].to_s.starts_with?('2')
|
|
98
|
+
Rails.logger.error("response (#{url}) = #{response}")
|
|
99
|
+
return nil
|
|
100
|
+
end
|
|
101
|
+
|
|
88
102
|
# Build HTML using API data
|
|
89
103
|
|
|
90
104
|
self.config["location_name"] = data["name"]
|
|
@@ -101,7 +115,7 @@ class Weather < DynamicContent
|
|
|
101
115
|
format_high = "#{data['main']['temp_max'].round(0)} °#{UNITS[params[:units]][0]}"
|
|
102
116
|
format_low = "#{data['main']['temp_min'].round(0)} °#{UNITS[params[:units]][0]}"
|
|
103
117
|
format_current = "#{data['main']['temp'].round(0)} °#{UNITS[params[:units]][0]}"
|
|
104
|
-
|
|
118
|
+
empty_html = "
|
|
105
119
|
<h1> Today in #{format_city} </h1>
|
|
106
120
|
<div style='float: left; width: 50%'>
|
|
107
121
|
#{format_icon}
|
|
@@ -111,15 +125,13 @@ class Weather < DynamicContent
|
|
|
111
125
|
<h1> #{format_current} </h1>
|
|
112
126
|
</div>
|
|
113
127
|
"
|
|
114
|
-
|
|
115
128
|
end
|
|
116
129
|
|
|
117
|
-
|
|
118
130
|
format_string = self.config['format_string']
|
|
119
131
|
|
|
120
|
-
if format_string.blank?
|
|
132
|
+
if format_string.blank?
|
|
121
133
|
rawhtml = empty_html
|
|
122
|
-
else
|
|
134
|
+
else
|
|
123
135
|
rawhtml = eval("\"" + format_string + "\"")
|
|
124
136
|
end
|
|
125
137
|
|
|
@@ -135,4 +147,10 @@ class Weather < DynamicContent
|
|
|
135
147
|
attributes = super()
|
|
136
148
|
attributes.concat([:config => [:lat, :lng, :units, :font_name, :location_name, :format_string, :forecast_type]])
|
|
137
149
|
end
|
|
150
|
+
|
|
151
|
+
def validate_config
|
|
152
|
+
if self.config['lat'].blank? || self.config['lng'].blank?
|
|
153
|
+
errors.add(:base, 'A city must be selected')
|
|
154
|
+
end
|
|
155
|
+
end
|
|
138
156
|
end
|
|
@@ -4,6 +4,11 @@
|
|
|
4
4
|
<fieldset>
|
|
5
5
|
<legend><span>Weather</span></legend>
|
|
6
6
|
<div class="row-fluid">
|
|
7
|
+
<% if ConcertoConfig["open_weather_map_api_key"].blank? %>
|
|
8
|
+
<div class='alert alert-warning'>
|
|
9
|
+
The OpenWeatherMap API Key under Settings appears to be blank. An API key is required for this content.
|
|
10
|
+
</div>
|
|
11
|
+
<% end %>
|
|
7
12
|
<div class='span4'>
|
|
8
13
|
<%= form.fields_for :config do |config| %>
|
|
9
14
|
<div class="clearfix">
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: concerto_weather
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: '0.
|
|
4
|
+
version: '0.5'
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Brian Michalski
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-02-17 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -51,6 +51,7 @@ files:
|
|
|
51
51
|
- app/assets/stylesheets/concerto_weather/owfont-regular.css.scss
|
|
52
52
|
- app/assets/stylesheets/concerto_weather/weather-icons-wind.min.css.scss
|
|
53
53
|
- app/assets/stylesheets/concerto_weather/weather-icons.min.css.scss
|
|
54
|
+
- app/assets/stylesheets/concerto_weather/weather.scss
|
|
54
55
|
- app/controllers/concerto_weather/application_controller.rb
|
|
55
56
|
- app/controllers/concerto_weather/search_controller.rb
|
|
56
57
|
- app/helpers/concerto_weather/application_helper.rb
|