Module: Plaid

Defined in:
lib/zen-plaid.rb,
lib/zen-plaid/auth.rb,
lib/zen-plaid/util.rb,
lib/zen-plaid/entity.rb,
lib/zen-plaid/balance.rb,
lib/zen-plaid/connect.rb,
lib/zen-plaid/version.rb,
lib/zen-plaid/category.rb,
lib/zen-plaid/institution.rb,
lib/zen-plaid/configuration.rb

Defined Under Namespace

Modules: Util Classes: Auth, Balance, Category, Configuration, Connect, Entity, Institution

Constant Summary collapse

VERSION =
'0.0.2'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configurationObject

Returns the value of attribute configuration.



3
4
5
# File 'lib/zen-plaid/configuration.rb', line 3

def configuration
  @configuration
end

Class Method Details

.api_baseObject



39
40
41
42
43
44
45
# File 'lib/zen-plaid.rb', line 39

def self.api_base
  if Plaid.configuration.environment == 'production'
    'https://api.plaid.com/'
  else
    'https://tartan.plaid.com/'
  end
end

.api_url(url = '') ⇒ Object



35
36
37
# File 'lib/zen-plaid.rb', line 35

def self.api_url(url='')
  api_base + url
end

.authObject



76
77
78
# File 'lib/zen-plaid.rb', line 76

def self.auth
  {client_id: Plaid.configuration.client_id, secret: Plaid.configuration.secret}
end

.configure {|configuration| ... } ⇒ Object

Yields:



10
11
12
# File 'lib/zen-plaid/configuration.rb', line 10

def self.configure
  yield(configuration)
end

.handle_api_error(rcode, rbody) ⇒ Object



21
22
23
24
25
# File 'lib/zen-plaid.rb', line 21

def self.handle_api_error(rcode, rbody)
  error_obj = Util.symbolize_names(Oj.load(rbody))

  {code: rcode, error: error_obj}
end

.parse(response) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/zen-plaid.rb', line 27

def self.parse(response)
  begin
    response = Util.symbolize_names(Oj.load(response.body))
  rescue Oj::ParseError
    raise general_api_error(response.code, response.body)
  end
end

.request(method, url, params = {}, headers = {}) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/zen-plaid.rb', line 47

def self.request(method, url, params={}, headers={})
  request_opts = { verify_ssl: false }
  url = api_url(url)
  params = params.merge!(auth)

  case method.to_s.downcase.to_sym
  when :get, :head, :delete
    # Make params into GET parameters
    url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
    payload = nil
  else
    payload = uri_encode(params)
  end

  request_opts.update(headers: headers,
                      method: method,
                      open_timeout: 30,
                      payload: payload,
                      url: url,
                      timeout: 80)

  begin
    response = RestClient::Request.execute(request_opts)
    return {code: response.code, message: parse(response)}
  rescue RestClient::ExceptionWithResponse => e
    return handle_api_error(e.http_code, e.http_body)
  end
end

.uri_encode(params) ⇒ Object



16
17
18
19
# File 'lib/zen-plaid.rb', line 16

def self.uri_encode(params)
  Util.flatten_params(params).
    map { |k,v| "#{k}=#{Util.url_encode(v)}" }.join('&')
end