open-weather 0.9.2 → 0.10.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +3 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +10 -8
- data/README.md +45 -19
- data/lib/open_weather/base.rb +1 -1
- data/lib/open_weather/version.rb +1 -1
- data/open_weather.gemspec +2 -0
- data/spec/fixtures/cassettes/api/current_city_id_invalid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_city_id_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_city_imperial_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_city_invalid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_city_metric_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_city_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_geocode_invalid.yml +47 -0
- data/spec/fixtures/cassettes/api/current_geocode_valid.yml +57 -0
- data/spec/fixtures/cassettes/api/forecast_city_id_invalid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_city_id_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_city_imperial_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_city_metric_invalid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_city_metric_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_city_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_geocode_invalid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_geocode_valid.yml +47 -0
- data/spec/fixtures/cassettes/api/forecast_invalid.yml +47 -0
- data/spec/fixtures/cassettes/integration/current_by_city.yml +47 -0
- data/spec/fixtures/cassettes/integration/current_by_city_id.yml +47 -0
- data/spec/fixtures/cassettes/integration/current_by_geocode.yml +47 -0
- data/spec/fixtures/cassettes/integration/current_not_found_city.yml +47 -0
- data/spec/integration/current_spec.rb +55 -0
- data/spec/open_weather/api_spec.rb +49 -50
- data/spec/open_weather/version_spec.rb +2 -4
- data/spec/spec_helper.rb +11 -1
- metadata +79 -2
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.openweathermap.org/data/2.5/weather?APPID=1111111111&q=,Berlin,%20DE&units=metric
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- api.openweathermap.org
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Thu, 28 Aug 2014 10:32:37 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
X-Source:
|
34
|
+
- back
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- "*"
|
37
|
+
Access-Control-Allow-Credentials:
|
38
|
+
- 'true'
|
39
|
+
Access-Control-Allow-Methods:
|
40
|
+
- GET, POST
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: |
|
44
|
+
{"coord":{"lon":13.38,"lat":52.52},"sys":{"type":1,"id":4892,"message":0.0219,"country":"Germany","sunrise":1409199092,"sunset":1409249019},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"cmc stations","main":{"temp":296.02,"pressure":1018,"humidity":35,"temp_min":294.15,"temp_max":299.26},"wind":{"speed":2.6,"deg":280,"var_beg":260,"var_end":320},"clouds":{"all":40},"dt":1409221912,"id":2822234,"name":"Berlin","cod":200}
|
45
|
+
http_version:
|
46
|
+
recorded_at: Thu, 28 Aug 2014 10:32:37 GMT
|
47
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.openweathermap.org/data/2.5/weather?APPID=1111111111&id=524901&units=metric
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- api.openweathermap.org
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Thu, 28 Aug 2014 10:35:16 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
X-Source:
|
34
|
+
- redis
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- "*"
|
37
|
+
Access-Control-Allow-Credentials:
|
38
|
+
- 'true'
|
39
|
+
Access-Control-Allow-Methods:
|
40
|
+
- GET, POST
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: |
|
44
|
+
{"coord":{"lon":37.62,"lat":55.75},"sys":{"type":1,"id":7323,"message":0.2126,"country":"RU","sunrise":1409192848,"sunset":1409243632},"weather":[{"id":803,"main":"Clouds","description":"broken clouds","icon":"04d"}],"base":"cmc stations","main":{"temp":17.99,"pressure":1004,"humidity":63,"temp_min":16,"temp_max":23.7},"wind":{"speed":6,"deg":200},"clouds":{"all":75},"dt":1409220095,"id":524901,"name":"Moscow","cod":200}
|
45
|
+
http_version:
|
46
|
+
recorded_at: Thu, 28 Aug 2014 10:35:16 GMT
|
47
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.openweathermap.org/data/2.5/weather?APPID=1111111111&lat=48.140938&lon=11.582005&units=metric
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- api.openweathermap.org
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Thu, 28 Aug 2014 10:35:16 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
X-Source:
|
34
|
+
- redis
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- "*"
|
37
|
+
Access-Control-Allow-Credentials:
|
38
|
+
- 'true'
|
39
|
+
Access-Control-Allow-Methods:
|
40
|
+
- GET, POST
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: |
|
44
|
+
{"coord":{"lon":11.58,"lat":48.14},"sys":{"type":1,"id":4887,"message":0.0204,"country":"DE","sunrise":1409199997,"sunset":1409248977},"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],"base":"cmc stations","main":{"temp":19.46,"pressure":1020,"humidity":72,"temp_min":16.11,"temp_max":23.33},"wind":{"speed":1,"deg":0},"clouds":{"all":40},"dt":1409221509,"id":2867714,"name":"Muenchen","cod":200}
|
45
|
+
http_version:
|
46
|
+
recorded_at: Thu, 28 Aug 2014 10:35:16 GMT
|
47
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: http://api.openweathermap.org/data/2.5/weather?APPID=1111111111&q=,Berlin,%20DE&units=metric
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
Host:
|
17
|
+
- api.openweathermap.org
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Server:
|
24
|
+
- nginx
|
25
|
+
Date:
|
26
|
+
- Thu, 28 Aug 2014 10:35:16 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
X-Source:
|
34
|
+
- back
|
35
|
+
Access-Control-Allow-Origin:
|
36
|
+
- "*"
|
37
|
+
Access-Control-Allow-Credentials:
|
38
|
+
- 'true'
|
39
|
+
Access-Control-Allow-Methods:
|
40
|
+
- GET, POST
|
41
|
+
body:
|
42
|
+
encoding: UTF-8
|
43
|
+
string: |
|
44
|
+
{"message":"Error: Not found city","cod":"404"}
|
45
|
+
http_version:
|
46
|
+
recorded_at: Thu, 28 Aug 2014 10:35:16 GMT
|
47
|
+
recorded_with: VCR 2.9.2
|
@@ -0,0 +1,55 @@
|
|
1
|
+
describe "Current weather information with APPID" do
|
2
|
+
let(:options) do
|
3
|
+
{ units: "metric", APPID: 1111111111 }
|
4
|
+
end
|
5
|
+
|
6
|
+
describe "searching by city" do
|
7
|
+
context "when the city is found" do
|
8
|
+
let(:weather) do
|
9
|
+
VCR.use_cassette("integration/current_by_city") do
|
10
|
+
OpenWeather::Current.city("Berlin, DE", options)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it "returns results" do
|
15
|
+
expect(weather).to include("weather")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when the city is not found" do
|
20
|
+
let(:weather) do
|
21
|
+
VCR.use_cassette("integration/current_not_found_city") do
|
22
|
+
OpenWeather::Current.city("Berlin, DE", options)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "returns an attribute with code 404" do
|
27
|
+
expect(weather["cod"]).to eq("404")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "searching by geolocation" do
|
33
|
+
let(:weather) do
|
34
|
+
VCR.use_cassette("integration/current_by_geocode") do
|
35
|
+
OpenWeather::Current.geocode(48.140938, 11.582005, options)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "returns results" do
|
40
|
+
expect(weather).to include("weather")
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "searching by city_id" do
|
45
|
+
let(:weather) do
|
46
|
+
VCR.use_cassette("integration/current_by_city_id") do
|
47
|
+
OpenWeather::Current.city_id(524901, options)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns results" do
|
52
|
+
expect(weather).to include("weather")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,79 +1,62 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
# success response
|
4
|
-
#
|
5
|
-
# {"coord"=>{"lon"=>76.26, "lat"=>9.94},
|
6
|
-
# "sys"=>
|
7
|
-
# {"message"=>0.1938,
|
8
|
-
# "country"=>"India",
|
9
|
-
# "sunrise"=>1390007802,
|
10
|
-
# "sunset"=>1390049651},
|
11
|
-
# "weather"=>
|
12
|
-
# [{"id"=>800, "main"=>"Clear", "description"=>"Sky is Clear", "icon"=>"01d"}],
|
13
|
-
# "base"=>"gdps stations",
|
14
|
-
# "main"=>
|
15
|
-
# {"temp"=>303.534,
|
16
|
-
# "temp_min"=>303.534,
|
17
|
-
# "temp_max"=>303.534,
|
18
|
-
# "pressure"=>1022.72,
|
19
|
-
# "sea_level"=>1026.59,
|
20
|
-
# "grnd_level"=>1022.72,
|
21
|
-
# "humidity"=>72},
|
22
|
-
# "wind"=>{"speed"=>1.21, "deg"=>143.5},
|
23
|
-
# "clouds"=>{"all"=>0},
|
24
|
-
# "dt"=>1390029526,
|
25
|
-
# "id"=>1273874,
|
26
|
-
# "name"=>"Kochi",
|
27
|
-
# "cod"=>200
|
28
|
-
# }
|
29
|
-
|
30
|
-
# failure response
|
31
|
-
#
|
32
|
-
# {"message"=>"Error: Not found city", "cod"=>"404"}
|
33
|
-
|
34
1
|
describe 'Open weather Current API' do
|
35
2
|
context '.city' do
|
36
3
|
it 'return current weather for cochi' do
|
37
|
-
response =
|
4
|
+
response = VCR.use_cassette("api/current_city_valid") do
|
5
|
+
OpenWeather::Current.city('Cochin, In')
|
6
|
+
end
|
38
7
|
response['cod'].should eq(200)
|
39
8
|
end
|
40
9
|
|
41
10
|
it 'returns error if the city is invalid' do
|
42
|
-
response =
|
11
|
+
response = VCR.use_cassette("api/current_city_invalid") do
|
12
|
+
OpenWeather::Current.city('Cochiiiiiin, In')
|
13
|
+
end
|
43
14
|
response['cod'].should eq("404")
|
44
15
|
end
|
45
16
|
end
|
46
17
|
|
47
18
|
context '.city_id' do
|
48
19
|
it 'return current weather for city id of cochi' do
|
49
|
-
response =
|
20
|
+
response = VCR.use_cassette("api/current_city_id_valid") do
|
21
|
+
OpenWeather::Current.city_id('1273874')
|
22
|
+
end
|
50
23
|
response['cod'].should eq(200)
|
51
24
|
end
|
52
25
|
|
53
26
|
it 'returns error if the city id is invalid' do
|
54
|
-
response =
|
27
|
+
response = VCR.use_cassette("api/current_city_id_invalid") do
|
28
|
+
OpenWeather::Current.city('invalidid')
|
29
|
+
end
|
55
30
|
response['cod'].should eq("404")
|
56
31
|
end
|
57
32
|
end
|
58
33
|
|
59
34
|
context '.geocode' do
|
60
35
|
it 'return current weather for geocode of cochi' do
|
61
|
-
response =
|
36
|
+
response = VCR.use_cassette("api/current_geocode_valid") do
|
37
|
+
OpenWeather::Current.geocode('9.94', '76.26')
|
38
|
+
end
|
62
39
|
response['cod'].should eq(200)
|
63
40
|
end
|
64
41
|
|
65
42
|
it 'returns error if the geocode is invalid' do
|
66
|
-
response =
|
43
|
+
response = VCR.use_cassette("api/current_geocode_invalid") do
|
44
|
+
OpenWeather::Current.geocode('181', '181')
|
45
|
+
end
|
67
46
|
response['cod'].should eq("404")
|
68
47
|
end
|
69
48
|
end
|
70
49
|
|
71
50
|
context 'units option' do
|
72
51
|
it 'returns the current temperature in requested units' do
|
73
|
-
response =
|
52
|
+
response = VCR.use_cassette("api/current_city_metric_valid") do
|
53
|
+
OpenWeather::Current.city('Cochin, In', units: 'metric')
|
54
|
+
end
|
74
55
|
temp_metric = response['main']['temp']
|
75
56
|
|
76
|
-
response =
|
57
|
+
response = VCR.use_cassette("api/current_city_imperial_valid") do
|
58
|
+
OpenWeather::Current.city('Cochin, In', units: 'imperial')
|
59
|
+
end
|
77
60
|
temp_imperial = response['main']['temp']
|
78
61
|
farenheit_to_celsius = ((temp_imperial - 32) / 1.8000)
|
79
62
|
|
@@ -85,50 +68,66 @@ end
|
|
85
68
|
describe 'Open weather Forecast API' do
|
86
69
|
context '.city' do
|
87
70
|
it 'return forecast weather for cochi' do
|
88
|
-
response =
|
71
|
+
response = VCR.use_cassette("api/forecast_city_valid") do
|
72
|
+
OpenWeather::Forecast.city('Cochin, In')
|
73
|
+
end
|
89
74
|
response['cod'].to_s.should eq("200")
|
90
75
|
end
|
91
76
|
|
92
77
|
it 'returns error if the city is invalid' do
|
93
|
-
response =
|
78
|
+
response = VCR.use_cassette("api/forecast_invalid") do
|
79
|
+
OpenWeather::Forecast.city('Cochiiiiiin, In')
|
80
|
+
end
|
94
81
|
response['cod'].to_s.should eq("404")
|
95
82
|
end
|
96
83
|
end
|
97
84
|
|
98
85
|
context '.city_id' do
|
99
86
|
it 'return forecast weather for city id of cochi' do
|
100
|
-
response =
|
87
|
+
response = VCR.use_cassette("api/forecast_city_id_valid") do
|
88
|
+
OpenWeather::Forecast.city_id('1273874')
|
89
|
+
end
|
101
90
|
response['cod'].to_s.should eq("200")
|
102
91
|
end
|
103
92
|
|
104
93
|
it 'returns error if the city id is invalid' do
|
105
|
-
response =
|
94
|
+
response = VCR.use_cassette("api/forecast_city_id_invalid") do
|
95
|
+
OpenWeather::Forecast.city('invalidid')
|
96
|
+
end
|
106
97
|
response['cod'].to_s.should eq("404")
|
107
98
|
end
|
108
99
|
end
|
109
100
|
|
110
101
|
context '.geocode' do
|
111
102
|
it 'return forecast weather for geocode of cochi' do
|
112
|
-
response =
|
103
|
+
response = VCR.use_cassette("api/forecast_geocode_valid") do
|
104
|
+
OpenWeather::Forecast.geocode('9.94', '76.26')
|
105
|
+
end
|
113
106
|
response['cod'].to_s.should eq("200")
|
114
107
|
end
|
115
108
|
|
116
109
|
it 'returns error if the geocode is invalid' do
|
117
|
-
response =
|
110
|
+
response = VCR.use_cassette("api/forecast_geocode_invalid") do
|
111
|
+
OpenWeather::Forecast.geocode('181', '181')
|
112
|
+
end
|
118
113
|
response['cod'].to_s.should eq("404")
|
119
114
|
end
|
120
115
|
end
|
121
116
|
|
122
117
|
context 'units option' do
|
123
118
|
it 'returns the forecast in requested units' do
|
124
|
-
response =
|
119
|
+
response = VCR.use_cassette("api/forecast_city_metric_valid") do
|
120
|
+
OpenWeather::Forecast.city('Cochin, In', units: 'metric')
|
121
|
+
end
|
125
122
|
temp_metric = response['list'].first['main']['temp']
|
126
123
|
|
127
|
-
response =
|
124
|
+
response = VCR.use_cassette("api/forecast_city_imperial_valid") do
|
125
|
+
OpenWeather::Forecast.city('Cochin, In', units: 'imperial')
|
126
|
+
end
|
128
127
|
temp_imperial = response['list'].first['main']['temp']
|
129
128
|
farenheit_to_celsius = ((temp_imperial - 32) / 1.8000)
|
130
129
|
|
131
|
-
expect(farenheit_to_celsius).to be_within(
|
130
|
+
expect(farenheit_to_celsius).to be_within(temp_metric-1).of(temp_metric+1)
|
132
131
|
end
|
133
132
|
end
|
134
133
|
end
|
data/spec/spec_helper.rb
CHANGED