yodlee_wrap 0.0.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.
@@ -0,0 +1,80 @@
1
+ require "yodleeicious/parameter_translator"
2
+
3
+ describe 'parameter translator' do
4
+ subject { Yodleeicious::ParameterTranslator.new }
5
+ context 'converting login params json to add site params' do
6
+ let (:login_form) {
7
+ {
8
+ 'componentList' => [
9
+ {
10
+ 'valueIdentifier' => 'LOGIN',
11
+ 'valueMask' => 'LOGIN_FIELD',
12
+ 'fieldType' => {
13
+ 'typeName' => 'IF_LOGIN'
14
+ },
15
+ 'size' => 20,
16
+ 'maxlength' => 32,
17
+ 'name' => 'LOGIN',
18
+ 'displayName' => 'User ID',
19
+ 'isEditable' => true,
20
+ 'isOptional' => false,
21
+ 'isEscaped' => false,
22
+ 'helpText' => 4710,
23
+ 'isOptionalMFA' => false,
24
+ 'isMFA' => false,
25
+ 'fieldValue' => 'kanyewest'
26
+ },
27
+ {
28
+ 'valueIdentifier' => 'PASSWORD',
29
+ 'valueMask' => 'LOGIN_FIELD',
30
+ 'fieldType' => {
31
+ 'typeName' => 'IF_PASSWORD'
32
+ },
33
+ 'size' => 20,
34
+ 'maxlength' => 40,
35
+ 'name' => 'PASSWORD',
36
+ 'displayName' => 'Password',
37
+ 'isEditable' => true,
38
+ 'isOptional' => false,
39
+ 'isEscaped' => false,
40
+ 'helpText' => 11976,
41
+ 'isOptionalMFA' => false,
42
+ 'isMFA' => false,
43
+ 'fieldValue' => 'iLoveTheGrammys'
44
+ }
45
+ ]
46
+ }
47
+ }
48
+
49
+ let (:add_site_params) {
50
+ {
51
+ "credentialFields.enclosedType" => "com.yodlee.common.FieldInfoSingle",
52
+ "credentialFields[0].displayName" => "User ID",
53
+ "credentialFields[0].fieldType.typeName" => "IF_LOGIN",
54
+ "credentialFields[0].helpText" => 4710,
55
+ "credentialFields[0].maxlength" => 32,
56
+ "credentialFields[0].name" => "LOGIN",
57
+ "credentialFields[0].size" => 20,
58
+ "credentialFields[0].value" => 'kanyewest',
59
+ "credentialFields[0].valueIdentifier" => "LOGIN",
60
+ "credentialFields[0].valueMask" => "LOGIN_FIELD",
61
+ "credentialFields[0].isEditable" => true,
62
+ "credentialFields[1].displayName" => "Password",
63
+ "credentialFields[1].fieldType.typeName" => "IF_PASSWORD",
64
+ "credentialFields[1].helpText" => 11976,
65
+ "credentialFields[1].maxlength" => 40,
66
+ "credentialFields[1].name" => "PASSWORD",
67
+ "credentialFields[1].size" => 20,
68
+ "credentialFields[1].value" => 'iLoveTheGrammys',
69
+ "credentialFields[1].valueIdentifier" => "PASSWORD",
70
+ "credentialFields[1].valueMask" => "LOGIN_FIELD",
71
+ "credentialFields[1].isEditable" => true
72
+ }
73
+ }
74
+
75
+ it "converts correctly to params hash" do
76
+ expect(subject.site_login_form_to_add_site_account_params(login_form)).to be == add_site_params
77
+ end
78
+
79
+ end
80
+ end
@@ -0,0 +1,61 @@
1
+ require "yodleeicious"
2
+
3
+ describe Yodleeicious::Response do
4
+ let(:error_response_1) {
5
+ {
6
+ "errorOccurred"=>"true",
7
+ "exceptionType"=>"com.yodlee.core.IllegalArgumentValueException",
8
+ "referenceCode"=>"_3932d208-345a-400f-a273-83619b8b548b",
9
+ "message"=>"Multiple exceptions encapsulated within: invoke getWrappedExceptions for details"
10
+ }
11
+ }
12
+
13
+ let(:error_response_2) {
14
+ { "Error" => [ {"errorDetail" => "Invalid User Credentials"} ] }
15
+ }
16
+
17
+ let(:success_hash_response) {
18
+ {}
19
+ }
20
+
21
+ let(:success_array_response) {
22
+ [{}]
23
+ }
24
+
25
+ context 'When the error_response is the errorOccured syntax' do
26
+ subject { Yodleeicious::Response.new error_response_1 }
27
+ it { is_expected.not_to be_success }
28
+ it { is_expected.to be_fail }
29
+ it "is expected to return error of InvalidArgumentValueException" do
30
+ expect(subject.error).to eq('com.yodlee.core.IllegalArgumentValueException')
31
+ end
32
+ end
33
+
34
+ context 'When the error_response is the Error : ["errorDetail"] syntax' do
35
+ subject { Yodleeicious::Response.new error_response_2 }
36
+ it { is_expected.not_to be_success }
37
+ it { is_expected.to be_fail }
38
+ it "is expected to return error of Invalid User Credentials" do
39
+ expect(subject.error).to eq('Invalid User Credentials')
40
+ end
41
+ end
42
+
43
+ context 'When operation is a success and returns hash' do
44
+ subject { Yodleeicious::Response.new success_hash_response }
45
+ it { is_expected.to be_success }
46
+ it { is_expected.not_to be_fail }
47
+ it 'is expected to return nil for error' do
48
+ expect(subject.error).to be_nil
49
+ end
50
+ end
51
+
52
+ context 'When operation is a success and return array' do
53
+ subject { Yodleeicious::Response.new success_array_response }
54
+ it { is_expected.to be_success }
55
+ it { is_expected.not_to be_fail }
56
+ it 'is expected to return nil for error' do
57
+ expect(subject.error).to be_nil
58
+ end
59
+ end
60
+
61
+ end
@@ -0,0 +1,341 @@
1
+ require "yodleeicious"
2
+ require "yodleeicious/config"
3
+
4
+ describe Yodleeicious::YodleeApi do
5
+
6
+ context 'Given a new uninitialized YodleeApi object' do
7
+ before {
8
+ Yodleeicious::Config.base_url=nil
9
+ Yodleeicious::Config.cobranded_username=nil
10
+ Yodleeicious::Config.cobranded_password=nil
11
+ Yodleeicious::Config.proxy_url=nil
12
+ }
13
+ subject { Yodleeicious::YodleeApi.new }
14
+
15
+ it 'should return nil for cobranded_auth' do
16
+ expect(subject.cobranded_auth).to be_nil
17
+ end
18
+
19
+ it 'should return nil for user_auth' do
20
+ expect(subject.user_auth).to be_nil
21
+ end
22
+
23
+ it 'should return nil for session_token' do
24
+ expect(subject.cobranded_session_token).to be_nil
25
+ end
26
+
27
+ it 'should return nil for user_session_token' do
28
+ expect(subject.user_session_token).to be_nil
29
+ end
30
+
31
+ it 'should return a translator' do
32
+ expect(subject.translator).not_to be_nil
33
+ end
34
+ end
35
+
36
+ context 'Given a Yodleeicious::Config with nil configuration' do
37
+ context 'When a new YodleeApi instance is created with no configuration' do
38
+ before {
39
+ Yodleeicious::Config.base_url=nil
40
+ Yodleeicious::Config.cobranded_username=nil
41
+ Yodleeicious::Config.cobranded_password=nil
42
+ Yodleeicious::Config.proxy_url=nil
43
+ }
44
+ subject { Yodleeicious::YodleeApi.new }
45
+
46
+ it 'no base_url set' do
47
+ expect(subject.base_url).to be_nil
48
+ end
49
+
50
+ it 'no cobranded_username is set' do
51
+ expect(subject.cobranded_username).to be_nil
52
+ end
53
+
54
+ it 'no cobranded_password is set' do
55
+ expect(subject.cobranded_password).to be_nil
56
+ end
57
+
58
+ it 'no proxy_url is set' do
59
+ expect(subject.proxy_url).to be_nil
60
+ end
61
+
62
+ it 'empty proxy_opts are created' do
63
+ expect(subject.proxy_opts).to eq({})
64
+ end
65
+
66
+ it 'no socks proxy is used' do
67
+ expect(subject.use_socks?).to eq(false)
68
+ end
69
+ end
70
+ end
71
+
72
+ context 'Given a Yodleeicious::Config with a configuration' do
73
+ context 'When a new YodleeApi instance is created with the global configuration set' do
74
+ before {
75
+ Yodleeicious::Config.base_url='base url'
76
+ Yodleeicious::Config.cobranded_username='user name'
77
+ Yodleeicious::Config.cobranded_password='password'
78
+ Yodleeicious::Config.proxy_url='socks5h://somehostname'
79
+ }
80
+ subject { Yodleeicious::YodleeApi.new }
81
+
82
+ it 'base_url set' do
83
+ expect(subject.base_url).to eq('base url')
84
+ end
85
+
86
+ it 'cobranded_username is set' do
87
+ expect(subject.cobranded_username).to eq('user name')
88
+ end
89
+
90
+ it 'cobranded_password is set' do
91
+ expect(subject.cobranded_password).to eq('password')
92
+ end
93
+
94
+ it 'proxy_url is set' do
95
+ expect(subject.proxy_url).to eq('socks5h://somehostname')
96
+ end
97
+
98
+ it 'proxy_opts are created' do
99
+ expect(subject.proxy_opts).to eq({ socks: true, uri: URI.parse('socks5h://somehostname') })
100
+ end
101
+
102
+ it 'socks proxy is used' do
103
+ expect(subject.use_socks?).to eq(true)
104
+ end
105
+ end
106
+ end
107
+
108
+ context 'Given a Yodleeicious::Config with nil configuration' do
109
+ context 'When a new YodleeApi instance is created and provided a configuration' do
110
+ before {
111
+ Yodleeicious::Config.base_url=nil
112
+ Yodleeicious::Config.cobranded_username=nil
113
+ Yodleeicious::Config.cobranded_password=nil
114
+ Yodleeicious::Config.proxy_url=nil
115
+ }
116
+ let(:config) {
117
+ {
118
+ base_url: "https://rest.developer.yodlee.com/services/srest/restserver/v1.0",
119
+ cobranded_username: "some_username",
120
+ cobranded_password: "some_password",
121
+ proxy_url: "socks5h://127.0.0.1:1080"
122
+ }
123
+ }
124
+
125
+ subject { Yodleeicious::YodleeApi.new(config) }
126
+
127
+ it 'the provided base url is set' do
128
+ expect(subject.base_url).to eq(config[:base_url])
129
+ end
130
+
131
+ it 'the provided cobranded_username is set' do
132
+ expect(subject.cobranded_username).to eq(config[:cobranded_username])
133
+ end
134
+
135
+ it 'the provided cobranded_password is set' do
136
+ expect(subject.cobranded_password).to eq(config[:cobranded_password])
137
+ end
138
+
139
+ it 'the provided proxy_url is set' do
140
+ expect(subject.proxy_url).to eq(config[:proxy_url])
141
+ end
142
+
143
+ it 'the provided proxy_opts are created' do
144
+ proxy_opts = {
145
+ socks: true,
146
+ uri: URI.parse(config[:proxy_url])
147
+ }
148
+ expect(subject.proxy_opts).to eq(proxy_opts)
149
+ end
150
+
151
+ it 'the provided socks proxy is used' do
152
+ expect(subject.use_socks?).to eq(true)
153
+ end
154
+ end
155
+ end
156
+
157
+ context 'Given a Yodleeicious::Config with set config values' do
158
+ context 'When a new YodleeApi instance is created and provided a configuration' do
159
+ before {
160
+ Yodleeicious::Config.base_url='base url'
161
+ Yodleeicious::Config.cobranded_username='user name'
162
+ Yodleeicious::Config.cobranded_password='password'
163
+ Yodleeicious::Config.proxy_url='socks5h://somehostname'
164
+ }
165
+ let(:config) {
166
+ {
167
+ base_url: "https://rest.developer.yodlee.com/services/srest/restserver/v1.0",
168
+ cobranded_username: "some_username",
169
+ cobranded_password: "some_password",
170
+ proxy_url: "socks5h://127.0.0.1:1080"
171
+ }
172
+ }
173
+
174
+ subject { Yodleeicious::YodleeApi.new(config) }
175
+
176
+ it 'the provided base url is set' do
177
+ expect(subject.base_url).to eq(config[:base_url])
178
+ end
179
+
180
+ it 'the provided cobranded_username is set' do
181
+ expect(subject.cobranded_username).to eq(config[:cobranded_username])
182
+ end
183
+
184
+ it 'the provided cobranded_password is set' do
185
+ expect(subject.cobranded_password).to eq(config[:cobranded_password])
186
+ end
187
+
188
+ it 'the provided proxy_url is set' do
189
+ expect(subject.proxy_url).to eq(config[:proxy_url])
190
+ end
191
+
192
+ it 'the provided proxy_opts are created' do
193
+ proxy_opts = {
194
+ socks: true,
195
+ uri: URI.parse(config[:proxy_url])
196
+ }
197
+ expect(subject.proxy_opts).to eq(proxy_opts)
198
+ end
199
+
200
+ it 'the provided socks proxy is used' do
201
+ expect(subject.use_socks?).to eq(true)
202
+ end
203
+ end
204
+ end
205
+
206
+ context 'Given a Yodleeicious::Config with nil config values' do
207
+ context 'When a new YodleeApi instance is configured with no proxy_url' do
208
+ before {
209
+ Yodleeicious::Config.base_url=nil
210
+ Yodleeicious::Config.cobranded_username=nil
211
+ Yodleeicious::Config.cobranded_password=nil
212
+ Yodleeicious::Config.proxy_url=nil
213
+ }
214
+ let(:config) {
215
+ {
216
+ base_url: "https://rest.developer.yodlee.com/services/srest/restserver/v1.0",
217
+ cobranded_username: "some_username",
218
+ cobranded_password: "some_password"
219
+ }
220
+ }
221
+
222
+ subject { Yodleeicious::YodleeApi.new(config) }
223
+
224
+ it 'no proxy_url is set' do
225
+ expect(subject.proxy_url).to be_nil
226
+ end
227
+
228
+ it 'no proxy_opts are created' do
229
+ expect(subject.proxy_opts).to eq({})
230
+ end
231
+
232
+ it 'the socks proxy is not used' do
233
+ expect(subject.use_socks?).to eq(false)
234
+ end
235
+ end
236
+ end
237
+
238
+ describe '#should_retry_get_mfa_response?' do
239
+ let (:api) { Yodleeicious::YodleeApi.new }
240
+ let (:response) { instance_double("Yodleeicious::Response") }
241
+
242
+ context 'Given get mfa response has failed' do
243
+ before { allow(response).to receive(:success?).and_return(false) }
244
+ before { allow(response).to receive(:body).and_return({}) }
245
+ subject { api.should_retry_get_mfa_response?(response,0,1) }
246
+ it { is_expected.to be_falsy }
247
+ end
248
+
249
+ context 'Given get mfa response is success' do
250
+ before { allow(response).to receive(:success?).and_return(true) }
251
+
252
+ context 'Given an error code is returned' do
253
+ before { allow(response).to receive(:body).and_return({ 'errorCode' => 100 }) }
254
+ subject { api.should_retry_get_mfa_response?(response,0,1) }
255
+ it { is_expected.to be_falsy }
256
+ end
257
+
258
+ context 'Given no error code is returned' do
259
+ context 'Given the MFA message is available' do
260
+ before { allow(response).to receive(:body).and_return({ 'isMessageAvailable' => true }) }
261
+ subject { api.should_retry_get_mfa_response?(response,0,1) }
262
+ it { is_expected.to be_falsy }
263
+ end
264
+
265
+ context 'Given the MFA message is not available' do
266
+ before { allow(response).to receive(:body).and_return({ 'isMessageAvailable' => false }) }
267
+ context 'Given all the trys have been used up' do
268
+ subject { api.should_retry_get_mfa_response?(response,1,1) }
269
+ it { is_expected.to be_falsy }
270
+ end
271
+
272
+ context 'Given the trys have not been used up' do
273
+ subject { api.should_retry_get_mfa_response?(response,0,2) }
274
+ it { is_expected.to be_truthy }
275
+ end
276
+ end
277
+ end
278
+ end
279
+ end
280
+
281
+ describe '#should_retry_get_site_refresh_info' do
282
+ let (:api) { Yodleeicious::YodleeApi.new }
283
+ let (:response) { double("response") }
284
+
285
+ context 'Given get mfa response has failed' do
286
+ before { allow(response).to receive(:success?).and_return(false) }
287
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
288
+ it { is_expected.to be_falsy }
289
+ end
290
+
291
+ context 'Given get mfa response is success' do
292
+ before { allow(response).to receive(:success?).and_return(true) }
293
+
294
+ context 'Given an code 801 is returned' do
295
+ before { allow(response).to receive(:body).and_return({ 'code' => 801 }) }
296
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
297
+ it { is_expected.to be_truthy }
298
+ end
299
+
300
+ context 'Given not 801 and not 0 code is returned' do
301
+ before { allow(response).to receive(:body).and_return({ 'code' => 5 }) }
302
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
303
+ it { is_expected.to be_falsy }
304
+ end
305
+
306
+ context 'Given a code 0 is returned' do
307
+ context 'Given a siteRefreshStatus of REFRESH_COMPLETED' do
308
+ before { allow(response).to receive(:body).and_return({ 'code' => 0, "siteRefreshStatus" => { "siteRefreshStatus" => "REFRESH_COMPLETED" }}) }
309
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
310
+ it { is_expected.to be_falsy }
311
+ end
312
+
313
+ context 'Given a siteRefreshStatus of REFRESH_TIMED_OUT' do
314
+ before { allow(response).to receive(:body).and_return({ 'code' => 0, "siteRefreshStatus" => { "siteRefreshStatus" => "REFRESH_TIMED_OUT" }}) }
315
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
316
+ it { is_expected.to be_falsy }
317
+ end
318
+
319
+ context 'Given a siteRefreshStatus of LOGIN_SUCCESS' do
320
+ before { allow(response).to receive(:body).and_return({ 'code' => 0, "siteRefreshStatus" => { "siteRefreshStatus" => "LOGIN_SUCCESS" }}) }
321
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
322
+ it { is_expected.to be_falsy }
323
+ end
324
+
325
+ context 'Given a siteRefreshStatus of REFRESH_TRIGGERED' do
326
+ before { allow(response).to receive(:body).and_return({ 'code' => 0, "siteRefreshStatus" => { "siteRefreshStatus" => "REFRESH_TRIGGERED" }}) }
327
+ subject { api.should_retry_get_site_refresh_info?(response,0,1) }
328
+ it { is_expected.to be_truthy }
329
+ end
330
+
331
+ context 'Given a siteRefreshStatus of REFRESH_TRIGGERED' do
332
+ before { allow(response).to receive(:body).and_return({ 'code' => 0, "siteRefreshStatus" => { "siteRefreshStatus" => "REFRESH_TRIGGERED" }}) }
333
+ context 'Given trys have been used up' do
334
+ subject { api.should_retry_get_site_refresh_info?(response,1,1) }
335
+ it { is_expected.to be_falsy }
336
+ end
337
+ end
338
+ end
339
+ end
340
+ end
341
+ end
data/todo.md ADDED
@@ -0,0 +1,8 @@
1
+
2
+ TODOs
3
+ - [ ] document more api methods
4
+ - [ ] speed up integration test runs with vcr
5
+ - [ ] complete remaining api methods
6
+ - [ ] improve error parsing can capture
7
+ - [ ] allow for configuration of faraday's logging
8
+ - [ ] figure out work around for faraday monkey patch
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'yodlee_wrap/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "yodlee_wrap"
8
+ spec.version = YodleeWrap::VERSION
9
+ spec.authors = ["Shannon Byrne"]
10
+ spec.email = ["shannon@studentloangenius.com"]
11
+ spec.summary = "Yodlee API Client Gem for 2016 developer.yodlee gem"
12
+ spec.description = "Yodlee is a pain. This makes it a bit easier."
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
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_development_dependency "bundler", "~> 1.7"
21
+ spec.add_development_dependency "rake", "~> 10.0"
22
+ spec.add_development_dependency "rspec", "~> 3.2"
23
+
24
+ spec.add_runtime_dependency "faraday", '~> 0.9.1', '>= 0.9.1'
25
+ spec.add_runtime_dependency "socksify", '~> 1.6.0', '>= 1.6.0'
26
+
27
+ # gem 'faraday', '0.9.0'
28
+ # gem 'socksify', '1.5.0'
29
+
30
+ spec.required_ruby_version = '>= 1.9.3'
31
+ end
data/yodlicious.png ADDED
Binary file
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yodlee_wrap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Shannon Byrne
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.2'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: faraday
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.9.1
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: 0.9.1
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - "~>"
70
+ - !ruby/object:Gem::Version
71
+ version: 0.9.1
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 0.9.1
75
+ - !ruby/object:Gem::Dependency
76
+ name: socksify
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 1.6.0
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: 1.6.0
85
+ type: :runtime
86
+ prerelease: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - "~>"
90
+ - !ruby/object:Gem::Version
91
+ version: 1.6.0
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: 1.6.0
95
+ description: Yodlee is a pain. This makes it a bit easier.
96
+ email:
97
+ - shannon@studentloangenius.com
98
+ executables: []
99
+ extensions: []
100
+ extra_rdoc_files: []
101
+ files:
102
+ - ".DS_Store"
103
+ - ".gitignore"
104
+ - ".rspec"
105
+ - Gemfile
106
+ - Guardfile
107
+ - LICENSE.txt
108
+ - README.md
109
+ - Rakefile
110
+ - lib/yodlee_wrap.rb
111
+ - lib/yodlee_wrap/config.rb
112
+ - lib/yodlee_wrap/parameter_translator.rb
113
+ - lib/yodlee_wrap/response.rb
114
+ - lib/yodlee_wrap/version.rb
115
+ - lib/yodlee_wrap/yodlee_api.rb
116
+ - log/.gitkeep
117
+ - spec/integration/integration_spec.rb
118
+ - spec/spec_helper.rb
119
+ - spec/unit/yodleeicious/config_spec.rb
120
+ - spec/unit/yodleeicious/parameter_translator_spec.rb
121
+ - spec/unit/yodleeicious/response_spec.rb
122
+ - spec/unit/yodleeicious/yodlee_api_spec.rb
123
+ - todo.md
124
+ - yodlee_wrap.gemspec
125
+ - yodlicious.png
126
+ homepage: ''
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 1.9.3
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.4.5.1
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Yodlee API Client Gem for 2016 developer.yodlee gem
150
+ test_files:
151
+ - spec/integration/integration_spec.rb
152
+ - spec/spec_helper.rb
153
+ - spec/unit/yodleeicious/config_spec.rb
154
+ - spec/unit/yodleeicious/parameter_translator_spec.rb
155
+ - spec/unit/yodleeicious/response_spec.rb
156
+ - spec/unit/yodleeicious/yodlee_api_spec.rb