coyodlee 0.1.0 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: ba6d4efb440932238cd8a92bf8f85c0d5e875bd6
4
- data.tar.gz: 9359ce7258b12ae59b71e42b9168ef3930632940
2
+ SHA256:
3
+ metadata.gz: 40db7ffc3fa44618447c72116d9cd62c954a4f02541784ada16d4d29f5104d14
4
+ data.tar.gz: 2f2915b89732be626884d3b6eec01edb867f5f7899b2524faec8183ddd71cfdf
5
5
  SHA512:
6
- metadata.gz: f1d0518db712d34968cd30e0038aff7d02f6e55f1b070e309fce5ad9c2aa6fd2fd624fa192a17cef982757992e1ea83b56757051987f785450cd7406e9e6ea6f
7
- data.tar.gz: 8452e4f1ed34d277b49d7d344c0ee7d7c4b58654eab8eb53ddbe70c24f7ea53138f8c1c27b576c5674540166345d7d299cef9b4d493a79a3f680e16932b9a206
6
+ metadata.gz: a950639030248a83ed8277763b6f2c4f91fccfd6bd350e692eb3ecbcca5395a558feca0153d6d86dd10aaeb04d783668fb47b174b07eb3cf84d1c4abea4edcf9
7
+ data.tar.gz: ee77c734c28abf4b844ad6ab3f2c95f51b754a627a5251ea54e6fbe0e6075e29ea939ab7d92a5444c3268800bdb8fc38822338aee1a2e60f6d2611a82e295ae5
data/.travis.yml CHANGED
@@ -1,9 +1,18 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.2.3
3
+ - 2.3
4
+ - 2.4
5
+ - 2.5
6
+ before_script:
7
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
8
+ - chmod +x ./cc-test-reporter
9
+ - ./cc-test-reporter before-build
4
10
  before_install: gem install bundler -v 1.11.2
11
+ after_script:
12
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
5
13
  env:
6
14
  global:
15
+ - CC_TEST_REPORTER_ID: 97fb3bdc3bc9764c19651246fad6c2a798a83d410f1eab0a66e467e9c2b2ce79
7
16
  - secure: uUfBk39flmbyd21ayyqVP4pm1FS7h18joIIAF+547CV6+6Ke7BG3DxR+ivIDG1MVXZNErQ+U5zRAcnG0kWYwbJ1bcFksJYpxR6hN+6MY6SDW7G2oN/Ono6DqHE/tnzrL+/Ax5ui0Yw/W6258tlgm1dj3K28/lmmoK1qbyNqeL5bf+PoggNSIk/DQIHotJsWR4QEIXQM077+PGRfm9TIBE9hU77Cphmu0jPk9NTUHdQHGo6SwDfl2X5CO1Qfp43cn0X7Giir3+tHWZZo8bdDmhDKiTVrLpCFvD6tXHzvU5zhyElUAM4jdPH+jXpmLSK+OwEJispCxHgt6Zd9RELEYMRidlInuxrqYrwikc55shuiIHRq7Sf0JmB2q+sj70+1bNSrJlfPZ6GK3+Ye+HIEGTf8K4B6PUZDrEsPb4fJiaq1kjB5Z5+s3olVqnl0oVIVWk6Pw6qhn0UgVwFMP26eIua7lGo1g9+DqhtZ9WFhBcLDe5f10M7YfaXgDhIW0yXz7Emqip+llpMg//5R2sSQy48M6jjMX4wDcXVrnYFSZAtUno6unxddctdqXQHDpwr60uEyeyb3j5xJp7LUKs7CkOGrfyPqmljD83Ibayh/yBXelme2l6esElWOUVUScuBint5AiPDrnhbApdUGTYbGDPzB4Et3wwfd4ddePTh8z16M=
8
17
  - secure: t/ro3jAcnKuJCXqzvbxrukbcwD02+CZIUS6tUXBWexxowbvpC+el60ZLP+q9VD40hBy8SwFf7ukdmtunNRXBUmhPb/NhyBRmtcaHlrvReYV1d8AJX/tGtcuv4OirfcXj45u0mEOtUdDTYYvbbv3cecoKPLtjaZcLct2mwoTh0tcTei0qs/4fZNOm5yGrIVIO5lxyrnGTmWKbSceK9FAwz7FiZ108DrG8QApQNmpXS/5P6G4cnpsilRDXt0p4zMdi/QOgPw7dfANU5K1Hwg7cryBsqk4JwN0mJ6AWTkv4A8THuVAmDzojyqH0Su151HecNu5GOfsXiHzavkvQTdO+s00AkqkyZkzCq8KDx8DxeK363iw/gSVztWv3Q77oDhZ6UyOkPgpzYPbMrl9d2+Z/fC2CrSiVKCLnqjdSbSdhOEFgmc3LTSM7kuGEwtwMGPARmjrC7NVynol4Ji6YWAopO/B79dNNBUSAZRt8yJReN26sIZ3bTqqqIhqzZWvPWWRtYkS7TMu3djqb0ey/0rPI35i7esiIrD26XT+invuehZhRJ+qOikscVjwKSw5wVGoWODOELcL9lF5zccQQDp8xtPvQN8818wekGbBibnrnQ98kzVpR7C1Dl0tEM+ZcdfReC/6a5xL8x1/pS+lGvxN5xqMQFbejc6rKTWJjplUkPY4=
9
18
  - secure: emoFvYI3rOkbj8YOOgmLkT7WQtSn/f/D5JTPZ1nl41P8/xaQLGFaa9aSYV3AqsZOER+hDEplek1DFPZNBvgTUND09hpS6qDa9oMGxzJlMxokZIMdHfFBMsb9eXdsvHnG6vilejQ7ic9EfISv4SqwoZmr6KMGBX5o17REtTHwgzuV/aMozhJi5agjWUuLhGFPPTg/fhqLqBZOXCiQjkdhtDkC4PX8FNnwzXWnjn/CuyTZvhapFOftfh76n72FLhMfCpOi3FZnkFcpSvs38uFv7RS9d0ci0XuNFzrhaUbr8WsB+nz1rGKdRUP9RhaU2OJPWmGcGfBeYApG8DhE6dMUJK3k+1X4aPkDjEYm+/xWTjD/2jbRjqvLJJ4B9S75GRz6O3zV4KMc9GkgQWXx+MzCkkc72TsL3XjSCxeqQMvQ8mjl7GFgfeZw5UFiMaCcQzDHECphBAt990rGhwXq0B2eEluOtHo2Kkh7FGvPkCOiMjTdlgNpe2BAh+sf+Bn+/rZ25iFIAWF8IDlfPJc+QiHLtZntwI0afzjWs+2TjDFj3PQ+Shx/Pshk8PXdaPUEP0t7HyLpiWOuyeJaG8O96W/cX51fopmDhlRaVREcpAaJwZ9AXoYSHGXFL9+027L3obG4PYyBF1goBcoe1BZKsLRjGxSftKPmXgCQnBQR3FPYgtM=
data/Gemfile CHANGED
@@ -1,5 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
3
  gem 'yajl-ruby', require: 'yajl'
4
+ gem 'simplecov', require: false, group: :test
4
5
 
5
6
  gemspec
data/README.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Coyodlee
2
- [![Build Status](https://travis-ci.com/pennymac/coyodlee.svg?token=KvBtKQs616ELBMQxp2n7&branch=master)](https://travis-ci.com/pennymac/coyodlee)
2
+ [![Gem Version](https://badge.fury.io/rb/coyodlee.svg)](https://badge.fury.io/rb/coyodlee)
3
+ [![Build Status](https://travis-ci.org/pennymac/coyodlee.svg?branch=master)](https://travis-ci.org/pennymac/coyodlee)
3
4
  [![Maintainability](https://api.codeclimate.com/v1/badges/f36b069069540b196fbd/maintainability)](https://codeclimate.com/github/pennymac/coyodlee/maintainability)
5
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/f36b069069540b196fbd/test_coverage)](https://codeclimate.com/github/pennymac/coyodlee/test_coverage)
6
+
7
+ ## Status
8
+
9
+ The software in this repository is in an early alpha state. This repository is currently not accepting pull requests or responding to issues. If there is a bug in the code or a feature you'd like to have, feel free to fork the repository.
10
+
11
+ ## Requirements
12
+
13
+ This library works with Ruby 2.3+.
4
14
 
5
15
  ## Setup
6
16
 
@@ -8,20 +18,10 @@ In sandbox mode, point the ```base_url``` to ```https://developer.api.yodlee.com
8
18
 
9
19
  Export the following environment variables:
10
20
 
11
- <table>
12
- <tr>
13
- <td><strong>Environment Variables</strong></td>
14
- <td><strong>Description</td>
15
- </tr>
16
- <tr>
17
- <td>YODLEE_COBRAND_LOGIN</td>
18
- <td>The Yodlee cobrand login</td>
19
- <tr/>
20
- <tr>
21
- <td>YODLEE_COBRAND_PASSWORD</td>
22
- <td>The Yodlee cobrand password</td>
23
- <tr/>
24
- </table>
21
+ | Environment Variable | Description |
22
+ |---------------------------|---------------------------------------|
23
+ | YODLEE\_COBRAND\_LOGIN | The login of your assigned cobrand |
24
+ | YODLEE\_COBRAND\_PASSWORD | The password of your assigned cobrand |
25
25
 
26
26
  ## Installation
27
27
 
@@ -41,34 +41,33 @@ Or install it yourself as:
41
41
 
42
42
  ## Usage
43
43
 
44
- This API exposes a ```setup``` method:
44
+ The API remains in flux. Here is the current way to interact with Yodlee:
45
45
 
46
46
  ``` ruby
47
47
  require 'coyodlee'
48
48
 
49
49
  Coyodlee.setup do |config|
50
- config.base_url = ENV['YODLEE_BASE_URL']
50
+ config.host = 'developer.api.yodlee.com'
51
51
  config.cobrand_login = ENV['YODLEE_COBRAND_LOGIN']
52
52
  config.cobrand_password = ENV['YODLEE_COBRAND_PASSWORD']
53
53
  end
54
54
 
55
- require 'coyodlee/sessions'
55
+ require 'coyodlee/connection'
56
+ require 'coyodlee/session'
56
57
 
57
- cob_session = Coyodlee::Sessions::CobrandSession.new
58
- cob_session.login login_name: Coyodlee.cobrand_login, password: Coyodlee.cobrand_password
58
+ conn = Coyodlee::Connection.create
59
59
 
60
- user_session = Coyodlee::Sessions::UserSession.new(cobrand_session: cob_session)
61
- user_session.login login_name: 'yodlee-test-user-login', password: 'yodlee-test-user-password'
60
+ resp = conn.start do |api|
61
+ session = Coyodlee::Session.create(api)
62
+ session.cobrand_login login_name: Coyodlee.cobrand_login,
63
+ password: Coyodlee.cobrand_password
64
+ session.user_login login_name: ENV['YODLEE_USER_1_LOGIN_NAME'],
65
+ password: ENV['YODLEE_USER_1_PASSWORD']
62
66
 
63
- require 'coyodlee/client'
64
-
65
- client = Coyodlee::Client.new(user_session)
66
- resp = client.get_accounts
67
-
68
- require 'json'
67
+ api.get_accounts
68
+ end
69
69
 
70
- # Print all accounts for the test user
71
- puts JSON.parse(resp.body)
70
+ puts resp
72
71
  ```
73
72
 
74
73
  ## Testing
data/coyodlee.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "rest-client", "~> 2.0"
22
+ spec.add_dependency "yajl-ruby", "~> 1.3.1"
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.11"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
@@ -29,4 +29,8 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "yard", '~> 0.9'
30
30
  spec.add_development_dependency "activesupport", '5.1'
31
31
  spec.add_development_dependency "travis", '~> 1.8'
32
+ spec.add_development_dependency 'dotenv'
33
+ spec.add_development_dependency 'pry-byebug'
34
+ spec.add_development_dependency 'byebug'
35
+ spec.add_development_dependency 'pry'
32
36
  end
data/examples/demo.rb ADDED
@@ -0,0 +1,23 @@
1
+ require 'coyodlee'
2
+ require 'coyodlee/connection'
3
+ require 'coyodlee/session'
4
+ require 'dotenv/load'
5
+ require 'pry'
6
+
7
+ Coyodlee.setup do |config|
8
+ config.host = 'developer.api.yodlee.com'
9
+ config.cobrand_login = ENV['YODLEE_COBRAND_LOGIN']
10
+ config.cobrand_password = ENV['YODLEE_COBRAND_PASSWORD']
11
+ end
12
+
13
+ conn = Coyodlee::Connection.create
14
+
15
+ resp = conn.start do |api|
16
+ session = Coyodlee::Session.create(api)
17
+ session.login_cobrand login_name: Coyodlee.cobrand_login,
18
+ password: Coyodlee.cobrand_password
19
+ session.login_user login_name: ENV['YODLEE_USER_1_LOGIN_NAME'],
20
+ password: ENV['YODLEE_USER_1_PASSWORD']
21
+ end
22
+
23
+ puts resp
data/lib/coyodlee.rb CHANGED
@@ -1,15 +1,16 @@
1
1
  require_relative 'coyodlee/version'
2
- require_relative 'coyodlee/http_wrapper'
3
- require 'json'
4
2
  require 'yajl'
5
3
 
6
4
  # The global Yodlee configuration object
7
5
  module Coyodlee
8
6
 
9
7
  class << self
10
- # The base url Yodlee provides for your cobrand
11
- # @return [String] The base url Yodlee provides for your cobrand
12
- attr_accessor :base_url
8
+ # The name of the Yodlee API host
9
+ # @return [String] The name of the Yodlee API host
10
+ attr_accessor :host
11
+ # The cobrand name
12
+ # @return [String] The cobrand name
13
+ attr_accessor :cobrand_name
13
14
  # The login of your cobrand
14
15
  # @return [String] The login of your cobrand
15
16
  attr_accessor :cobrand_login
@@ -0,0 +1,207 @@
1
+ require_relative 'uri_builder'
2
+ require_relative 'facades'
3
+ require 'forwardable'
4
+ require 'net/http'
5
+
6
+ module Coyodlee
7
+ class RequestBuilder
8
+ extend Forwardable
9
+
10
+ def initialize(uri_builder)
11
+ @uri_builder = uri_builder
12
+ @session_authorization = nil
13
+ end
14
+
15
+ def_delegators :@uri_builder, :host
16
+
17
+ def authorize(session_authorization)
18
+ @session_authorization = session_authorization
19
+ end
20
+
21
+ def build(method, resource_path, headers: {}, params: {}, body: nil)
22
+ q = params.empty? ? nil : build_query(params)
23
+ uri = @uri_builder.build(resource_path, query: q)
24
+ http_constructor(method).new(uri).tap do |req|
25
+ add_headers(req, headers)
26
+ req.body = body if body
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def build_query(params)
33
+ params
34
+ .to_a
35
+ .map { |keyval| keyval.join('=') }
36
+ .join('&')
37
+ end
38
+
39
+ def add_headers(req, headers)
40
+ if @session_authorization
41
+ headers['Authorization'] = @session_authorization.to_s
42
+ end
43
+
44
+ headers.each do |key, value|
45
+ req[key] = value
46
+ end
47
+ end
48
+
49
+ def http_constructor(method)
50
+ case method
51
+ when :get
52
+ Net::HTTP::Get
53
+ when :post
54
+ Net::HTTP::Post
55
+ when :put
56
+ Net::HTTP::Put
57
+ when :delete
58
+ Net::HTTP::Delete
59
+ end
60
+ end
61
+ end
62
+
63
+ class RequestFacade
64
+ attr_reader :http
65
+ attr_reader :request_builder
66
+
67
+ extend Forwardable
68
+ include Facades
69
+
70
+ def initialize(http:, request_builder:)
71
+ @http = http
72
+ @request_builder = request_builder
73
+ @user_facade = UserFacade.new(self)
74
+ @cobrand_facade = CobrandFacade.new(self)
75
+ @accounts_facade = AccountsFacade.new(self)
76
+ @transactions_facade = TransactionsFacade.new(self)
77
+ @holdings_facade = HoldingsFacade.new(self)
78
+ @provider_accounts_facade = ProviderAccountsFacade.new(self)
79
+ end
80
+
81
+ def_delegators :@request_builder, :authorize, :build
82
+
83
+ def_delegator :@user_facade, :login, :login_user
84
+ def_delegator :@user_facade, :logout, :logout_user
85
+ def_delegator :@user_facade, :register, :register_user
86
+ def_delegator :@user_facade, :unregister, :unregister_user
87
+
88
+ def_delegator :@cobrand_facade, :login, :login_cobrand
89
+ def_delegator :@cobrand_facade, :logout, :logout_cobrand
90
+ def_delegator :@cobrand_facade, :public_key, :cobrand_public_key
91
+
92
+ def_delegator :@accounts_facade, :all, :accounts
93
+ def_delegator :@accounts_facade, :details, :account_details
94
+ def_delegator :@accounts_facade, :update, :update_account
95
+ def_delegator :@accounts_facade, :delete, :delete_account
96
+ def_delegator :@accounts_facade, :add_manually, :add_manual_account
97
+ def_delegator :@accounts_facade, :investment_options, :investment_options
98
+ def_delegator :@accounts_facade, :historical_balances, :historical_balances
99
+
100
+ def_delegator :@holdings_facade, :all, :holdings
101
+ def_delegators :@holdings_facade, :extended_securities_info, :holding_type_list, :asset_classification_list
102
+
103
+ def_delegator :@transactions_facade, :count, :transactions_count
104
+ def_delegator :@transactions_facade, :all, :transactions
105
+ def_delegator :@transactions_facade, :categorization_rules, :transaction_categorization_rules
106
+ def_delegator :@transactions_facade, :create_categorization_rule, :create_transaction_categorization_rule
107
+ def_delegator :@transactions_facade, :update_categorization_rule, :update_transaction_categorization_rule
108
+ def_delegator :@transactions_facade, :delete_categorization_rule, :delete_transaction_categorization_rule
109
+ def_delegator :@transactions_facade, :run_categorization_rule, :run_transaction_categorization_rule
110
+ def_delegator :@transactions_facade, :run_all_categorization_rule, :run_all_transaction_categorization_rule
111
+ def_delegator :@transactions_facade, :update, :update_transaction
112
+ def_delegator :@transactions_facade, :category_list, :transaction_category_list
113
+ def_delegator :@transactions_facade, :create_category, :create_transaction_category
114
+ def_delegator :@transactions_facade, :update_category, :update_transaction_category
115
+ def_delegator :@transactions_facade, :delete_category, :delete_transaction_category
116
+
117
+ def_delegator :@provider_accounts_facade, :add, :add_provider_account
118
+ def_delegator :@provider_accounts_facade, :details, :provider_account_details
119
+ def_delegator :@provider_accounts_facade, :delete, :delete_provider_account
120
+ def_delegator :@provider_accounts_facade, :update, :update_provider_account
121
+ def_delegator :@provider_accounts_facade, :verify, :verify_provider_account
122
+ def_delegator :@provider_accounts_facade, :verification_status, :provider_account_verification_status
123
+
124
+ def providers(params={})
125
+ headers = { 'Accept' => 'application/json' }
126
+ req = @request_builder.build(:get, "providers", headers: headers, params: params)
127
+ execute(req)
128
+ end
129
+
130
+ def provider_details(provider_id:, provider_account_id:)
131
+ headers = { 'Accept' => 'application/json' }
132
+ params = { 'providerAccountId' => provider_account_id }
133
+ req = @request_builder.build(:get, "providers/#{provider_id}", headers: headers, params: params)
134
+ execute(req)
135
+ end
136
+
137
+ def statements(params={})
138
+ headers = { 'Accept' => 'application/json' }
139
+ req = @request_builder.build(:get, 'statements', headers: headers, params: params)
140
+ execute(req)
141
+ end
142
+
143
+ def transaction_summary(group_by:, params: {})
144
+ params['groupBy'] = group_by
145
+ headers = { 'Accept' => 'application/json' }
146
+ req = @request_builder.build(:get, 'derived/transactionSummary', headers: headers, params: params)
147
+ execute(req)
148
+ end
149
+
150
+ def holding_summary(params={})
151
+ headers = { 'Accept' => 'application/json' }
152
+ req = @request_builder.build(:get, 'derived/holdingSummary', headers: headers, params: params)
153
+ execute(req)
154
+ end
155
+
156
+ def networth_summary(params={})
157
+ headers = { 'Accept' => 'application/json' }
158
+ req = @request_builder.build(:get, 'derived/networth', headers: headers, params: params)
159
+ execute(req)
160
+ end
161
+
162
+ def extract_events(event_name:, from_date:, to_date:)
163
+ params = {
164
+ 'eventName' => event_name,
165
+ 'fromDate' => fromDate,
166
+ 'toDate' => toDate
167
+ }
168
+ headers = { 'Accept' => 'application/json' }
169
+ req = @request_builder.build(:get, 'dataExtracts/events', headers: headers, params: params)
170
+ execute(req)
171
+ end
172
+
173
+ def user_data(login_name:, from_date:, to_date:)
174
+ params = {
175
+ 'loginName' => login_name,
176
+ 'fromDate' => fromDate,
177
+ 'toDate' => toDate
178
+ }
179
+ headers = { 'Accept' => 'application/json' }
180
+ req = @request_builder.build(:get, 'dataExtracts/userData', headers: headers, params: params)
181
+ execute(req)
182
+ end
183
+
184
+ def execute(req)
185
+ http.request(req)
186
+ end
187
+ end
188
+
189
+ class Connection
190
+ class << self
191
+ def create
192
+ new RequestBuilder.new(UriBuilder.new(host: Coyodlee.host))
193
+ end
194
+ end
195
+
196
+ def initialize(request_builder)
197
+ @request_builder = request_builder
198
+ end
199
+
200
+ def start(&block)
201
+ Net::HTTP.start(@request_builder.host, use_ssl: true) do |http|
202
+ yield RequestFacade.new(http: http,
203
+ request_builder: @request_builder)
204
+ end
205
+ end
206
+ end
207
+ end
@@ -0,0 +1,6 @@
1
+ require_relative 'facades/accounts_facade'
2
+ require_relative 'facades/user_facade'
3
+ require_relative 'facades/cobrand_facade'
4
+ require_relative 'facades/transactions_facade'
5
+ require_relative 'facades/holdings_facade'
6
+ require_relative 'facades/provider_accounts_facade'
@@ -0,0 +1,52 @@
1
+ module Coyodlee
2
+ module Facades
3
+ class AccountsFacade
4
+ def initialize(request_facade)
5
+ @request_facade = request_facade
6
+ end
7
+
8
+ def all
9
+ headers = { 'Accept' => 'application/json' }
10
+ req = @request_facade.build(:get, 'accounts', headers: headers)
11
+ @request_facade.execute(req)
12
+ end
13
+
14
+ def details(account_id:, container:)
15
+ headers = { 'Accept' => 'application/json' }
16
+ params = { container: container }
17
+ req = @request_facade.build(:get, "accounts/#{account_id}", params: params, headers: headers)
18
+ @request_facade.execute(req)
19
+ end
20
+
21
+ def update(account_id:, body:)
22
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
23
+ req = @request_facade.build(:put, "accounts/#{account_id}", headers: headers, body: body.to_json)
24
+ @request_facade.execute(req)
25
+ end
26
+
27
+ def delete(account_id:)
28
+ headers = { 'Accept' => 'application/json' }
29
+ req = @request_facade.build(:delete, "accounts/#{account_id}", headers: headers)
30
+ @request_facade.execute(req)
31
+ end
32
+
33
+ def add_manually(body:)
34
+ headers = { 'Accept' => 'application/json', 'Content-Type' => 'application/json' }
35
+ req = @request_facade.build(:post, 'accounts', headers: headers, body: body.to_json)
36
+ @request_facade.execute(req)
37
+ end
38
+
39
+ def investment_options(params={})
40
+ headers = { 'Accept' => 'application/json' }
41
+ req = @request_facade.build(:get, 'accounts/investmentPlan/investmentOptions', headers: headers, params: params)
42
+ @request_facade.execute(req)
43
+ end
44
+
45
+ def historical_balances(params={})
46
+ headers = { 'Accept' => 'application/json' }
47
+ req = @request_facade.build(:get, 'accounts/historicalBalances', headers: headers, params: params)
48
+ @request_facade.execute(req)
49
+ end
50
+ end
51
+ end
52
+ end