forecast_io 1.1.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.md CHANGED
@@ -1,9 +1,13 @@
1
1
  # CHANGELOG
2
2
 
3
- ## 1.1.0
3
+ ## 1.2.0 (2013-07-03)
4
+
5
+ * You can now customize the default parameters sent on each call. Thanks [@pat](https://github.com/pat).
6
+
7
+ ## 1.1.0 (2013-04-04)
4
8
 
5
9
  * Gem now uses [Faraday](https://github.com/lostisland/faraday) to allow for swapping of the underlying HTTP library. Thanks [@norbert](https://github.com/norbert).
6
10
 
7
- ## 1.0.0
11
+ ## 1.0.0 (2013-03-27)
8
12
 
9
13
  * Initial release
data/README.md CHANGED
@@ -34,7 +34,7 @@ Alternatively:
34
34
  Forecast::IO.api_key = 'this-is-your-api-key'
35
35
  ```
36
36
 
37
- You can then make requests to the `Forecast::IO.forecast(latitude, longitide, options = {})` method.
37
+ You can then make requests to the `Forecast::IO.forecast(latitude, longitude, options = {})` method.
38
38
 
39
39
  Valid options in the `options` hash are:
40
40
 
@@ -96,6 +96,18 @@ Forecast::IO.connection = Faraday.new do |builder|
96
96
  end
97
97
  ```
98
98
 
99
+ You can also customise the default parameters passed through on each API call:
100
+
101
+ ```ruby
102
+ Forecast::IO.default_params = {units: 'si'}
103
+
104
+ # or
105
+
106
+ Forecast::IO.configure do |configuration|
107
+ configuration.default_params = {units: 'si'}
108
+ end
109
+ ```
110
+
99
111
  ## Contributing to forecast_io
100
112
 
101
113
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
data/lib/forecast_io.rb CHANGED
@@ -9,6 +9,8 @@ module Forecast
9
9
  module IO
10
10
  extend Configuration
11
11
 
12
+ self.default_params = {}
13
+
12
14
  class << self
13
15
  # Retrieve the forecast for a given latitude and longitude.
14
16
  #
@@ -19,11 +21,7 @@ module Forecast
19
21
  forecast_url = "#{Forecast::IO.api_endpoint}/forecast/#{Forecast::IO.api_key}/#{latitude},#{longitude}"
20
22
  forecast_url += ",#{options[:time]}" if options[:time]
21
23
 
22
- forecast_response = if options[:params]
23
- connection.get(forecast_url, options[:params])
24
- else
25
- connection.get(forecast_url)
26
- end
24
+ forecast_response = get(forecast_url, options[:params])
27
25
 
28
26
  if forecast_response.success?
29
27
  return Hashie::Mash.new(MultiJson.load(forecast_response.body))
@@ -41,6 +39,14 @@ module Forecast
41
39
  def connection=(connection)
42
40
  @connection = connection
43
41
  end
42
+
43
+ private
44
+
45
+ def get(path, params = {})
46
+ params = Forecast::IO.default_params.merge(params || {})
47
+
48
+ connection.get(path, params)
49
+ end
44
50
  end
45
51
  end
46
52
  end
@@ -10,6 +10,9 @@ module Forecast
10
10
  # API key
11
11
  attr_writer :api_key
12
12
 
13
+ # Default parameters
14
+ attr_accessor :default_params
15
+
13
16
  # Yield self to be able to configure Forecast::IO with block-style configuration.
14
17
  #
15
18
  # Example:
@@ -32,4 +35,4 @@ module Forecast
32
35
  end
33
36
  end
34
37
  end
35
- end
38
+ end
@@ -1,6 +1,6 @@
1
1
  module Forecast
2
2
  module IO
3
3
  # Current Forecast::IO version
4
- VERSION = '1.1.0'
4
+ VERSION = '1.2.0'
5
5
  end
6
6
  end
@@ -1,9 +1,15 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Forecast::IO do
4
+ describe '.default_params' do
5
+ it "defaults to an empty hash" do
6
+ Forecast::IO.default_params.should == {}
7
+ end
8
+ end
9
+
4
10
  describe '.forecast' do
5
11
  it 'should return a forecast for a given latitude, longitude' do
6
- VCR.use_cassette('forecast_for_latitude_longitide', record: :once) do
12
+ VCR.use_cassette('forecast_for_latitude_longitude', record: :once) do
7
13
  Forecast::IO.api_key = 'this-is-an-api-key'
8
14
  forecast = Forecast::IO.forecast('37.8267','-122.423')
9
15
  forecast.should_not be_nil
@@ -15,7 +21,7 @@ describe Forecast::IO do
15
21
  end
16
22
 
17
23
  it 'should return a forecast for a given latitude, longitude and time' do
18
- VCR.use_cassette('forecast_for_latitude_longitide_and_time') do
24
+ VCR.use_cassette('forecast_for_latitude_longitude_and_time') do
19
25
  Forecast::IO.api_key = 'this-is-an-api-key'
20
26
  forecast = Forecast::IO.forecast('37.8267','-122.423', time: Time.utc(2013, 3, 11, 4).to_i)
21
27
  forecast.should_not be_nil
@@ -27,7 +33,7 @@ describe Forecast::IO do
27
33
  end
28
34
 
29
35
  it 'should return a forecast for a given latitude, longitude and query params' do
30
- VCR.use_cassette('forecast_for_latitude_longitide_and_query_params') do
36
+ VCR.use_cassette('forecast_for_latitude_longitude_and_query_params') do
31
37
  Forecast::IO.api_key = 'this-is-an-api-key'
32
38
  forecast = Forecast::IO.forecast('37.8267','-122.423', params: {units: 'si'})
33
39
  forecast.should_not be_nil
@@ -37,5 +43,70 @@ describe Forecast::IO do
37
43
  forecast.alerts.should be_nil
38
44
  end
39
45
  end
46
+
47
+ context 'unit tests' do
48
+ let(:faraday) { double 'Faraday', get: response }
49
+ let(:response) { double 'Response', success?: true, body: '{}' }
50
+
51
+ before :each do
52
+ stub_const 'Faraday', stub(new: faraday)
53
+
54
+ Forecast::IO.stub api_key: 'abc123', connection: faraday
55
+ end
56
+
57
+ context 'without default parameters' do
58
+ before :each do
59
+ Forecast::IO.stub default_params: {}
60
+ end
61
+
62
+ it "sends through a standard request" do
63
+ faraday.should_receive(:get).with(
64
+ 'https://api.forecast.io/forecast/abc123/1.2,3.4', {}
65
+ ).and_return response
66
+
67
+ Forecast::IO.forecast 1.2, 3.4
68
+ end
69
+
70
+ it "sends through provided parameters" do
71
+ faraday.should_receive(:get).with(
72
+ 'https://api.forecast.io/forecast/abc123/1.2,3.4', {units: 'si'}
73
+ ).and_return response
74
+
75
+ Forecast::IO.forecast 1.2, 3.4, params: {units: 'si'}
76
+ end
77
+ end
78
+
79
+ context 'with default parameters' do
80
+ before :each do
81
+ Forecast::IO.stub default_params: {units: 'si'}
82
+ end
83
+
84
+ it "sends through the default parameters" do
85
+ faraday.should_receive(:get).with(
86
+ 'https://api.forecast.io/forecast/abc123/1.2,3.4', {units: 'si'}
87
+ ).and_return response
88
+
89
+ Forecast::IO.forecast 1.2, 3.4
90
+ end
91
+
92
+ it "sends through the merged parameters" do
93
+ faraday.should_receive(:get).with(
94
+ 'https://api.forecast.io/forecast/abc123/1.2,3.4',
95
+ {units: 'si', exclude: 'daily'}
96
+ ).and_return response
97
+
98
+ Forecast::IO.forecast 1.2, 3.4, params: {exclude: 'daily'}
99
+ end
100
+
101
+ it "overwrites default parameters when appropriate" do
102
+ faraday.should_receive(:get).with(
103
+ 'https://api.forecast.io/forecast/abc123/1.2,3.4',
104
+ {units: 'imperial'}
105
+ ).and_return response
106
+
107
+ Forecast::IO.forecast 1.2, 3.4, params: {units: 'imperial'}
108
+ end
109
+ end
110
+ end
40
111
  end
41
112
  end
@@ -2,6 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  describe 'Forecast::IO::VERSION' do
4
4
  it 'should be the correct version' do
5
- Forecast::IO::VERSION.should == '1.1.0'
5
+ Forecast::IO::VERSION.should == '1.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forecast_io
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-04-04 00:00:00.000000000 Z
12
+ date: 2013-07-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: faraday
@@ -143,9 +143,9 @@ files:
143
143
  - lib/forecast_io/configuration.rb
144
144
  - lib/forecast_io/version.rb
145
145
  - spec/cassettes/.keep
146
- - spec/cassettes/forecast_for_latitude_longitide.yml
147
- - spec/cassettes/forecast_for_latitude_longitide_and_query_params.yml
148
- - spec/cassettes/forecast_for_latitude_longitide_and_time.yml
146
+ - spec/cassettes/forecast_for_latitude_longitude.yml
147
+ - spec/cassettes/forecast_for_latitude_longitude_and_query_params.yml
148
+ - spec/cassettes/forecast_for_latitude_longitude_and_time.yml
149
149
  - spec/forecast_io/configuration_spec.rb
150
150
  - spec/forecast_io/forecast_io_spec.rb
151
151
  - spec/forecast_io/version_spec.rb
@@ -164,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
164
164
  version: '0'
165
165
  segments:
166
166
  - 0
167
- hash: -176553111951158824
167
+ hash: 2422846416094696437
168
168
  required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  none: false
170
170
  requirements:
@@ -173,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
173
  version: '0'
174
174
  segments:
175
175
  - 0
176
- hash: -176553111951158824
176
+ hash: 2422846416094696437
177
177
  requirements: []
178
178
  rubyforge_project: forecast_io
179
179
  rubygems_version: 1.8.25
@@ -182,9 +182,9 @@ specification_version: 3
182
182
  summary: forecast.io API wrapper in Ruby
183
183
  test_files:
184
184
  - spec/cassettes/.keep
185
- - spec/cassettes/forecast_for_latitude_longitide.yml
186
- - spec/cassettes/forecast_for_latitude_longitide_and_query_params.yml
187
- - spec/cassettes/forecast_for_latitude_longitide_and_time.yml
185
+ - spec/cassettes/forecast_for_latitude_longitude.yml
186
+ - spec/cassettes/forecast_for_latitude_longitude_and_query_params.yml
187
+ - spec/cassettes/forecast_for_latitude_longitude_and_time.yml
188
188
  - spec/forecast_io/configuration_spec.rb
189
189
  - spec/forecast_io/forecast_io_spec.rb
190
190
  - spec/forecast_io/version_spec.rb