coyodlee 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,32 @@
1
+ module Coyodlee
2
+ module Facades
3
+ class CobrandFacade
4
+ def initialize(request_facade)
5
+ @request_facade = request_facade
6
+ end
7
+
8
+ def login(login_name:, password:)
9
+ body = {
10
+ cobrand: {
11
+ cobrandLogin: login_name,
12
+ cobrandPassword: password,
13
+ locale: 'en_US'
14
+ }
15
+ }.to_json
16
+ headers = { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
17
+ req = @request_facade.build(:post, 'cobrand/login', headers: headers, body: body)
18
+ @request_facade.execute(req)
19
+ end
20
+
21
+ def logout
22
+ req = @request_facade.build(:post, 'cobrand/logout')
23
+ @request_facade.execute(req)
24
+ end
25
+
26
+ def public_key
27
+ req = @request_facade.build(:get, 'cobrand/publicKey')
28
+ @request_facade.execute(req)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ module Coyodlee
2
+ module Facades
3
+ class HoldingsFacade
4
+ def initialize(request_facade)
5
+ @request_facade = request_facade
6
+ end
7
+
8
+ def all(params={})
9
+ headers = { 'Accept' => 'application/json' }
10
+ req = @request_facade.build(:get, 'holdings', headers: headers, params: params)
11
+ @request_facade.execute(req)
12
+ end
13
+
14
+ def extended_securities_info(params={})
15
+ headers = { 'Accept' => 'application/json' }
16
+ req = @request_facade.build(:get, 'holdings/securities', headers: headers, params: params)
17
+ @request_facade.execute(req)
18
+ end
19
+
20
+ def holding_type_list
21
+ headers = { 'Accept' => 'application/json' }
22
+ req = @request_facade.build(:get, 'holdings/holdingTypeList', headers: headers)
23
+ @request_facade.execute(req)
24
+ end
25
+
26
+ def asset_classification_list
27
+ headers = { 'Accept' => 'application/json' }
28
+ req = @request_facade.build(:get, 'holdings/assetClassificationList', headers: headers)
29
+ @request_facade.execute(req)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,52 @@
1
+ module Coyodlee
2
+ module Facades
3
+ class ProviderAccountsFacade
4
+ def initialize(request_facade)
5
+ @request_facade = request_facade
6
+ end
7
+
8
+ def provider_accounts
9
+ headers = { 'Accept' => 'application/json' }
10
+ req = @request_facade.build(:get, 'providerAccounts', headers: headers)
11
+ @request_facade.execute(req)
12
+ end
13
+
14
+ def verify(body:)
15
+ headers = { 'Accept' => 'application/json' }
16
+ req = @request_facade.build(:put, 'providerAccounts/verification', headers: headers, body: body.to_json)
17
+ @request_facade.execute(req)
18
+ end
19
+
20
+ def verification_status(provider_account_id:)
21
+ headers = { 'Accept' => 'application/json' }
22
+ req = @request_facade.build(:get, "providerAccounts/verification/#{provider_account_id}", headers: headers)
23
+ @request_facade.execute(req)
24
+ end
25
+
26
+ def update(body:)
27
+ headers = { 'Accept' => 'application/json' }
28
+ req = @request_facade.build(:put, 'providerAccounts', headers: headers, body: body.to_json)
29
+ @request_facade.execute(req)
30
+ end
31
+
32
+ def delete(provider_account_id:)
33
+ headers = { 'Accept' => 'application/json' }
34
+ req = @request_facade.build(:delete, "providerAccounts/#{provider_account_id}", headers: headers)
35
+ @request_facade.execute(req)
36
+ end
37
+
38
+ def details(provider_account_id:, params: {})
39
+ headers = { 'Accept' => 'application/json' }
40
+ req = @request_facade.build(:get, "providerAccounts/#{provider_account_id}", headers: headers, params: params)
41
+ @request_facade.execute(req)
42
+ end
43
+
44
+ def add(provider_id:, body:)
45
+ headers = { 'Accept' => 'application/json' }
46
+ params = { 'providerId' => provider_id }
47
+ req = @request_facade.build(:post, "providerAccounts", headers: headers, params: params, body: body)
48
+ @request_facade.execute(req)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,88 @@
1
+ module Coyodlee
2
+ module Facades
3
+ class TransactionsFacade
4
+ def initialize(request_facade)
5
+ @request_facade = request_facade
6
+ end
7
+
8
+ def count(params={})
9
+ headers = { 'Accept' => 'application/json' }
10
+ req = @request_facade.build(:get, 'transactions/count', params: params, headers: headers)
11
+ @request_facade.execute(req)
12
+ end
13
+
14
+ def all(params={})
15
+ headers = { 'Accept' => 'application/json' }
16
+ req = @request_facade.build(:get, 'transactions', params: params, headers: headers)
17
+ @request_facade.execute(req)
18
+ end
19
+
20
+ def categorization_rules
21
+ headers = { 'Accept' => 'application/json' }
22
+ req = @request_facade.build(:get, 'transactions/categories/rules', headers: headers)
23
+ @request_facade.execute(req)
24
+ end
25
+
26
+ def create_categorization_rule(body:)
27
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
28
+ req = @request_facade.build(:post, 'transactions/categories/rules', headers: headers, body: body.to_json)
29
+ @request_facade.execute(req)
30
+ end
31
+
32
+ def update_categorization_rule(rule_id:, body:)
33
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
34
+ req = @request_facade.build(:put, "transactions/categories/rules/#{rule_id}", headers: headers, body: body.to_json)
35
+ @request_facade.execute(req)
36
+ end
37
+
38
+ def delete_categorization_rule(rule_id:)
39
+ headers = { 'Accept' => 'application/json' }
40
+ req = @request_facade.build(:put, "transactions/categories/rules/#{rule_id}", headers: headers)
41
+ @request_facade.execute(req)
42
+ end
43
+
44
+ def run_categorization_rule(rule_id:)
45
+ headers = { 'Accept' => 'application/json' }
46
+ req = @request_facade.build(:post, "transactions/categories/rules/#{rule_id}", headers: headers)
47
+ @request_facade.execute(req)
48
+ end
49
+
50
+ def run_all_categorization_rules
51
+ params = { 'action' => 'run' }
52
+ headers = { 'Accept' => 'application/json' }
53
+ req = @request_facade.build(:post, 'transactions/categories/rules', headers: headers, params: params)
54
+ @request_facade.execute(req)
55
+ end
56
+
57
+ def update(transaction_id:, body: {})
58
+ headers = { 'Accept' => 'application/json' }
59
+ req = @request_facade.build(:put, "transactions/#{transaction_id}", headers: headers, body: body)
60
+ @request_facade.execute(req)
61
+ end
62
+
63
+ def category_list
64
+ headers = { 'Accept' => 'application/json' }
65
+ req = @request_facade.build(:get, 'transactions/categories', headers: headers)
66
+ @request_facade.execute(req)
67
+ end
68
+
69
+ def create_category(body:)
70
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
71
+ req = @request_facade.build(:post, 'transactions/categories', headers: headers, body: body.to_json)
72
+ @request_facade.execute(req)
73
+ end
74
+
75
+ def update_category(body:)
76
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
77
+ req = @request_facade.build(:put, 'transactions/categories', headers: headers, body: body.to_json)
78
+ @request_facade.execute(req)
79
+ end
80
+
81
+ def delete_category(category_id:)
82
+ headers = { 'Accept' => 'application/json' }
83
+ req = @request_facade.build(:delete, "transactions/categories/#{category_id}", headers: headers)
84
+ @request_facade.execute(req)
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,39 @@
1
+ module Coyodlee
2
+ module Facades
3
+ class UserFacade
4
+ def initialize(request_facade)
5
+ @request_facade = request_facade
6
+ end
7
+
8
+ def login(login_name:, password:)
9
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
10
+ body = {
11
+ user: {
12
+ loginName: login_name,
13
+ password: password,
14
+ locale: 'en_US'
15
+ }
16
+ }.to_json
17
+ req = @request_facade.build(:post, 'user/login', headers: headers, body: body)
18
+ @request_facade.execute(req)
19
+ end
20
+
21
+ def register(login_name:, password:)
22
+ headers = { 'Accept' => 'application/json' }
23
+ req = @request_facade.build(:post, 'user/logout', headers: headers)
24
+ @request_facade.execute(req)
25
+ end
26
+
27
+ def unregister
28
+ req = @request_facade.build(:delete, 'user/unregister')
29
+ @request_facade.execute(req)
30
+ end
31
+
32
+ def logout(login_name:, password:)
33
+ headers = { 'Accept' => 'application/json' }
34
+ req = @request_facade.build(:post, 'user/logout', headers: headers)
35
+ @request_facade.execute(req)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,46 @@
1
+ require_relative 'session_authorization'
2
+ require_relative 'session_tokens'
3
+ require 'json'
4
+
5
+ module Coyodlee
6
+ class Session
7
+ attr_reader :authorization
8
+ attr_writer :cobrand_session_token_klass
9
+ attr_writer :user_session_token_klass
10
+
11
+ class << self
12
+ def create(request_facade)
13
+ new(request_facade: request_facade,
14
+ session_authorization: SessionAuthorization.new).tap do |session|
15
+ session.cobrand_session_token_klass = CobrandSessionToken
16
+ session.user_session_token_klass = UserSessionToken
17
+ end
18
+ end
19
+ end
20
+
21
+ def initialize(request_facade:, session_authorization:)
22
+ @api = request_facade
23
+ @authorization = session_authorization
24
+ end
25
+
26
+ def login_cobrand(login_name:, password:)
27
+ @api.login_cobrand(login_name: login_name,
28
+ password: password).tap do |res|
29
+ body = JSON.parse(res.body)
30
+ token = body.dig('session', 'cobSession')
31
+ @authorization.authorize_cobrand(@cobrand_session_token_klass.new(token))
32
+ @api.authorize(@authorization)
33
+ end
34
+ end
35
+
36
+ def login_user(login_name:, password:)
37
+ @api.login_user(login_name: login_name,
38
+ password: password).tap do |res|
39
+ body = JSON.parse(res.body)
40
+ token = body.dig('user', 'session', 'userSession')
41
+ @authorization.authorize_user(@user_session_token_klass.new(token))
42
+ @api.authorize(@authorization)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,25 @@
1
+ require_relative 'session_tokens'
2
+
3
+ module Coyodlee
4
+ class SessionAuthorization
5
+ def initialize(cobrand_session_token: NullSessionToken.new, user_session_token: NullSessionToken.new)
6
+ @cobrand_session_token = cobrand_session_token
7
+ @user_session_token = user_session_token
8
+ end
9
+
10
+ def authorize_cobrand(cobrand_session_token)
11
+ @cobrand_session_token = cobrand_session_token
12
+ end
13
+
14
+ def authorize_user(user_session_token)
15
+ @user_session_token = user_session_token
16
+ end
17
+
18
+ def to_s
19
+ [@cobrand_session_token, @user_session_token]
20
+ .select { |t| t.present? }
21
+ .map(&:to_s)
22
+ .join(',')
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,39 @@
1
+ module Coyodlee
2
+ class NullSessionToken
3
+ def present?
4
+ false
5
+ end
6
+
7
+ def to_s
8
+ ''
9
+ end
10
+ end
11
+
12
+ class UserSessionToken
13
+ def initialize(token='')
14
+ @token = token
15
+ end
16
+
17
+ def present?
18
+ !@token.empty?
19
+ end
20
+
21
+ def to_s
22
+ @token.empty? ? '' : "userSession=#{@token}"
23
+ end
24
+ end
25
+
26
+ class CobrandSessionToken
27
+ def initialize(token='')
28
+ @token = token
29
+ end
30
+
31
+ def present?
32
+ !@token.empty?
33
+ end
34
+
35
+ def to_s
36
+ @token.empty? ? '' : "cobSession=#{@token}"
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,26 @@
1
+ module Coyodlee
2
+ class UriBuilder
3
+ attr_reader :host
4
+
5
+ def initialize(host:, cobrand: 'restserver', version: 'v1')
6
+ @cobrand = cobrand
7
+ @version = version
8
+ @host = host
9
+ @path_prefix = 'ysl'
10
+ end
11
+
12
+ def build(resource_path, query: nil, use_ssl: true)
13
+ uri_builder = use_ssl ? URI::HTTPS : URI::HTTP
14
+ revised_resource_path = if resource_path.start_with?('/')
15
+ resource_path.slice(1..-1)
16
+ else
17
+ resource_path
18
+ end
19
+ path = [@path_prefix, @cobrand, @version, revised_resource_path]
20
+ .compact
21
+ .join('/')
22
+ .prepend('/')
23
+ uri_builder.build(host: @host, path: path, query: query)
24
+ end
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module Coyodlee
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coyodlee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Dyba
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-12-27 00:00:00.000000000 Z
11
+ date: 2018-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rest-client
14
+ name: yajl-ruby
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: 1.3.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: 1.3.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +136,62 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: '1.8'
139
+ - !ruby/object:Gem::Dependency
140
+ name: dotenv
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: pry-byebug
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: byebug
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: pry
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - ">="
186
+ - !ruby/object:Gem::Version
187
+ version: '0'
188
+ type: :development
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - ">="
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
139
195
  description: A Ruby wrapper client for Envestnet's Yodlee API. For details about the
140
196
  API endpoints, sign in to https://developer.yodlee.com
141
197
  email:
@@ -154,13 +210,20 @@ files:
154
210
  - bin/console
155
211
  - bin/setup
156
212
  - coyodlee.gemspec
213
+ - examples/demo.rb
157
214
  - lib/coyodlee.rb
158
- - lib/coyodlee/client.rb
159
- - lib/coyodlee/http_wrapper.rb
160
- - lib/coyodlee/sessions.rb
161
- - lib/coyodlee/sessions/cobrand_session.rb
162
- - lib/coyodlee/sessions/user_session.rb
163
- - lib/coyodlee/utils.rb
215
+ - lib/coyodlee/connection.rb
216
+ - lib/coyodlee/facades.rb
217
+ - lib/coyodlee/facades/accounts_facade.rb
218
+ - lib/coyodlee/facades/cobrand_facade.rb
219
+ - lib/coyodlee/facades/holdings_facade.rb
220
+ - lib/coyodlee/facades/provider_accounts_facade.rb
221
+ - lib/coyodlee/facades/transactions_facade.rb
222
+ - lib/coyodlee/facades/user_facade.rb
223
+ - lib/coyodlee/session.rb
224
+ - lib/coyodlee/session_authorization.rb
225
+ - lib/coyodlee/session_tokens.rb
226
+ - lib/coyodlee/uri_builder.rb
164
227
  - lib/coyodlee/version.rb
165
228
  homepage: https://github.com/pennymac/coyodlee
166
229
  licenses:
@@ -182,7 +245,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
182
245
  version: '0'
183
246
  requirements: []
184
247
  rubyforge_project:
185
- rubygems_version: 2.5.2
248
+ rubygems_version: 2.7.3
186
249
  signing_key:
187
250
  specification_version: 4
188
251
  summary: A Ruby wrapper client for Envestnet's Yodlee API