forecast_io 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,9 @@
1
1
  # CHANGELOG
2
2
 
3
+ ## 1.1.0
4
+
5
+ * 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
+
3
7
  ## 1.0.0
4
8
 
5
9
  * Initial release
data/README.md CHANGED
@@ -38,39 +38,64 @@ You can then make requests to the `Forecast::IO.forecast(latitude, longitide, op
38
38
 
39
39
  Valid options in the `options` hash are:
40
40
 
41
- * `:time` - UNIX time in seconds since the Unix epoch.
41
+ * `:time` - Unix time in seconds.
42
42
  * `:params` - Query parameters that can contain the following:
43
43
  * `:jsonp` - JSONP callback.
44
- * `:si` - Return the API response in SI units, rather than the default Imperial units.
44
+ * `:units` - Return the API response in SI units, rather than the default Imperial units.
45
+ * `:exclude` - "Exclude some number of data blocks from the API response. This is useful for reducing latency and saving cache space. [blocks] should be a comma-delimeted list (without spaces) of any of the following: currently, minutely, hourly, daily, alerts, flags." (via [v2 docs](https://developer.forecast.io/docs/v2#changelog))
45
46
 
46
47
  Get the current forecast:
47
48
 
48
49
  ```ruby
49
- forecast = Forecast::IO.forecast('37.8267','-122.423')
50
+ forecast = Forecast::IO.forecast(37.8267, -122.423)
50
51
  ```
51
52
 
52
53
  Get the current forecast at a given time:
53
54
 
54
55
  ```ruby
55
- forecast = Forecast::IO.forecast('37.8267','-122.423', time: Time.new(2013, 3, 11).to_i)
56
+ forecast = Forecast::IO.forecast(37.8267, -122.423, time: Time.new(2013, 3, 11).to_i)
56
57
  ```
57
58
 
58
59
  Get the current forecast and use SI units:
59
60
 
60
61
  ```ruby
61
- forecast = Forecast::IO.forecast('37.8267','-122.423', params: {si: true})
62
+ forecast = Forecast::IO.forecast(37.8267, -122.423, params: { units: 'si' })
62
63
  ```
63
64
 
64
65
  The `forecast(...)` method will return a response that you can interact with in a more-friendly way, such as:
65
66
 
66
67
  ```ruby
67
- forecast = Forecast::IO.forecast('37.8267','-122.423')
68
+ forecast = Forecast::IO.forecast(37.8267, -122.423)
68
69
  forecast.latitude
69
70
  forecast.longitude
70
71
  ```
71
72
 
72
73
  Please refer to the [forecast.io](https://developer.darkskyapp.com/docs/v2) API documentation for more information on the full response properties.
73
74
 
75
+ The HTTP requests are made with [Faraday](https://github.com/lostisland/faraday), which uses `Net::HTTP` by default. Changing the adapter is easy. We will use typhoeus as an example.
76
+
77
+ Make sure to include the typhoeus gem in your `Gemfile`:
78
+
79
+ ```ruby
80
+ gem 'typhoeus'
81
+ ```
82
+
83
+ ```ruby
84
+ require 'typhoeus/adapters/faraday'
85
+
86
+ Faraday.default_adapter = :typhoeus
87
+ ```
88
+
89
+ Alternatively:
90
+
91
+ ```ruby
92
+ require 'typhoeus/adapters/faraday'
93
+
94
+ Forecast::IO.connection = Faraday.new do |builder|
95
+ builder.adapter :typhoeus
96
+ end
97
+ ```
98
+
74
99
  ## Contributing to forecast_io
75
100
 
76
101
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
@@ -19,11 +19,12 @@ Gem::Specification.new do |s|
19
19
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
20
  s.require_paths = ["lib"]
21
21
 
22
- s.add_dependency('typhoeus')
22
+ s.add_dependency('faraday')
23
23
  s.add_dependency('multi_json')
24
24
  s.add_dependency('hashie')
25
25
 
26
26
  s.add_development_dependency('rake')
27
27
  s.add_development_dependency('rspec')
28
28
  s.add_development_dependency('vcr')
29
+ s.add_development_dependency('typhoeus')
29
30
  end
@@ -3,7 +3,7 @@ require 'forecast_io/version'
3
3
 
4
4
  require 'hashie'
5
5
  require 'multi_json'
6
- require 'typhoeus'
6
+ require 'faraday'
7
7
 
8
8
  module Forecast
9
9
  module IO
@@ -20,15 +20,27 @@ module Forecast
20
20
  forecast_url += ",#{options[:time]}" if options[:time]
21
21
 
22
22
  forecast_response = if options[:params]
23
- Typhoeus::Request.get(forecast_url, params: options[:params])
23
+ connection.get(forecast_url, options[:params])
24
24
  else
25
- Typhoeus::Request.get(forecast_url)
25
+ connection.get(forecast_url)
26
26
  end
27
27
 
28
28
  if forecast_response.success?
29
29
  return Hashie::Mash.new(MultiJson.load(forecast_response.body))
30
30
  end
31
31
  end
32
+
33
+ # Build or get an HTTP connection object.
34
+ def connection
35
+ @connection ||= Faraday.new
36
+ end
37
+
38
+ # Set an HTTP connection object.
39
+ #
40
+ # @param connection Connection object to be used.
41
+ def connection=(connection)
42
+ @connection = connection
43
+ end
32
44
  end
33
45
  end
34
46
  end
@@ -1,6 +1,6 @@
1
1
  module Forecast
2
2
  module IO
3
3
  # Current Forecast::IO version
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
6
6
  end
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.forecast.io/forecast/this-is-an-api-key/37.8267,-122.423?si=true
5
+ uri: https://api.forecast.io/forecast/this-is-an-api-key/37.8267,-122.423?units=si
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -17,7 +17,7 @@ describe Forecast::IO do
17
17
  it 'should return a forecast for a given latitude, longitude and time' do
18
18
  VCR.use_cassette('forecast_for_latitude_longitide_and_time') do
19
19
  Forecast::IO.api_key = 'this-is-an-api-key'
20
- forecast = Forecast::IO.forecast('37.8267','-122.423', time: Time.new(2013, 3, 11).to_i)
20
+ forecast = Forecast::IO.forecast('37.8267','-122.423', time: Time.utc(2013, 3, 11, 4).to_i)
21
21
  forecast.should_not be_nil
22
22
  forecast.latitude.should == 37.8267
23
23
  forecast.longitude.should == -122.423
@@ -29,7 +29,7 @@ describe Forecast::IO do
29
29
  it 'should return a forecast for a given latitude, longitude and query params' do
30
30
  VCR.use_cassette('forecast_for_latitude_longitide_and_query_params') do
31
31
  Forecast::IO.api_key = 'this-is-an-api-key'
32
- forecast = Forecast::IO.forecast('37.8267','-122.423', params: {si: true})
32
+ forecast = Forecast::IO.forecast('37.8267','-122.423', params: {units: 'si'})
33
33
  forecast.should_not be_nil
34
34
  forecast.latitude.should == 37.8267
35
35
  forecast.longitude.should == -122.423
@@ -38,4 +38,4 @@ describe Forecast::IO do
38
38
  end
39
39
  end
40
40
  end
41
- end
41
+ 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.0.0'
5
+ Forecast::IO::VERSION.should == '1.1.0'
6
6
  end
7
7
  end
@@ -4,6 +4,7 @@ require 'forecast_io'
4
4
  Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
5
5
 
6
6
  require 'vcr'
7
+ require 'typhoeus/adapters/faraday'
7
8
 
8
9
  VCR.configure do |c|
9
10
  c.cassette_library_dir = 'spec/cassettes'
@@ -11,6 +12,8 @@ VCR.configure do |c|
11
12
  c.allow_http_connections_when_no_cassette = false
12
13
  end
13
14
 
15
+ Faraday.default_adapter = :typhoeus
16
+
14
17
  RSpec.configure do |config|
15
18
  config.before(:each) do
16
19
  Forecast::IO.api_key = nil
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.0.0
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,10 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-03-27 00:00:00.000000000 Z
12
+ date: 2013-04-04 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: typhoeus
15
+ name: faraday
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
@@ -107,6 +107,22 @@ dependencies:
107
107
  - - ! '>='
108
108
  - !ruby/object:Gem::Version
109
109
  version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: typhoeus
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ! '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
110
126
  description: forecast.io API wrapper in Ruby
111
127
  email:
112
128
  - me@davidczarnecki.com
@@ -148,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
164
  version: '0'
149
165
  segments:
150
166
  - 0
151
- hash: 4509173212901527585
167
+ hash: -176553111951158824
152
168
  required_rubygems_version: !ruby/object:Gem::Requirement
153
169
  none: false
154
170
  requirements:
@@ -157,7 +173,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
173
  version: '0'
158
174
  segments:
159
175
  - 0
160
- hash: 4509173212901527585
176
+ hash: -176553111951158824
161
177
  requirements: []
162
178
  rubyforge_project: forecast_io
163
179
  rubygems_version: 1.8.25