plaid 4.1.0 → 5.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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +23 -0
- data/.rubocop.yml +18 -0
- data/CHANGELOG.md +7 -0
- data/CONTRIBUTING.md +1 -1
- data/Gemfile.lock +58 -0
- data/README.md +50 -39
- data/Rakefile +7 -10
- data/lib/plaid.rb +40 -1
- data/lib/plaid/client.rb +72 -63
- data/lib/plaid/errors.rb +46 -41
- data/lib/plaid/middleware.rb +11 -6
- data/lib/plaid/models.rb +683 -0
- data/lib/plaid/products/accounts.rb +38 -35
- data/lib/plaid/products/auth.rb +32 -19
- data/lib/plaid/products/base_product.rb +69 -0
- data/lib/plaid/products/categories.rb +11 -8
- data/lib/plaid/products/credit_details.rb +31 -19
- data/lib/plaid/products/identity.rb +27 -11
- data/lib/plaid/products/income.rb +22 -11
- data/lib/plaid/products/institutions.rb +50 -28
- data/lib/plaid/products/item.rb +251 -136
- data/lib/plaid/products/processor.rb +104 -34
- data/lib/plaid/products/sandbox.rb +21 -20
- data/lib/plaid/products/transactions.rb +50 -45
- data/lib/plaid/version.rb +1 -1
- data/plaid.gemspec +10 -8
- metadata +51 -19
- data/circle.yml +0 -9
@@ -1,41 +1,33 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the Balance product.
|
3
|
-
class Balance
|
4
|
-
def initialize(client)
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
3
|
+
class Balance < BaseProduct
|
8
4
|
# Public: Get information about all available balances.
|
9
5
|
#
|
10
|
-
# Does a POST /accounts/balance/get call to get real-time balance
|
11
|
-
# accounts associated with the access_token's item
|
6
|
+
# Does a POST /accounts/balance/get call to get real-time balance
|
7
|
+
# information for all accounts associated with the access_token's item.
|
12
8
|
#
|
13
|
-
# access_token - access_token
|
14
|
-
#
|
15
|
-
#
|
9
|
+
# access_token - The String access_token for the item to fetch balances
|
10
|
+
# for.
|
11
|
+
# account_ids - The Array with specific account IDs to fetch balances for
|
12
|
+
# (optional).
|
13
|
+
# options - Additional options to be merged into the request
|
14
|
+
# (optional).
|
16
15
|
#
|
17
|
-
# Returns
|
16
|
+
# Returns the AccountsResponse object with accounts information.
|
18
17
|
def get(access_token, account_ids: nil, options: nil)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
options: options_payload }
|
25
|
-
@client.post_with_auth('accounts/balance/get', payload)
|
18
|
+
post_with_auth 'accounts/balance/get',
|
19
|
+
AccountsResponse,
|
20
|
+
build_payload(access_token,
|
21
|
+
account_ids: account_ids,
|
22
|
+
options: options)
|
26
23
|
end
|
27
24
|
end
|
28
25
|
|
29
26
|
# Public: Class used to call the Accounts product.
|
30
|
-
class Accounts
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
|
36
|
-
def initialize(client)
|
37
|
-
@client = client
|
38
|
-
end
|
27
|
+
class Accounts < BaseProduct
|
28
|
+
##
|
29
|
+
# Public: The Plaid::Balance product accessor.
|
30
|
+
subproduct :balance
|
39
31
|
|
40
32
|
# Public: Get information about all available accounts.
|
41
33
|
#
|
@@ -46,15 +38,26 @@ module Plaid
|
|
46
38
|
# account_ids - Specific account ids to fetch accounts for (optional)
|
47
39
|
# options - Additional options to be merged into API request
|
48
40
|
#
|
49
|
-
# Returns
|
41
|
+
# Returns the AccountsResponse object with accounts information.
|
50
42
|
def get(access_token, account_ids: nil, options: nil)
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
options: options_payload }
|
57
|
-
@client.post_with_auth('accounts/get', payload)
|
43
|
+
post_with_auth 'accounts/get',
|
44
|
+
AccountsResponse,
|
45
|
+
build_payload(access_token,
|
46
|
+
account_ids: account_ids,
|
47
|
+
options: options)
|
58
48
|
end
|
59
49
|
end
|
50
|
+
|
51
|
+
# Public: The response wrapper for /accounts/get and /accounts/balance/get.
|
52
|
+
class AccountsResponse < Models::BaseResponse
|
53
|
+
##
|
54
|
+
# :attr_reader:
|
55
|
+
# Public: The item: Plaid::Models::Item.
|
56
|
+
property :item, coerce: Models::Item
|
57
|
+
|
58
|
+
##
|
59
|
+
# :attr_reader:
|
60
|
+
# Public: The list of accounts: Array of Plaid::Models::Account.
|
61
|
+
property :accounts, coerce: Array[Models::Account]
|
62
|
+
end
|
60
63
|
end
|
data/lib/plaid/products/auth.rb
CHANGED
@@ -1,29 +1,42 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the Auth product.
|
3
|
-
class Auth
|
4
|
-
def initialize(client)
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
3
|
+
class Auth < BaseProduct
|
8
4
|
# Public: Get information about account and routing numbers for checking
|
9
|
-
# and savings accounts
|
5
|
+
# and savings accounts.
|
10
6
|
#
|
11
|
-
# Does a POST /auth/get call which returns high level account information
|
12
|
-
# account and routing numbers for checking and savings
|
7
|
+
# Does a POST /auth/get call which returns high level account information
|
8
|
+
# along with account and routing numbers for checking and savings
|
9
|
+
# accounts.
|
13
10
|
#
|
14
|
-
# access_token - access_token who's item to fetch Auth for
|
15
|
-
# account_ids - Specific account ids to fetch numbers for (optional)
|
16
|
-
# options - Additional options to merge into API request
|
11
|
+
# access_token - access_token who's item to fetch Auth for.
|
12
|
+
# account_ids - Specific account ids to fetch numbers for (optional).
|
13
|
+
# options - Additional options to merge into API request.
|
17
14
|
#
|
18
|
-
# Returns
|
15
|
+
# Returns AuthResponse.
|
19
16
|
def get(access_token, account_ids: nil, options: nil)
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
options: options_payload }
|
26
|
-
@client.post_with_auth('auth/get', payload)
|
17
|
+
post_with_auth 'auth/get',
|
18
|
+
AuthResponse,
|
19
|
+
build_payload(access_token,
|
20
|
+
account_ids: account_ids,
|
21
|
+
options: options)
|
27
22
|
end
|
28
23
|
end
|
24
|
+
|
25
|
+
# Public: Response wrapper for /accounts/get and /accounts/balance/get
|
26
|
+
class AuthResponse < Models::BaseResponse
|
27
|
+
##
|
28
|
+
# :attr_reader:
|
29
|
+
# Public: The list of accounts: Array of Plaid::Models::Account.
|
30
|
+
property :accounts, coerce: Array[Models::Account]
|
31
|
+
|
32
|
+
##
|
33
|
+
# :attr_reader:
|
34
|
+
# Public: The list of account numbers: Array of Plaid::Models::Number.
|
35
|
+
property :numbers, coerce: Array[Models::Number]
|
36
|
+
|
37
|
+
##
|
38
|
+
# :attr_reader:
|
39
|
+
# Public: The item: Plaid::Models::Item.
|
40
|
+
property :item, coerce: Models::Item
|
41
|
+
end
|
29
42
|
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module Plaid
|
2
|
+
# Internal: Support for subproduct metaprogramming
|
3
|
+
#
|
4
|
+
# Allows to write
|
5
|
+
#
|
6
|
+
# class SomeProduct
|
7
|
+
# subproduct :cool, Plaid::Cool
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# You may even skip the class part:
|
11
|
+
#
|
12
|
+
# class SomeProduct
|
13
|
+
# subproduct :foo_bar
|
14
|
+
# end
|
15
|
+
#
|
16
|
+
# will use Plaid::FooBar.
|
17
|
+
module SubproductMixin
|
18
|
+
def subproduct(name, klass = nil)
|
19
|
+
unless klass
|
20
|
+
class_name = name.to_s.split('_').map(&:capitalize).join
|
21
|
+
klass = Plaid.const_get(class_name)
|
22
|
+
end
|
23
|
+
|
24
|
+
define_method(name) do
|
25
|
+
ivar = "@#{name}"
|
26
|
+
|
27
|
+
if instance_variable_defined?(ivar)
|
28
|
+
instance_variable_get(ivar)
|
29
|
+
else
|
30
|
+
instance_variable_set(ivar, klass.new(client))
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Internal: The base class for all client products
|
37
|
+
class BaseProduct
|
38
|
+
def initialize(client)
|
39
|
+
@client = client
|
40
|
+
end
|
41
|
+
|
42
|
+
attr_reader :client
|
43
|
+
|
44
|
+
extend SubproductMixin
|
45
|
+
|
46
|
+
protected
|
47
|
+
|
48
|
+
# Internal: Build a simple payload with access_token, options, and
|
49
|
+
# account_ids.
|
50
|
+
def build_payload(access_token, account_ids: nil, options: nil)
|
51
|
+
options_payload = {}
|
52
|
+
options_payload[:account_ids] = account_ids unless account_ids.nil?
|
53
|
+
options_payload.merge!(options) unless options.nil?
|
54
|
+
|
55
|
+
{ access_token: access_token,
|
56
|
+
options: options_payload }
|
57
|
+
end
|
58
|
+
|
59
|
+
# Internal: Do a POST to API and capture it into a response object.
|
60
|
+
def post_with_auth(path, response_class, payload)
|
61
|
+
response_class.new(client.post_with_auth(path, payload))
|
62
|
+
end
|
63
|
+
|
64
|
+
# Internal: Do a POST to API and capture it into a response object.
|
65
|
+
def post_with_public_key(path, response_class, payload)
|
66
|
+
response_class.new(client.post_with_public_key(path, payload))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -1,18 +1,21 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the Categories product.
|
3
|
-
class Categories
|
4
|
-
def initialize(client)
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
3
|
+
class Categories < BaseProduct
|
8
4
|
# Public: Get information about all Plaid categories
|
9
5
|
#
|
10
6
|
# Does a POST /categories/get call to retrieve a list of all categories.
|
11
7
|
#
|
12
|
-
# Returns
|
8
|
+
# Returns the CategoriesResponse object with a list of categories.
|
13
9
|
def get
|
14
|
-
|
15
|
-
@client.post('categories/get', payload)
|
10
|
+
CategoriesResponse.new(client.post('categories/get', {}))
|
16
11
|
end
|
17
12
|
end
|
13
|
+
|
14
|
+
# Public: Response wrapper for /categories/get.
|
15
|
+
class CategoriesResponse < Models::BaseResponse
|
16
|
+
##
|
17
|
+
# :attr_reader:
|
18
|
+
# Public: Categories: Array of Plaid::Models::Category.
|
19
|
+
property :categories, coerce: Array[Models::Category]
|
20
|
+
end
|
18
21
|
end
|
@@ -1,28 +1,40 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the CreditDetails product.
|
3
|
-
class CreditDetails
|
4
|
-
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
8
|
-
# Public: Get information about all available credit_details
|
3
|
+
class CreditDetails < BaseProduct
|
4
|
+
# Public: Get information about all available credit_details.
|
9
5
|
#
|
10
|
-
# Does a POST /credit_details/get call which fetches credit details
|
11
|
-
#
|
6
|
+
# Does a POST /credit_details/get call which fetches credit details
|
7
|
+
# associated with an access_token's item.
|
12
8
|
#
|
13
|
-
# access_token - access_token
|
14
|
-
# account_ids - Specific account ids to fetch
|
9
|
+
# access_token - access_token of an item to fetch credit details for.
|
10
|
+
# account_ids - Specific account ids to fetch credit details for
|
11
|
+
# (optional).
|
15
12
|
#
|
16
|
-
# Returns
|
13
|
+
# Returns the CreditDetailsResponse object with credit details info.
|
17
14
|
def get(access_token, account_ids: nil)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
options: options_payload
|
23
|
-
}
|
24
|
-
|
25
|
-
@client.post_with_auth('credit_details/get', payload)
|
15
|
+
post_with_auth 'credit_details/get',
|
16
|
+
CreditDetailsResponse,
|
17
|
+
build_payload(access_token,
|
18
|
+
account_ids: account_ids)
|
26
19
|
end
|
27
20
|
end
|
21
|
+
|
22
|
+
# Public: Response wrapper for /credit_details/get.
|
23
|
+
class CreditDetailsResponse < Models::BaseResponse
|
24
|
+
##
|
25
|
+
# :attr_reader:
|
26
|
+
# Public: The list of accounts: Array of Plaid::Models::Account.
|
27
|
+
property :accounts, coerce: Array[Models::Account]
|
28
|
+
|
29
|
+
##
|
30
|
+
# :attr_reader:
|
31
|
+
# Public: The list of credit details: Array of
|
32
|
+
# Plaid::Models::CreditDetails.
|
33
|
+
property :credit_details, coerce: Array[Models::CreditDetails]
|
34
|
+
|
35
|
+
##
|
36
|
+
# :attr_reader:
|
37
|
+
# Public: The item: Plaid::Models::Item.
|
38
|
+
property :item, coerce: Models::Item
|
39
|
+
end
|
28
40
|
end
|
@@ -1,20 +1,36 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the Identity product.
|
3
|
-
class Identity
|
4
|
-
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
8
|
-
# Public: Get Identity information
|
3
|
+
class Identity < BaseProduct
|
4
|
+
# Public: Get Identity information.
|
9
5
|
#
|
10
|
-
# Does a POST /identity/get call to retrieve all info for a given
|
6
|
+
# Does a POST /identity/get call to retrieve all info for a given
|
7
|
+
# access_token's item.
|
11
8
|
#
|
12
|
-
# access_token - access_token who's item to fetch Identity data for
|
9
|
+
# access_token - access_token who's item to fetch Identity data for.
|
13
10
|
#
|
14
|
-
# Returns
|
11
|
+
# Returns the IdentityResponse object with Identity info.
|
15
12
|
def get(access_token)
|
16
|
-
|
17
|
-
|
13
|
+
post_with_auth 'identity/get',
|
14
|
+
IdentityResponse,
|
15
|
+
access_token: access_token
|
18
16
|
end
|
19
17
|
end
|
18
|
+
|
19
|
+
# Public: Response for /identity/get.
|
20
|
+
class IdentityResponse < Models::BaseResponse
|
21
|
+
##
|
22
|
+
# :attr_reader:
|
23
|
+
# Public: The list of accounts: Array of Plaid::Models::Account.
|
24
|
+
property :accounts, coerce: Array[Models::Account]
|
25
|
+
|
26
|
+
##
|
27
|
+
# :attr_reader:
|
28
|
+
# Public: Identity information: Plaid::Models::Identity.
|
29
|
+
property :identity, coerce: Models::Identity
|
30
|
+
|
31
|
+
##
|
32
|
+
# :attr_reader:
|
33
|
+
# Public: The item: Plaid::Models::Item.
|
34
|
+
property :item, coerce: Models::Item
|
35
|
+
end
|
20
36
|
end
|
@@ -1,20 +1,31 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the Income product.
|
3
|
-
class Income
|
4
|
-
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
8
|
-
# Public: Get information about user incomes
|
3
|
+
class Income < BaseProduct
|
4
|
+
# Public: Get information about user incomes.
|
9
5
|
#
|
10
|
-
# Does a POST /income/get call which returns income info for an
|
6
|
+
# Does a POST /income/get call which returns income info for an
|
7
|
+
# access_token's item.
|
11
8
|
#
|
12
|
-
# access_token - access_token
|
9
|
+
# access_token - access_token whose item to fetch income for.
|
13
10
|
#
|
14
|
-
# Returns
|
11
|
+
# Returns the IncomeResponse object with Income info.
|
15
12
|
def get(access_token)
|
16
|
-
|
17
|
-
|
13
|
+
post_with_auth 'income/get',
|
14
|
+
IncomeResponse,
|
15
|
+
access_token: access_token
|
18
16
|
end
|
19
17
|
end
|
18
|
+
|
19
|
+
# Public: Income product response.
|
20
|
+
class IncomeResponse < Models::BaseResponse
|
21
|
+
##
|
22
|
+
# :attr_reader:
|
23
|
+
# Public: The item: Plaid::Models::Item.
|
24
|
+
property :item, coerce: Models::Item
|
25
|
+
|
26
|
+
##
|
27
|
+
# :attr_reader:
|
28
|
+
# Public: Income information: Plaid::Models::Income.
|
29
|
+
property :income, coerce: Models::Income
|
30
|
+
end
|
20
31
|
end
|
@@ -1,54 +1,76 @@
|
|
1
1
|
module Plaid
|
2
2
|
# Public: Class used to call the Institutions product.
|
3
|
-
class Institutions
|
4
|
-
|
5
|
-
@client = client
|
6
|
-
end
|
7
|
-
|
8
|
-
# Public: Get information about Plaid institutions
|
3
|
+
class Institutions < BaseProduct
|
4
|
+
# Public: Get information about Plaid institutions.
|
9
5
|
#
|
10
|
-
# Does a POST /institutions/get call pulls a list of supported Plaid
|
11
|
-
# with the information for each institution
|
6
|
+
# Does a POST /institutions/get call pulls a list of supported Plaid
|
7
|
+
# institutions with the information for each institution.
|
12
8
|
#
|
13
|
-
# count - Amount of institutions to pull
|
14
|
-
# offset - Offset to start pulling institutions
|
15
|
-
# options - Options for filtering institutions
|
9
|
+
# count - Amount of institutions to pull.
|
10
|
+
# offset - Offset to start pulling institutions.
|
11
|
+
# options - Options for filtering institutions.
|
16
12
|
#
|
17
|
-
# Returns a
|
13
|
+
# Returns a MultipleInstitutionsResponse instance.
|
18
14
|
def get(count:, offset:, options: nil)
|
19
15
|
payload = { count: count,
|
20
16
|
offset: offset }
|
21
17
|
payload[:options] = options unless options.nil?
|
22
18
|
|
23
|
-
|
19
|
+
post_with_auth 'institutions/get',
|
20
|
+
MultipleInstitutionsResponse,
|
21
|
+
payload
|
24
22
|
end
|
25
23
|
|
26
|
-
# Public: Get information about a Plaid institution by ID
|
24
|
+
# Public: Get information about a Plaid institution by ID.
|
27
25
|
#
|
28
26
|
# Does a POST /institutions/get_by_id call which allows you to pull
|
29
|
-
# information for an institution by ID
|
27
|
+
# information for an institution by ID.
|
30
28
|
#
|
31
|
-
# institution_id - Specific institution id to fetch information for
|
29
|
+
# institution_id - Specific institution id to fetch information for.
|
32
30
|
#
|
33
|
-
# Returns a
|
31
|
+
# Returns a SingleInstitutionResponse instance.
|
34
32
|
def get_by_id(institution_id)
|
35
|
-
|
36
|
-
|
33
|
+
post_with_public_key 'institutions/get_by_id',
|
34
|
+
SingleInstitutionResponse,
|
35
|
+
institution_id: institution_id
|
37
36
|
end
|
38
37
|
|
39
|
-
# Public: Get information about all available institutions matching your
|
38
|
+
# Public: Get information about all available institutions matching your
|
39
|
+
# query.
|
40
40
|
#
|
41
|
-
# Does a POST /institutions/search call which allows you to pull a list of
|
42
|
-
# using a query parameter
|
41
|
+
# Does a POST /institutions/search call which allows you to pull a list of
|
42
|
+
# institutions using a query parameter.
|
43
43
|
#
|
44
|
-
# query
|
45
|
-
#
|
44
|
+
# query - Search query to attempt to match institutions to.
|
45
|
+
# products - Product supported filter (optional).
|
46
46
|
#
|
47
|
-
# Returns a
|
47
|
+
# Returns a MultipleInstitutionsResponse instance.
|
48
48
|
def search(query, products = nil)
|
49
|
-
|
50
|
-
|
51
|
-
|
49
|
+
post_with_public_key 'institutions/search',
|
50
|
+
MultipleInstitutionsResponse,
|
51
|
+
query: query,
|
52
|
+
products: products
|
52
53
|
end
|
53
54
|
end
|
55
|
+
|
56
|
+
# Public: Response for institutions search returning a single institution.
|
57
|
+
class SingleInstitutionResponse < Models::BaseResponse
|
58
|
+
##
|
59
|
+
# :attr_reader:
|
60
|
+
# Public: Institution info: Plaid::Models::Institution.
|
61
|
+
property :institution, coerce: Models::Institution
|
62
|
+
end
|
63
|
+
|
64
|
+
# Public: Response for institutions search returning multiple institutions.
|
65
|
+
class MultipleInstitutionsResponse < Models::BaseResponse
|
66
|
+
##
|
67
|
+
# :attr_reader:
|
68
|
+
# Public: Institutions info: Array of Plaid::Models::Institution.
|
69
|
+
property :institutions, coerce: Array[Models::Institution]
|
70
|
+
|
71
|
+
##
|
72
|
+
# :attr_reader:
|
73
|
+
# Public: The total number of search results.
|
74
|
+
property :total
|
75
|
+
end
|
54
76
|
end
|