bea_api 0.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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NTRiZTE3YTM1NzY0MjJlN2RkZGE4ZjE4Y2ZkMGNlNmY2OWI3NzI0Yw==
5
+ data.tar.gz: !binary |-
6
+ MWFhMDUwODVhY2ZmOTU1NzZmNjI3ZWQzZDc5ZGNkNTVjYjBmZTI3NA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZmUzODAyYWMxMjkzOTA4ODNhODE2YWQ3MTY1YTQ0ZmI3MjVkOTU3NTA2Zjdh
10
+ OTcwMDM0MWY1OTZjZjE1OTk3NTIzMGVjZmNhYmY4ZDQxMjQ5NjIyZDU2MzEw
11
+ NTI0Y2JkZjIwMWExMzVkMGJlNTAwNmNlZWEyYmI2ZTExYzcxYzM=
12
+ data.tar.gz: !binary |-
13
+ NmQ5ODcwZWEyZmE4Y2RlN2RkNjlkM2M4ZTE3NjliOTQ1M2E2ZTFlZTBkNzkz
14
+ M2QxMzJmNzljN2Q2NGIwZmM5MjZkNjY3NTYzODhiZDg4ODRjZDE5MzNmNDEy
15
+ OWYxMGI4NTZhNWEyMTZiMzJmOTE4YmVhYjk4ZDA5MjAzZmNjYWY=
data/.gitignore ADDED
@@ -0,0 +1,35 @@
1
+ *.rbc
2
+ capybara-*.html
3
+ .rspec
4
+ log
5
+ tmp
6
+ db/*.sqlite3
7
+ public/system
8
+ coverage/
9
+ spec/tmp
10
+ spec/vcr_cassettes
11
+ spec/vcr_cassettes/*
12
+ spec/api_key.rb
13
+
14
+ **.orig
15
+ rerun.txt
16
+ pickle-email-*.html
17
+
18
+ # TODO Comment out these rules if you are OK with secrets being uploaded to the repo
19
+ config/initializers/secret_token.rb
20
+ config/secrets.yml
21
+
22
+ ## Environment normalisation:
23
+ .bundle
24
+ vendor/bundle
25
+
26
+ # these should all be checked in to normalise the environment:
27
+ # Gemfile.lock, .ruby-version, .ruby-gemset
28
+
29
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
30
+ .rvmrc
31
+
32
+ # if using bower-rails ignore default bower_components path bower.json files
33
+ vendor/assets/bower_components
34
+ *.bowerrc
35
+ bower.json
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bea_api.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Chad Hoersten
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,4 @@
1
+ bea_api
2
+ =======
3
+
4
+ Ruby wrapper for the US Bureau of Economic Analysis (BEA) API
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/bea_api.gemspec ADDED
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bea_api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "bea_api"
8
+ spec.version = BeaApi::VERSION
9
+ spec.authors = ["Chad Hoersten"]
10
+ spec.summary = %q{Ruby wrapper for the US Bureau of Economic Analysis (BEA) API}
11
+ spec.description = %q{Ruby wrapper for the US Bureau of Economic Analysis (BEA) API at http://www.bea.gov/api/. This API is used to pull United States economic data by geography.}
12
+ spec.homepage = "https://github.com/hoersten/bea_api"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_runtime_dependency 'rest-client'
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+ spec.add_development_dependency 'rspec'
24
+ spec.add_development_dependency 'rspec-rails'
25
+ spec.add_development_dependency 'vcr'
26
+ spec.add_development_dependency 'webmock'
27
+ spec.add_development_dependency 'codeclimate-test-reporter'
28
+ end
data/circle.yml ADDED
@@ -0,0 +1,20 @@
1
+ ## Customize the test machine
2
+ machine:
3
+
4
+ timezone:
5
+ America/Chicago # Set the timezone
6
+
7
+ # Version of ruby to use
8
+ ruby:
9
+ version:
10
+ 1.9.3-p0-falcon
11
+
12
+ ## Customize checkout
13
+ checkout:
14
+ post:
15
+ - cp spec/api_key.rb.ci spec/api_key.rb
16
+
17
+ ## Customize dependencies
18
+ dependencies:
19
+ pre:
20
+ - gem install bundler --pre
data/lib/bea_api.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "bea_api/version"
2
+ require "bea_api/client"
3
+ require "bea_api/request"
@@ -0,0 +1,56 @@
1
+ module BeaApi
2
+ # => BeaApi::Client
3
+ # client#initialize method takes an api_key
4
+ class Client
5
+ attr_reader :api_key
6
+ attr_reader :datasets
7
+
8
+ def datasets
9
+ [ :RegionalData, :NIPA, :NIUnderlyingDetail, :MNE, :FixedAssets, :ITA, :IIP, :GDPbyIndustry ]
10
+ end
11
+
12
+ def initialize(api_key)
13
+ fail ArgumentError, 'You must set an api_key.' unless api_key
14
+ _validate_api_key(api_key)
15
+ end
16
+
17
+ def get_datasets()
18
+ _method(nil, 'GetDataSetList', {})
19
+ end
20
+
21
+ def get_parameters(dataset)
22
+ fail ArgumentError, 'Invalid dataset.' unless datasets.include?(dataset)
23
+ _method(dataset, 'GetParameterList', {})
24
+ end
25
+
26
+ def get_parameter_values(dataset, parameter)
27
+ fail ArgumentError, 'Invalid dataset.' unless datasets.include?(dataset)
28
+ fail ArgumentError, 'Invalid parameter name.' unless parameter
29
+ _method(dataset, 'GetParameterValues', {parametername: parameter})
30
+ end
31
+
32
+ def get_data(dataset, fields)
33
+ fail ArgumentError, 'Invalid dataset.' unless datasets.include?(dataset)
34
+ fail ArgumentError, 'Invalid fields.' unless fields.class == Hash && !fields.empty?
35
+ _method(dataset, 'GetData', fields)
36
+ end
37
+
38
+ protected
39
+ def _validate_api_key(api_key)
40
+ @api_key = api_key
41
+ response = get_datasets()
42
+ if response.error_code == Request::InvalidKey
43
+ @api_key = nil
44
+ fail "'#{api_key}' is not a valid API key. Check your key for errors,
45
+ or request a new one at http://www.bea.gov/api/"
46
+ end
47
+ end
48
+
49
+ def _method(dataset, method, options)
50
+ fail ArgumentError, 'You must include a dataset.' unless dataset || method.downcase == 'getdatasetlist'
51
+ options.merge!(userid: @api_key, datasetname: dataset, method: method.downcase)
52
+ Request.find(options)
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,111 @@
1
+ module BeaApi
2
+ # => BeaApi::Request
3
+ class Request
4
+ require 'restclient'
5
+ require 'json'
6
+
7
+ attr_accessor :response, :error_code, :error_msg, :notes
8
+ Success = 0 # Sucess, no errors
9
+ InvalidKey = 3 # APIErrorCode 3: The BEA API UserID provided in the request does not exist.
10
+ MissingParams = 40 # APIErrorCode 40: The dataset requested requires parameters that were missing from the request
11
+ RetrivalError = 201 # APIErrorCode 201: Error retrieving NIPA/Fixed Assets data
12
+ GDPRetrivalError = 204 # APIErrorCode 204: Error retrieving GDP by Industry data
13
+
14
+ BEA_URL = 'http://www.bea.gov/api/data'
15
+
16
+ def self.find(options = {})
17
+ uri = "#{BEA_URL}?#{self.to_params(options)}"
18
+ response = Request.new(uri)
19
+ end
20
+
21
+ def initialize(uri)
22
+ @error_code = Request::Success
23
+ @error_msg = ""
24
+ @response = RestClient.get(uri.to_s)
25
+ _parse_response
26
+ end
27
+
28
+ protected
29
+
30
+ def _parse_response
31
+ case @response.code
32
+ when 200
33
+ _response_html_success(@response)
34
+ else
35
+ _response_html_error(@response)
36
+ end
37
+ end
38
+
39
+ def self.to_params(options)
40
+ options.map { |k,v| "#{k}=#{v}" }.join("&")
41
+ end
42
+
43
+ def _response_html_success(response)
44
+ r = JSON.parse(response)
45
+ if (!r["BEAAPI"]["Error"].nil? || r["BEAAPI"]["Results"].first.first.to_s.downcase == 'error')
46
+ @response = _response_error(response, r)
47
+ else
48
+ @response = _response_success(r)
49
+ end
50
+ end
51
+
52
+ def _response_success(response)
53
+ h = []
54
+ if (response.length > 0)
55
+ h = _parse_data(response)
56
+ h = [h] unless (h.kind_of?(Array))
57
+ @notes = _parse_notes(response)
58
+ end
59
+ h
60
+ end
61
+
62
+ def _parse_data(response)
63
+ if (!response["BEAAPI"]["Results"]["Data"].nil?)
64
+ h = response["BEAAPI"]["Results"]["Data"]
65
+ elsif (!response["BEAAPI"]["Data"].nil?)
66
+ h = response["BEAAPI"]["Data"]
67
+ else
68
+ h = response["BEAAPI"]["Results"].first[1]
69
+ end
70
+ h
71
+ end
72
+
73
+ def _parse_notes(response)
74
+ if (!response["BEAAPI"]["Results"]["Notes"].nil?)
75
+ notes = response["BEAAPI"]["Results"]["Notes"]
76
+ elsif (!response["BEAAPI"]["Notes"].nil?)
77
+ notes = response["BEAAPI"]["Notes"]
78
+ end
79
+ notes
80
+ end
81
+
82
+ def _response_error(response, r)
83
+ _parse_error(r)
84
+ {
85
+ code: response.code,
86
+ location: response.headers[:location],
87
+ error_code: @error_code,
88
+ error_msg: @error_msg
89
+ }
90
+ end
91
+
92
+ def _parse_error(r)
93
+ if (!r["BEAAPI"]["Error"].nil?)
94
+ @error_code = r["BEAAPI"]["Error"]["APIErrorCode"].to_i
95
+ @error_msg = r["BEAAPI"]["Error"]["APIErrorDescription"]
96
+ else
97
+ @error_code = r["BEAAPI"]["Results"].first.last["APIErrorCode"].to_i
98
+ @error_msg = r["BEAAPI"]["Results"].first.last["APIErrorDescription"]
99
+ end
100
+ end
101
+
102
+ def _response_html_error(response)
103
+ {
104
+ code: response.code,
105
+ location: response.headers[:location],
106
+ body: response.body
107
+ }
108
+ end
109
+
110
+ end
111
+ end
@@ -0,0 +1,3 @@
1
+ module BeaApi
2
+ VERSION = "0.0.5"
3
+ end
@@ -0,0 +1 @@
1
+ RSPEC_API_KEY = ENV["BEA_API_KEY"]
@@ -0,0 +1,276 @@
1
+ require 'spec_helper'
2
+
3
+ describe BeaApi::Client do
4
+
5
+ describe 'client initialization' do
6
+
7
+ it 'should not initialize without an api_key' do
8
+ expect { BeaApi::Client.new(nil) }.to raise_error(ArgumentError)
9
+ end
10
+
11
+ it 'should not initialize with an invalid api_key' do
12
+ VCR.use_cassette('initialize_client_failure') do
13
+ expect { BeaApi::Client.new('XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX') }.to raise_error(/is not a valid API key/)
14
+ end
15
+ end
16
+
17
+ it 'should initialize with an api_key' do
18
+ VCR.use_cassette('initialize_client') do
19
+ @client = BeaApi::Client.new(api_key)
20
+ expect(@client.api_key).to eq(api_key)
21
+ end
22
+ end
23
+ end
24
+
25
+ describe 'get datasets' do
26
+
27
+ it 'should get all the datasets' do
28
+ VCR.use_cassette('get_datasets') do
29
+ @client = BeaApi::Client.new(api_key)
30
+ @datasets = @client.get_datasets()
31
+ expect(@datasets.error_code).to eq(BeaApi::Request::Success)
32
+ expect(@datasets.response.count).to eq(@client.datasets.count)
33
+ @datasets.response.each do |r|
34
+ expect(@client.datasets).to include(r["DatasetName"].to_sym)
35
+ end
36
+ end
37
+ end
38
+ end
39
+
40
+ describe 'get parameters' do
41
+
42
+ it 'should not get parameters for an invalid dataset' do
43
+ VCR.use_cassette('get invalid parameters') do
44
+ @client = BeaApi::Client.new(api_key)
45
+ expect {@client.get_parameters("InvalidDataset") }.to raise_error(ArgumentError)
46
+ end
47
+ end
48
+
49
+ it 'should get parameters for each dataset' do
50
+ VCR.use_cassette('get_parmeters') do
51
+ @client = BeaApi::Client.new(api_key)
52
+ @client.datasets.each do |d|
53
+ p = @client.get_parameters(d)
54
+ expect(p.error_code).to eq(BeaApi::Request::Success)
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ describe 'get parameter values' do
61
+
62
+ it 'should not get parameter values for an invalid dataset' do
63
+ VCR.use_cassette('get invalid parameter values') do
64
+ @client = BeaApi::Client.new(api_key)
65
+ expect {@client.get_parameter_values("InvalidDataset", '') }.to raise_error(ArgumentError)
66
+ end
67
+ end
68
+
69
+ it 'should not get parameters values for an invalid parameter' do
70
+ VCR.use_cassette('get invalid parameter values') do
71
+ @client = BeaApi::Client.new(api_key)
72
+ expect {@client.get_parameters(@client.datasets.first, '') }.to raise_error(ArgumentError)
73
+ end
74
+ end
75
+
76
+ it 'should get parameters values for each dataset' do
77
+ VCR.use_cassette('get_parmeter_values') do
78
+ @client = BeaApi::Client.new(api_key)
79
+ @client.datasets.each do |d|
80
+ p = @client.get_parameters(d)
81
+ expect(p.error_code).to eq(BeaApi::Request::Success)
82
+ r = p.response.first
83
+ n = @client.get_parameter_values(d, r['ParameterName'])
84
+ expect(n.error_code).to eq(BeaApi::Request::Success)
85
+ end
86
+ end
87
+ end
88
+ end
89
+
90
+ describe 'get data' do
91
+ it 'should not get data for an invalid dataset' do
92
+ VCR.use_cassette('get invalid data dataset') do
93
+ @client = BeaApi::Client.new(api_key)
94
+ expect {@client.get_data("InvalidDataset", '') }.to raise_error(ArgumentError)
95
+ end
96
+ end
97
+ it 'should not get data values for an invalid parameter' do
98
+ VCR.use_cassette('get invalid data options') do
99
+ @client = BeaApi::Client.new(api_key)
100
+ dataset = @client.datasets.first
101
+ expect {@client.get_data(dataset, {}) }.to raise_error(ArgumentError)
102
+ expect {@client.get_data(dataset, nil) }.to raise_error(ArgumentError)
103
+ expect {@client.get_data(dataset, "") }.to raise_error(ArgumentError)
104
+ end
105
+ end
106
+
107
+ describe 'RegionalData' do
108
+ dataset = :RegionalData
109
+ it 'should not get data values for invalid parameters' do
110
+ VCR.use_cassette('get data for RegionalData with invalid parameters') do
111
+ @client = BeaApi::Client.new(api_key)
112
+ r = @client.get_data(dataset, { "KeyCode" => "PCPI_CI", "GeoFIPS" => "STATE:00000,01000,02000,04000", "Year" => 3009 } )
113
+ expect(r.error_code).not_to eq(BeaApi::Request::Success)
114
+ end
115
+ end
116
+ it 'should get data values for valid parameters' do
117
+ VCR.use_cassette('get data for RegionalData with valid parameters') do
118
+ @client = BeaApi::Client.new(api_key)
119
+ r = @client.get_data(dataset, { "KeyCode" => "PCPI_CI", "GeoFIPS" => "STATE:00000,01000,02000,04000", "Year" => 2009 } )
120
+ expect(r.error_code).to eq(BeaApi::Request::Success)
121
+ expect(r.response.count).to eq(4)
122
+ end
123
+ end
124
+ end
125
+
126
+ describe 'NIPA' do
127
+ dataset = :NIPA
128
+ it 'should not get data values for invalid parameters' do
129
+ VCR.use_cassette('get data for NIPA with invalid parameters') do
130
+ @client = BeaApi::Client.new(api_key)
131
+ r = @client.get_data(dataset, { "TableID" => 0, "Frequency" => "A", "Year" => 2009 } )
132
+ expect(r.error_code).to eq(BeaApi::Request::RetrivalError)
133
+ end
134
+ end
135
+ it 'should get data values for valid parameters' do
136
+ VCR.use_cassette('get data for NIPA with valid parameters') do
137
+ @client = BeaApi::Client.new(api_key)
138
+ r = @client.get_data(dataset, { "TableID" => 1, "Frequency" => "A", "Year" => 2009 } )
139
+ expect(r.error_code).to eq(BeaApi::Request::Success)
140
+ expect(r.response.count).to eq(25)
141
+ end
142
+ end
143
+ end
144
+
145
+ describe 'NI Underlying Detail' do
146
+ dataset = :NIUnderlyingDetail
147
+ it 'should not get data values for invalid parameters' do
148
+ VCR.use_cassette('get data for NI Underlying Detail with invalid parameters') do
149
+ @client = BeaApi::Client.new(api_key)
150
+ r = @client.get_data(dataset, { "TableID" => 1, "Frequency" => "A", "Year" => 2009 } )
151
+ expect(r.error_code).to eq(BeaApi::Request::RetrivalError)
152
+ end
153
+ end
154
+ it 'should get data values for valid parameters' do
155
+ VCR.use_cassette('get data for NI Underlying Detail with valid parameters') do
156
+ @client = BeaApi::Client.new(api_key)
157
+ r = @client.get_data(dataset, { "TableID" => 79, "Frequency" => "A", "Year" => 2004 } )
158
+ expect(r.error_code).to eq(BeaApi::Request::Success)
159
+ expect(r.response.count).to eq(30)
160
+ end
161
+ end
162
+ end
163
+
164
+ describe 'MNE' do
165
+ dataset = :MNE
166
+ it 'should not get data values for invalid parameters' do
167
+ VCR.use_cassette('get data for MNE with invalid parameters') do
168
+ @client = BeaApi::Client.new(api_key)
169
+ r = @client.get_data(dataset, { "DirectionOfInvestment" => 'inval', "Classification" => "", "Year" => 2009, "State" => "01" } )
170
+ #expect(r.error_code).not_to eq(BeaApi::Request::Success)
171
+ end
172
+ end
173
+ it 'should get data values for valid parameters' do
174
+ VCR.use_cassette('get data for MNE with valid parameters') do
175
+ @client = BeaApi::Client.new(api_key)
176
+ r = @client.get_data(dataset, { "DirectionOfInvestment" => 'inward', "Classification" => "Country", "Year" => 2009, "State" => "01" } )
177
+ expect(r.error_code).to eq(BeaApi::Request::Success)
178
+ expect(r.response.count).to eq(1544)
179
+ end
180
+ end
181
+ end
182
+
183
+ describe 'Fixed Assets' do
184
+ dataset = :FixedAssets
185
+ it 'should not get data values for invalid parameters' do
186
+ VCR.use_cassette('get data for FixedAssets with invalid parameters') do
187
+ @client = BeaApi::Client.new(api_key)
188
+ r = @client.get_data(dataset, { "TableID" => 0, "Year" => 2009 } )
189
+ expect(r.error_code).not_to eq(BeaApi::Request::Success)
190
+ end
191
+ end
192
+ it 'should get data values for valid parameters' do
193
+ VCR.use_cassette('get data for FixedAssets with valid parameters') do
194
+ @client = BeaApi::Client.new(api_key)
195
+ r = @client.get_data(dataset, { "TableID" => 1, "Year" => 2009 } )
196
+ expect(r.error_code).to eq(BeaApi::Request::Success)
197
+ expect(r.response.count).to eq(24)
198
+ end
199
+ end
200
+ end
201
+
202
+ describe 'ITA' do
203
+ dataset = :ITA
204
+ it 'should not get data values for invalid parameters' do
205
+ VCR.use_cassette('get data for ITA with invalid parameters') do
206
+ @client = BeaApi::Client.new(api_key)
207
+ r = @client.get_data(dataset, { "Frequency" => "A", "Year" => 2009 } )
208
+ expect(r.error_code).not_to eq(BeaApi::Request::Success)
209
+ end
210
+ end
211
+ it 'should get data values for valid parameters' do
212
+ VCR.use_cassette('get data for ITA with valid parameters') do
213
+ @client = BeaApi::Client.new(api_key)
214
+ r = @client.get_data(dataset, { "Indicator" => "CurrAndDepLiabsFoa", "Frequency" => "A", "Year" => 2009 } )
215
+ expect(r.error_code).to eq(BeaApi::Request::Success)
216
+ expect(r.response.count).to eq(1)
217
+ end
218
+ end
219
+ it 'should get data values for valid parameters' do
220
+ VCR.use_cassette('get data for ITA with 2 valid parameters') do
221
+ @client = BeaApi::Client.new(api_key)
222
+ r = @client.get_data(dataset, { "Indicator" => "CurrAndDepLiabsFoa", "Frequency" => "A", "Year" => "2009,2010" } )
223
+ expect(r.error_code).to eq(BeaApi::Request::Success)
224
+ expect(r.response.count).to eq(2)
225
+ end
226
+ end
227
+ end
228
+
229
+ describe 'IIP' do
230
+ dataset = :IIP
231
+ it 'should not get data values for invalid parameters' do
232
+ VCR.use_cassette('get data for IIP with invalid parameters') do
233
+ @client = BeaApi::Client.new(api_key)
234
+ r = @client.get_data(dataset, { "Frequency" => "A" } )
235
+ expect(r.error_code).not_to eq(BeaApi::Request::Success)
236
+ end
237
+ end
238
+ it 'should get data values for valid parameters' do
239
+ VCR.use_cassette('get data for IIP with valid parameters') do
240
+ @client = BeaApi::Client.new(api_key)
241
+ r = @client.get_data(dataset, { "Frequency" => "A", "Year" => 2009 } )
242
+ expect(r.error_code).to eq(BeaApi::Request::Success)
243
+ expect(r.response.count).to eq(450)
244
+ end
245
+ end
246
+ end
247
+
248
+ describe 'GDPbyIndustry' do
249
+ dataset = :GDPbyIndustry
250
+ it 'should not get data values for invalid parameters' do
251
+ VCR.use_cassette('get data for GDP by Industy with invalid parameters') do
252
+ @client = BeaApi::Client.new(api_key)
253
+ r = @client.get_data(dataset, { "Industry" => "12" } )
254
+ expect(r.error_code).not_to eq(BeaApi::Request::Success)
255
+ end
256
+ end
257
+ it 'should get data values for valid parameters' do
258
+ VCR.use_cassette('get data for GDP by Frequency with valid parameters') do
259
+ @client = BeaApi::Client.new(api_key)
260
+ r = @client.get_data(dataset, { "Industry" => "GDP", "TableID" => 1, "Frequency" => "A", "Year" => 2009 } )
261
+ expect(r.error_code).to eq(BeaApi::Request::Success)
262
+ expect(r.response.count).to eq(1)
263
+ end
264
+ end
265
+ it 'should get data values for valid parameters' do
266
+ VCR.use_cassette('get data for GDP by Frequency with valid parameters') do
267
+ @client = BeaApi::Client.new(api_key)
268
+ r = @client.get_data(dataset, { "Industry" => "GDP", "TableID" => 1, "Frequency" => "A", "Year" => "2009,2010" } )
269
+ expect(r.error_code).to eq(BeaApi::Request::Success)
270
+ expect(r.response.count).to eq(2)
271
+ end
272
+ end
273
+ end
274
+
275
+ end
276
+ end
@@ -0,0 +1,12 @@
1
+ require "codeclimate-test-reporter"
2
+ CodeClimate::TestReporter.start
3
+
4
+ require 'rubygems'
5
+ require 'bundler/setup'
6
+ require 'vcr_setup'
7
+ require 'api_key'
8
+ require 'bea_api'
9
+
10
+ def api_key
11
+ RSPEC_API_KEY
12
+ end
data/spec/vcr_setup.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'vcr'
2
+
3
+ VCR.configure do |c|
4
+ c.cassette_library_dir = 'spec/vcr_cassettes'
5
+ c.hook_into :webmock
6
+ c.ignore_localhost = true
7
+ c.default_cassette_options = { record: :new_episodes }
8
+ c.ignore_hosts 'codeclimate.com'
9
+ end
metadata ADDED
@@ -0,0 +1,178 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bea_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.5
5
+ platform: ruby
6
+ authors:
7
+ - Chad Hoersten
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-12-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ! '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec-rails
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ! '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: vcr
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ! '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: webmock
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: codeclimate-test-reporter
113
+ requirement: !ruby/object:Gem::Requirement
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
+ requirements:
122
+ - - ! '>='
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description: Ruby wrapper for the US Bureau of Economic Analysis (BEA) API at http://www.bea.gov/api/. This
126
+ API is used to pull United States economic data by geography.
127
+ email:
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - .gitignore
133
+ - Gemfile
134
+ - LICENSE.txt
135
+ - README.md
136
+ - Rakefile
137
+ - bea_api.gemspec
138
+ - circle.yml
139
+ - lib/bea_api.rb
140
+ - lib/bea_api/client.rb
141
+ - lib/bea_api/request.rb
142
+ - lib/bea_api/version.rb
143
+ - spec/api_key.rb
144
+ - spec/api_key.rb.ci
145
+ - spec/bea_api/client_spec.rb
146
+ - spec/spec_helper.rb
147
+ - spec/vcr_setup.rb
148
+ homepage: https://github.com/hoersten/bea_api
149
+ licenses:
150
+ - MIT
151
+ metadata: {}
152
+ post_install_message:
153
+ rdoc_options: []
154
+ require_paths:
155
+ - lib
156
+ required_ruby_version: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ requirements: []
167
+ rubyforge_project:
168
+ rubygems_version: 2.2.2
169
+ signing_key:
170
+ specification_version: 4
171
+ summary: Ruby wrapper for the US Bureau of Economic Analysis (BEA) API
172
+ test_files:
173
+ - spec/api_key.rb
174
+ - spec/api_key.rb.ci
175
+ - spec/bea_api/client_spec.rb
176
+ - spec/spec_helper.rb
177
+ - spec/vcr_setup.rb
178
+ has_rdoc: