plaid_rails 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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