plaid 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +7 -10
- data/UPGRADING.md +15 -0
- data/lib/plaid/institution.rb +101 -88
- data/lib/plaid/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4f8aeb4ddef4c58a7a03b9902450a8b87fc82296
|
4
|
+
data.tar.gz: d9b2daf9205549d39fa5a4f25700ddfae73cf6d7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51e64249b4daad06dd8dd03d648b721204d3383ae493289b1dccf85e80ec2fe5892a83b388d4ec8ac2b417dd47732dafb1f3658a3cfb790947cb94b1866d2aaa
|
7
|
+
data.tar.gz: 2ab1e1bb607cb87ddaaa3a0adc52946b18dbac5e4112f8db945226985fafd2b93ef10d763eba101cd0ac2fea688c8cec455e660caacab9b8f0972a307d1135f2
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -199,15 +199,13 @@ cat = Plaid::Category.get('17001013') # A single category by its ID
|
|
199
199
|
|
200
200
|
### Institutions
|
201
201
|
|
202
|
-
Financial institution information is available via `Plaid::Institution
|
202
|
+
Financial institution information is available via `Plaid::Institution`.
|
203
203
|
|
204
204
|
```ruby
|
205
|
-
insts = Plaid::Institution.all
|
205
|
+
insts = Plaid::Institution.all(count: 20, offset: 20) # A page
|
206
206
|
inst = Plaid::Institution.get('5301a93ac140de84910000e0') # A single institution by its ID
|
207
207
|
|
208
|
-
|
209
|
-
ltis = Plaid::LongTailInstitution.all(count: 20, offset: 20) # A page
|
210
|
-
res = Plaid::LongTailInstitution.search(query: 'c') # Lookup by name
|
208
|
+
res = Plaid::Institution.search(query: 'c') # Lookup by name
|
211
209
|
```
|
212
210
|
|
213
211
|
### Webhooks
|
@@ -281,8 +279,8 @@ user1 = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good')
|
|
281
279
|
# Api user (using api client)
|
282
280
|
user2 = Plaid::User.create(:connect, 'wells', 'plaid_test', 'plaid_good', client: api)
|
283
281
|
|
284
|
-
# Lookup
|
285
|
-
res = Plaid::
|
282
|
+
# Lookup an institution in production
|
283
|
+
res = Plaid::Institution.search(query: 'c', client: api)
|
286
284
|
```
|
287
285
|
|
288
286
|
The `client` option can be passed to the following methods:
|
@@ -294,9 +292,8 @@ The `client` option can be passed to the following methods:
|
|
294
292
|
* `Category.get`
|
295
293
|
* `Institution.all`
|
296
294
|
* `Institution.get`
|
297
|
-
* `
|
298
|
-
* `
|
299
|
-
* `LongTailInstitution.get`
|
295
|
+
* `Institution.search`
|
296
|
+
* `Institution.search_by_id`
|
300
297
|
|
301
298
|
### Errors
|
302
299
|
|
data/UPGRADING.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## Upgrading from 2.x.x to 3.0.0
|
2
|
+
|
3
|
+
Version 3.0.0 makes `Plaid::Institution` use new `institutions/all` endpoint
|
4
|
+
of Plaid API which unites "native" and "long tail" institutions.
|
5
|
+
`Plaid::LongTailInstitution` class is removed, its functionality is
|
6
|
+
concentrated in `Plaid::Institution`.
|
7
|
+
|
8
|
+
Use `Plaid::Institution.all` instead of `Plaid::LongTailInstitution.all` (the
|
9
|
+
semantics is the same, with added products param).
|
10
|
+
|
11
|
+
Use `Plaid::Institution.search` instead of `Plaid::LongTailInstitution.search`.
|
12
|
+
|
13
|
+
Use `Plaid::Institution.search_by_id` instead of `Plaid::LongTailInstitution.get`.
|
14
|
+
|
15
|
+
|
1
16
|
## Upgrading from 1.x to 2.0.0
|
2
17
|
|
3
18
|
Make sure you use Ruby 2.0 or higher.
|
data/lib/plaid/institution.rb
CHANGED
@@ -19,7 +19,7 @@ module Plaid
|
|
19
19
|
alias has_mfa? has_mfa
|
20
20
|
|
21
21
|
# Public: The Hash with MFA options available. E.g. ["code", "list",
|
22
|
-
# "questions(3)"].
|
22
|
+
# "questions(3)"]. In this case you are allowed to request a list of
|
23
23
|
# possible MFA options, use code-based MFA and questions MFA (there are 3
|
24
24
|
# questions).
|
25
25
|
attr_reader :mfa
|
@@ -60,38 +60,123 @@ module Plaid
|
|
60
60
|
# Public: Get information about the Financial Institutions currently
|
61
61
|
# supported by Plaid.
|
62
62
|
#
|
63
|
-
# Does a
|
63
|
+
# Does a POST /institutions/all call. The result is paginated (count,
|
64
|
+
# offset params) and filtered by products. If the products param is
|
65
|
+
# specified, only institutions which support all of the products mentioned
|
66
|
+
# will be returned.
|
64
67
|
#
|
65
|
-
#
|
66
|
-
#
|
68
|
+
# count - The Integer number of results to retrieve (default: 50).
|
69
|
+
# offset - The Integer number of results to skip forward from the
|
70
|
+
# beginning of the list (default: 0).
|
71
|
+
# products - The Array of product Symbols (see Plaid::PRODUCTS) or nil.
|
72
|
+
# E.g. [:connect, :auth]. Default: nil.
|
73
|
+
# client - The Plaid::Client instance used to connect
|
74
|
+
# (default: Plaid.client).
|
67
75
|
#
|
68
76
|
# Returns an Array of Institution instances.
|
69
|
-
def self.all(client: nil)
|
70
|
-
Connector.new(:institutions, client: client)
|
71
|
-
|
77
|
+
def self.all(count: 50, offset: 0, products: nil, client: nil)
|
78
|
+
conn = Connector.new(:institutions, :all, auth: true, client: client)
|
79
|
+
payload = {
|
80
|
+
count: count,
|
81
|
+
offset: offset
|
82
|
+
}
|
83
|
+
|
84
|
+
if products
|
85
|
+
payload[:products] = MultiJson.encode(Array(products))
|
72
86
|
end
|
87
|
+
|
88
|
+
resp = conn.post(payload)
|
89
|
+
|
90
|
+
Page.new(resp['total_count'],
|
91
|
+
resp['results'].map { |item| new(item) })
|
73
92
|
end
|
74
93
|
|
75
94
|
# Public: Get information about a given Financial Institution.
|
76
95
|
#
|
77
|
-
# Does a GET /institutions/:id call.
|
96
|
+
# Does a GET /institutions/all/:id call.
|
78
97
|
#
|
79
|
-
# id - the String institution ID (e.g. "5301a93ac140de84910000e0"
|
98
|
+
# id - the String institution ID (e.g. "5301a93ac140de84910000e0", or
|
99
|
+
# "ins_109263").
|
80
100
|
# client - The Plaid::Client instance used to connect
|
81
101
|
# (default: Plaid.client).
|
82
102
|
#
|
83
103
|
# Returns an Institution instance or raises Plaid::NotFoundError if
|
84
104
|
# institution with given id is not found.
|
85
105
|
def self.get(id, client: nil)
|
86
|
-
new Connector.new(
|
106
|
+
new Connector.new('institutions/all', id, client: client).get
|
107
|
+
end
|
108
|
+
|
109
|
+
# Public: Search Financial Institutions.
|
110
|
+
#
|
111
|
+
# query - The String search query to match against the full list of
|
112
|
+
# institutions. Partial matches are returned making this useful
|
113
|
+
# for autocompletion purposes.
|
114
|
+
# product - The Symbol product name to filter by, one of Plaid::PRODUCTS
|
115
|
+
# (e.g. :info, :connect, etc.). Only valid when query is
|
116
|
+
# specified. If nil, results are not filtered by product
|
117
|
+
# (default: nil).
|
118
|
+
# client - The Plaid::Client instance used to connect
|
119
|
+
# (default: Plaid.client).
|
120
|
+
#
|
121
|
+
# Returns an Array of SearchResultInstitution.
|
122
|
+
def self.search(query: nil, product: nil, client: nil)
|
123
|
+
raise ArgumentError, 'query must be specified' \
|
124
|
+
unless query.is_a?(String) && !query.empty?
|
125
|
+
|
126
|
+
payload = { q: query }
|
127
|
+
payload[:p] = product.to_s if product
|
128
|
+
|
129
|
+
resp = Connector.new('institutions/all', :search, client: client).get(payload)
|
130
|
+
resp.map { |inst| SearchResultInstitution.new(inst) }
|
131
|
+
end
|
132
|
+
|
133
|
+
# Public: Lookup a Financial Institution by ID.
|
134
|
+
#
|
135
|
+
# Does a GET /institutions/all/search call with id param.
|
136
|
+
#
|
137
|
+
# id - the String institution ID (e.g. 'bofa').
|
138
|
+
# client - The Plaid::Client instance used to connect
|
139
|
+
# (default: Plaid.client).
|
140
|
+
#
|
141
|
+
# Returns an SearchResultInstitution instance or nil if institution with
|
142
|
+
# given id is not found.
|
143
|
+
def self.search_by_id(id, client: nil)
|
144
|
+
client ||= Plaid.client
|
145
|
+
|
146
|
+
# If client_id is set, use it, no authentication otherwise
|
147
|
+
auth = client && !client.client_id.nil?
|
148
|
+
conn = Connector.new('institutions/all', :search, auth: auth, client: client)
|
149
|
+
resp = conn.get(id: id)
|
150
|
+
|
151
|
+
case resp
|
152
|
+
when Hash
|
153
|
+
SearchResultInstitution.new resp
|
154
|
+
when Array
|
155
|
+
raise 'Non-empty array returned by /institutions/all/search with id' \
|
156
|
+
unless resp.empty?
|
157
|
+
|
158
|
+
nil
|
159
|
+
else
|
160
|
+
raise 'Unexpected result returned by /institutions/all/search with id: ' \
|
161
|
+
"#{resp.inspect}"
|
162
|
+
end
|
87
163
|
end
|
88
164
|
end
|
89
165
|
|
90
|
-
|
166
|
+
# Public: A page of results.
|
167
|
+
class Page < Array
|
168
|
+
# Public: The total number of institutions in all pages
|
169
|
+
attr_reader :total_count
|
170
|
+
|
171
|
+
def initialize(total_count, records)
|
172
|
+
@total_count = total_count
|
173
|
+
super records
|
174
|
+
end
|
175
|
+
end
|
91
176
|
|
92
|
-
# Public: A class encapsulating information about a
|
93
|
-
#
|
94
|
-
class
|
177
|
+
# Public: A class encapsulating information about a Financial Institution
|
178
|
+
# supported by Plaid.
|
179
|
+
class SearchResultInstitution
|
95
180
|
# Public: The String ID of the institution. Same as type. E.g. "bofa".
|
96
181
|
attr_reader :id
|
97
182
|
|
@@ -137,7 +222,7 @@ module Plaid
|
|
137
222
|
# Public: ???.
|
138
223
|
attr_reader :name_break
|
139
224
|
|
140
|
-
# Internal: Initialize the
|
225
|
+
# Internal: Initialize the SearchResultInstitution instance.
|
141
226
|
def initialize(hash)
|
142
227
|
%w(id type name video logo).each do |f|
|
143
228
|
instance_variable_set "@#{f}", hash[f]
|
@@ -156,7 +241,7 @@ module Plaid
|
|
156
241
|
#
|
157
242
|
# Returns a String.
|
158
243
|
def inspect
|
159
|
-
"#<Plaid::
|
244
|
+
"#<Plaid::SearchResultInstitution id=#{id.inspect}, name=#{name.inspect}, " \
|
160
245
|
'...>'
|
161
246
|
end
|
162
247
|
|
@@ -164,77 +249,5 @@ module Plaid
|
|
164
249
|
#
|
165
250
|
# Returns a String.
|
166
251
|
alias to_s inspect
|
167
|
-
|
168
|
-
# Public: Lookup a "long tail" Financial Institution by ID.
|
169
|
-
#
|
170
|
-
# Does a GET /institutions/search call with id param.
|
171
|
-
#
|
172
|
-
# id - the String institution ID (e.g. 'bofa').
|
173
|
-
# client - The Plaid::Client instance used to connect
|
174
|
-
# (default: Plaid.client).
|
175
|
-
#
|
176
|
-
# Returns an Institution instance or nil if institution with given id is not
|
177
|
-
# found.
|
178
|
-
def self.get(id, client: nil)
|
179
|
-
client ||= Plaid.client
|
180
|
-
|
181
|
-
# If client_id is set, use it, no authentication otherwise
|
182
|
-
auth = client && !client.client_id.nil?
|
183
|
-
conn = Connector.new(:institutions, :search, auth: auth, client: client)
|
184
|
-
resp = conn.get(id: id)
|
185
|
-
|
186
|
-
case resp
|
187
|
-
when Hash
|
188
|
-
new resp
|
189
|
-
when Array
|
190
|
-
raise 'Non-empty array returned by /institutions/search with id' \
|
191
|
-
unless resp.empty?
|
192
|
-
|
193
|
-
nil
|
194
|
-
else
|
195
|
-
raise 'Unexpected result returned by /institutions/search with id: ' \
|
196
|
-
"#{resp.inspect}"
|
197
|
-
end
|
198
|
-
end
|
199
|
-
|
200
|
-
# Public: Get information about the "long tail" institutions supported
|
201
|
-
# by Plaid via partnerships.
|
202
|
-
#
|
203
|
-
# Does a POST /institutions/longtail call.
|
204
|
-
#
|
205
|
-
# count - The Integer number of results to retrieve (default: 50).
|
206
|
-
# offset - The Integer number of results to skip forward from the
|
207
|
-
# beginning of the list (default: 0).
|
208
|
-
# client - The Plaid::Client instance used to connect
|
209
|
-
# (default: Plaid.client).
|
210
|
-
#
|
211
|
-
# Returns an Array of LongTailInstitution instances.
|
212
|
-
def self.all(count: 50, offset: 0, client: nil)
|
213
|
-
conn = Connector.new(:institutions, :longtail, auth: true, client: client)
|
214
|
-
resp = conn.post(count: count, offset: offset)
|
215
|
-
resp.map { |lti_data| new(lti_data) }
|
216
|
-
end
|
217
|
-
|
218
|
-
# Public: Search "long tail" institutions.
|
219
|
-
#
|
220
|
-
# query - The String search query to match against the full list of
|
221
|
-
# institutions. Partial matches are returned making this useful
|
222
|
-
# for autocompletion purposes.
|
223
|
-
# product - The Symbol product name to filter by, one of Plaid::PRODUCTS
|
224
|
-
# (e.g. :info, :connect, etc.). Only valid when query is
|
225
|
-
# specified. If nil, results are not filtered by product
|
226
|
-
# (default: nil).
|
227
|
-
# client - The Plaid::Client instance used to connect
|
228
|
-
# (default: Plaid.client).
|
229
|
-
def self.search(query: nil, product: nil, client: nil)
|
230
|
-
raise ArgumentError, 'query must be specified' \
|
231
|
-
unless query.is_a?(String) && !query.empty?
|
232
|
-
|
233
|
-
payload = { q: query }
|
234
|
-
payload[:p] = product.to_s if product
|
235
|
-
|
236
|
-
resp = Connector.new(:institutions, :search, client: client).get(payload)
|
237
|
-
resp.map { |lti_data| new(lti_data) }
|
238
|
-
end
|
239
252
|
end
|
240
253
|
end
|
data/lib/plaid/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: plaid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Dashevskii
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -160,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
160
160
|
version: '0'
|
161
161
|
requirements: []
|
162
162
|
rubyforge_project:
|
163
|
-
rubygems_version: 2.
|
163
|
+
rubygems_version: 2.5.1
|
164
164
|
signing_key:
|
165
165
|
specification_version: 4
|
166
166
|
summary: Ruby bindings for Plaid
|