plaid_rails 0.0.1 → 0.0.2

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
2
  SHA1:
3
- metadata.gz: cfa957e3247b9dd795200f9e15eb2a775425adf7
4
- data.tar.gz: ccaacbd3394200f6653ff4891584054e4760e4f5
3
+ metadata.gz: d197c9a37166ed867afe4fcd976b52ca6eee6c1b
4
+ data.tar.gz: ef42e083ed29bb7cbc7b4e4a182c7a3b74c9b409
5
5
  SHA512:
6
- metadata.gz: 7c0d5802e0258f8e4115c1d3cb9295610934f2001f04408d7423984606f96b282fe8db52aee8052e84a9cf154348ba0578cb178fd698ae7cd7f4bf758272e11a
7
- data.tar.gz: 8f2aa09ebfc55dfea10cd084f699293aaa49ed430c76cadd8ee246802cadb8c57fe235b78d8f911c527516f7f2b78e004552e94783c232bb985cbf60f5566bf8
6
+ metadata.gz: fa5f7468171b9af012523da2f10eaddacdbaf37b0c82ee71ffd9c7845cb9cb7becd5eaa667d9a648f64630a3c90b626a0699a409b59011d3aa692fe6cd6d0eac
7
+ data.tar.gz: 36bec95361228c31eee08cccfabde4fe1314073e0ee1b53e3cf3e305daf12fc74be143df9dca0f071e9763c0d4352bdd53f56d7a42de344684bf040d48f960ae
data/Rakefile CHANGED
@@ -25,5 +25,5 @@ Dir[File.join(File.dirname(__FILE__), 'tasks/**/*.rake')].each {|f| load f }
25
25
  require 'rspec/core'
26
26
  require 'rspec/core/rake_task'
27
27
  desc "Run all specs in spec directory (excluding plugin specs)"
28
- RSpec::Core::RakeTask.new(:spec => 'app:db:test:prepare')
29
- task :default => :spec
28
+ RSpec::Core::RakeTask.new #(:spec => 'app:db:test:prepare')
29
+ task :default => :spec
@@ -1,36 +1,61 @@
1
- var plaidData = $("#plaid-data");
2
- var linkHandler = Plaid.create({
3
- env: plaidData.data('env'),
4
- clientName: plaidData.data('client-name'),
5
- key: plaidData.data('key'),
6
- product: 'connect',
7
- webhook: plaidData.data('webhook'),
8
- onLoad: function () {
9
- // The Link module finished loading.
10
- },
11
- onSuccess: function (public_token, metadata) {
12
- // Send the public_token to your app server here.
13
- // The metadata object contains info about the institution the
14
- // user selected and the account ID, if selectAccount is enabled.
15
- $.ajax({
16
- type: 'POST',
17
- dataType: 'script',
18
- url: '/plaid/authenticate',
19
- data: {
20
- public_token: public_token,
21
- name: metadata.institution.name,
22
- type: metadata.institution.type,
23
- owner_type: plaidData.data('owner-type'),
24
- owner_id: plaidData.data('owner-id')
25
- }
26
- });
27
- },
28
- onExit: function () {
29
- // The user exited the Link flow.
1
+ function getPlaid(plaidData) {
2
+ var url = null;
3
+ var token = plaidData.data('token');
4
+ var env = plaidData.data('env');
5
+ if (typeof token === 'undefined') {
6
+ url = '/plaid/authenticate';
7
+ token = null;
8
+ } else {
9
+ url = '/plaid/update';
30
10
  }
31
- });
11
+ // set token for test environment
12
+ if (env === 'tartan' && typeof plaidData.data('type') !== 'undefined') {
13
+ token = 'test,' + plaidData.data('type') + ',connected'
14
+ }
15
+
16
+ var linkHandler = Plaid.create({
17
+ env: env,
18
+ clientName: plaidData.data('client-name'),
19
+ key: plaidData.data('key'),
20
+ product: 'connect',
21
+ webhook: plaidData.data('webhook'),
22
+ onLoad: function () {
23
+ // The Link module finished loading.
24
+ },
25
+ onSuccess: function (public_token, metadata) {
26
+ // Send the public_token to your app server here.
27
+ // The metadata object contains info about the institution the
28
+ // user selected and the account ID, if selectAccount is enabled.
29
+ $.ajax({
30
+ type: 'POST',
31
+ dataType: 'script',
32
+ url: url,
33
+ data: {
34
+ public_token: public_token,
35
+ name: metadata.institution.name,
36
+ type: metadata.institution.type,
37
+ owner_type: plaidData.data('owner-type'),
38
+ owner_id: plaidData.data('owner-id')
39
+ }
40
+ });
41
+ },
42
+ onExit: function () {
43
+ // The user exited the Link flow.
44
+ }
45
+ });
46
+ return linkHandler;
47
+ }
32
48
  // Trigger the authentication view
33
49
  $(document).on("click", '#plaidLinkButton', function () {
34
- linkHandler.open();
50
+ var plaidData = $(this);
51
+ linkHandler = getPlaid(plaidData);
52
+ var plaidType = plaidData.data('type')
53
+ //open handler for the institution
54
+ if (typeof plaidType === 'undefined') {
55
+ linkHandler.open();
56
+ } else {
57
+ linkHandler.open(plaidType);
58
+ }
59
+
35
60
  });
36
61
 
@@ -33,7 +33,7 @@ module PlaidRails
33
33
 
34
34
  # Never trust parameters from the scary internet, only allow the white list through.
35
35
  def account_params
36
- params.require(:account).permit(:access_token, :type,:name,:owner_id,:owner_type,account_ids:[])
36
+ params.require(:account).permit(:token,:access_token, :type,:name,:owner_id,:owner_type,account_ids:[])
37
37
  end
38
38
  end
39
39
  end
@@ -7,7 +7,7 @@ module PlaidRails
7
7
  begin
8
8
  @exchange_token = Plaid.exchange_token(link_params[:public_token])
9
9
 
10
- @params = link_params
10
+ @params = link_params.merge!(token: link_params[:public_token])
11
11
 
12
12
  rescue => e
13
13
  Rails.logger.error "Error: #{e}"
@@ -16,10 +16,25 @@ module PlaidRails
16
16
  end
17
17
  end
18
18
 
19
+ def update
20
+ begin
21
+ exchange_token = Plaid.exchange_token(link_params[:public_token])
22
+
23
+ @accounts =PlaidRails::Account.where(owner_id: link_params[:owner_id])
24
+ @accounts.each do |account|
25
+ account.update(access_token: exchange_token.access_token)
26
+ end
27
+ flash[:success]="You successfully updated your account(s)"
28
+ rescue => e
29
+ Rails.logger.error "Error: #{e}"
30
+ Rails.logger.error e.backtrace.join("\n")
31
+ render text: e.message, status: 500
32
+ end
33
+ end
19
34
  private
20
35
  # Never trust parameters from the scary internet, only allow the white list through.
21
36
  def link_params
22
- params.permit(:public_token, :type,:name,:owner_id,:owner_type)
37
+ params.permit(:access_token, :public_token, :type,:name,:owner_id,:owner_type)
23
38
  end
24
39
  end
25
40
  end
@@ -8,9 +8,9 @@ module PlaidRails
8
8
  user = Plaid.set_user(account_params["access_token"],['auth'])
9
9
  #find the account by account_id
10
10
  account = user.accounts.find{|a| a.id==id}
11
-
12
11
  PlaidRails::Account.create!(
13
12
  access_token: account_params["access_token"],
13
+ token: account_params["token"],
14
14
  plaid_type: account_params["type"],
15
15
  name: account.name,
16
16
  bank_name: account.meta["name"],
@@ -10,5 +10,6 @@
10
10
  data-owner-id="<%= owner.id %>">
11
11
  </div>
12
12
 
13
+ <!-- put at bottom of page -->
13
14
  <%=javascript_include_tag "https://cdn.plaid.com/link/stable/link-initialize.js" %>
14
15
  <%=javascript_include_tag "plaid_rails/link.js" %>
@@ -0,0 +1,5 @@
1
+ // override this js file with your own in your the own view in
2
+ // app/views/plaid_rails/link/authenticate.js.erb
3
+
4
+ console.log('success')
5
+ alert('success')
data/config/routes.rb CHANGED
@@ -4,6 +4,6 @@ PlaidRails::Engine.routes.draw do
4
4
 
5
5
  match '/webhooks', to: 'webhooks#create', via: :post
6
6
  match '/authenticate', to: "link#authenticate", via: :post
7
-
7
+ match '/update', to: "link#update", via: :post
8
8
 
9
9
  end
@@ -2,6 +2,7 @@ class CreatePlaidRailsAccounts < ActiveRecord::Migration
2
2
  def change
3
3
  create_table :plaid_rails_accounts do |t|
4
4
  t.string :access_token
5
+ t.string :token
5
6
  t.string :plaid_type
6
7
  t.string :name
7
8
  t.string :bank_name
@@ -13,6 +14,7 @@ class CreatePlaidRailsAccounts < ActiveRecord::Migration
13
14
  t.decimal :current_balance, :precision => 10, :scale => 2
14
15
  t.decimal :available_balance, :precision => 10, :scale => 2
15
16
  t.string :error
17
+
16
18
  t.timestamps
17
19
  end
18
20
  add_index :plaid_rails_accounts, :access_token
@@ -0,0 +1,18 @@
1
+ module PlaidRails
2
+ class InstallGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def install_initializer
6
+ initializer 'plaid.rb', File.read(File.expand_path('../templates/initializer.rb', __FILE__))
7
+ end
8
+ def install_js
9
+ inject_into_file 'app/assets/javascripts/application.js', after: "//= require jquery\n" do <<-'JS'
10
+ //= require plaid_rails
11
+ JS
12
+ end
13
+ end
14
+ def install_route
15
+ route "mount PlaidRails::Engine => '/plaid', as: :plaid_rails"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,29 @@
1
+ Plaid.config do |p|
2
+ Plaid.customer_id = Rails.application.secrets[:plaid][:customer_id]
3
+ Plaid.secret = Rails.application.secrets[:plaid][:secret]
4
+ Plaid.environment_location = Rails.env.production? ? 'https://api.plaid.com/' : 'https://tartan.plaid.com/'
5
+ end
6
+ PlaidRails.configure do |config|
7
+ config.public_key = Rails.application.secrets[:plaid][:public_key]
8
+ config.long_tail = true
9
+ config.webhook = 'https://my.app.com/plaid/webhooks'
10
+
11
+ # https://plaid.com/docs/#webhook
12
+ #subscribe to plaid webhooks
13
+ config.all do |event|
14
+ Rails.logger.debug "Plaid Webhook: #{event.inspect}"
15
+ end
16
+
17
+ config.subscribe "transactions.initial" do |event|
18
+ Rails.logger.debug "transactions.initial #{event.inspect}"
19
+ # do something with intial transactions
20
+ end
21
+ config.subscribe "transactions.new" do |event|
22
+ Rails.logger.debug "transactions.new #{event.inspect}"
23
+ # do something with the new transactions
24
+ end
25
+ config.subscribe "transactions.interval" do |event|
26
+ Rails.logger.debug "transactions.initial #{event.inspect}"
27
+ # do something with the new transactions
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module PlaidRails
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -24,7 +24,8 @@ module PlaidRails
24
24
  it "can create" do
25
25
  accounts = user.accounts.map{|a| a.id}
26
26
  post :create, account: {access_token: 'test_wells', account_ids: accounts,
27
- name:'Wells Fargo', type: 'wells', owner_id: "1", owner_type: "User"}
27
+ name:'Wells Fargo', type: 'wells', owner_id: "1", owner_type: "User",
28
+ token: public_token}
28
29
  expect(response).to be_success
29
30
  expect(assigns(:accounts).size).to eq 4
30
31
  end
@@ -11,7 +11,7 @@ module PlaidRails
11
11
  expect(response).to render_template('plaid_rails/link/authenticate')
12
12
  end
13
13
 
14
- it "can't authenticat with bad public token" do
14
+ it "can't authenticate with bad public token" do
15
15
  xhr :post, :authenticate, public_token: 'badtoken', name:'Wells Fargo', type: 'wells',
16
16
  owner_id: "1", owner_type: "User"
17
17
  expect(response).to_not be_success
@@ -19,9 +19,20 @@ module PlaidRails
19
19
  expect(response.body).to eq "unauthorized product"
20
20
  end
21
21
 
22
+ it "update with public token" do
23
+ account = create(:account)
24
+ xhr :post, :update, public_token: 'test,wells,connected', name:'Wells Fargo', type: 'wells',
25
+ owner_id: "1", owner_type: "User"
26
+ expect(response).to be_success
27
+ expect(assigns(:accounts)).to_not be_nil
28
+ expect(response).to render_template('plaid_rails/link/update')
29
+ end
22
30
  it {
23
31
  should permit(:public_token, :type,:name,:owner_id,:owner_type).
24
32
  for(:authenticate, verb: :post, format: :js)}
33
+ it {
34
+ should permit(:access_token,:public_token, :type,:name,:owner_id,:owner_type).
35
+ for(:update, verb: :post, format: :js)}
25
36
 
26
37
  end
27
38
  end
@@ -15,6 +15,7 @@ ActiveRecord::Schema.define(version: 20160215155024) do
15
15
 
16
16
  create_table "plaid_rails_accounts", force: true do |t|
17
17
  t.string "access_token"
18
+ t.string "token"
18
19
  t.string "plaid_type"
19
20
  t.string "name"
20
21
  t.string "bank_name"
Binary file