forecast_io 1.1.0 → 1.2.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/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