stripe_wrapper 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/stripe_wrapper/stripe_wrapper.js +43 -0
  3. data/app/assets/stylesheets/stripe_wrapper/stripe_wrapper.css.scss +178 -0
  4. data/app/controllers/stripe_wrapper/application_controller.rb +5 -0
  5. data/app/controllers/stripe_wrapper/charges_controller.rb +13 -3
  6. data/app/helpers/stripe_wrapper/stripe_wrapper_helper.rb +16 -0
  7. data/app/models/stripe_wrapper/charge.rb +13 -0
  8. data/app/models/stripe_wrapper/customer.rb +54 -0
  9. data/app/views/layouts/stripe_wrapper/_navigation.html.haml +8 -0
  10. data/app/views/layouts/stripe_wrapper/_navigation_links.html.haml +1 -0
  11. data/app/views/layouts/stripe_wrapper/_sidebar_navigation.html.haml +25 -0
  12. data/app/views/layouts/stripe_wrapper/application.html.haml +13 -0
  13. data/app/views/stripe_wrapper/charges/_pay.html.haml +5 -2
  14. data/app/views/stripe_wrapper/charges/index.html.haml +19 -0
  15. data/app/views/stripe_wrapper/customers/index.html.haml +26 -0
  16. data/config/locales/en.yml +13 -0
  17. data/config/locales/es.yml +13 -0
  18. data/config/routes.rb +3 -2
  19. data/db/migrate/20161215195603_create_stripe_wrapper_customers.rb +1 -0
  20. data/db/migrate/20161215195608_create_stripe_wrapper_charges.rb +2 -1
  21. data/lib/stripe_wrapper.rb +41 -1
  22. data/lib/stripe_wrapper/engine.rb +32 -0
  23. data/lib/stripe_wrapper/main_app_route_delegator.rb +24 -0
  24. data/lib/stripe_wrapper/version.rb +1 -1
  25. metadata +282 -11
  26. data/app/assets/javascripts/stripe_wrapper/application.js +0 -13
  27. data/app/assets/stylesheets/stripe_wrapper/application.css +0 -15
  28. data/app/helpers/stripe_wrapper/application_helper.rb +0 -4
  29. data/app/views/layouts/stripe_wrapper/application.html.erb +0 -14
  30. data/app/views/stripe_wrapper/customers/index.html.erb +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b426fd7e75ae008a4d614827ad23ff8292bc2e2b
4
- data.tar.gz: 05b487dde23e9116aad0e782249419e86bfed45c
3
+ metadata.gz: 87ddfc60d443529ba9bec7cc155419cc5d008e97
4
+ data.tar.gz: 012fdf68fc19719ffe4497394cd05016a604a55f
5
5
  SHA512:
6
- metadata.gz: d2dd4b8df81c57e50af2c439fd8c07adb74654b53bb05158eb4e81b59ede9d7063987c0de6d30758828502657408b5a4267245e93df548644a249377fc20105e
7
- data.tar.gz: ecdb622b2bf9d65ac6f7ab525bc476de712642c1e3ebff3b2b1bd04467138b25be9969f7a232e1af658e6349a270c1c7d4bfbe15f2accb7c69566b186273a76b
6
+ metadata.gz: 89f1357b645d0dc28f956d3e46b59d5faa20411bc0de78330da87fbff857b90a0db8db95dcc8fe58a301ad51c9e3b6631758c8803b686e39b05dce80dde71878
7
+ data.tar.gz: 272cea3206aee073a6999b3484be5a3b9e585df8c942395092ff4106d512cced7477c28cbb516e78cd928bbd147e0bf49e66e2d7807e020fecca8eb8147de222
@@ -0,0 +1,43 @@
1
+ // This is a manifest file that'll be compiled into application.js, which will include all the files
2
+ // listed below.
3
+ //
4
+ // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
+ // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
+ //
7
+ // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
+ // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
+ //
10
+ // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
+ // about supported directives.
12
+ //
13
+ //= require jquery
14
+ //= require jquery_ujs
15
+ //= require_tree .
16
+
17
+ var stripeResponseHandler;
18
+
19
+ $(function() {
20
+ var $form;
21
+ $form = $('#stripe_wrapper_payment_form');
22
+ $form.submit(function(event) {
23
+ event.preventDefault();
24
+ $form.find('.submit').prop('disabled', true);
25
+ Stripe.card.createToken($form, stripeResponseHandler);
26
+ return false;
27
+ });
28
+ });
29
+
30
+ stripeResponseHandler = function(status, response) {
31
+ var $form, token;
32
+ $form = $('#stripe_wrapper_payment_form');
33
+ if (response.error) {
34
+ console.log("Payment Error");
35
+ $form.find('.payment-errors').text(response.error.message);
36
+ $form.find('.submit').prop('disabled', false);
37
+ } else {
38
+ console.log("No Payment Error");
39
+ token = response.id;
40
+ $('#stripe_token').val(token);
41
+ $form.get(0).submit();
42
+ }
43
+ };
@@ -0,0 +1,178 @@
1
+ /*
2
+ * This is a manifest file that'll be compiled into application.css, which will include all the files
3
+ * listed below.
4
+ *
5
+ * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
+ * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
+ *
8
+ * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
+ * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
+ * files in this directory. Styles in this file should be added after the last require_* statement.
11
+ * It is generally better to create a new file per style scope.
12
+ *
13
+ *= require_tree .
14
+ *= require_self
15
+ */
16
+ @import "bootstrap-sprockets";
17
+ @import "bootstrap";
18
+
19
+ body,html{
20
+ height: 100%;
21
+ }
22
+ .page-content{
23
+ padding: 0 8px;
24
+ }
25
+ .breakable-table{
26
+ word-break: break-word;
27
+ a{
28
+ word-break: normal;
29
+ }
30
+ }
31
+
32
+ /* remove outer padding */
33
+ .main .row{
34
+ padding: 0px;
35
+ margin: 0px;
36
+ }
37
+
38
+ /*Remove rounded coners*/
39
+
40
+ nav.sidebar.navbar {
41
+ border-radius: 0px;
42
+ }
43
+
44
+ nav.sidebar, .main{
45
+ -webkit-transition: margin 200ms ease-out;
46
+ -moz-transition: margin 200ms ease-out;
47
+ -o-transition: margin 200ms ease-out;
48
+ transition: margin 200ms ease-out;
49
+ }
50
+
51
+ /* Add gap to nav and right windows.*/
52
+ .main{
53
+ padding: 10px 10px 0 10px;
54
+ }
55
+
56
+ /* .....NavBar: Icon only with coloring/layout.....*/
57
+
58
+ /*small/medium side display*/
59
+ @media (min-width: 768px) {
60
+
61
+ /*Allow main to be next to Nav*/
62
+ .main{
63
+ position: absolute;
64
+ width: calc(100% - 40px); /*keeps 100% minus nav size*/
65
+ margin-left: 40px;
66
+ float: right;
67
+ }
68
+
69
+ /*lets nav bar to be showed on mouseover*/
70
+ nav.sidebar:hover + .main{
71
+ margin-left: 200px;
72
+ }
73
+
74
+ /*Center Brand*/
75
+ nav.sidebar.navbar.sidebar>.container .navbar-brand, .navbar>.container-fluid .navbar-brand {
76
+ margin-left: 0px;
77
+ }
78
+ /*Center Brand*/
79
+ nav.sidebar .navbar-brand, nav.sidebar .navbar-header{
80
+ text-align: center;
81
+ width: 100%;
82
+ margin-left: 0px;
83
+ }
84
+
85
+ /*Center Icons*/
86
+ nav.sidebar a{
87
+ padding-right: 13px;
88
+ }
89
+
90
+ /*adds border top to first nav box */
91
+ nav.sidebar .navbar-nav > li:first-child{
92
+ border-top: 1px #e5e5e5 solid;
93
+ }
94
+
95
+ /*adds border to bottom nav boxes*/
96
+ nav.sidebar .navbar-nav > li{
97
+ border-bottom: 1px #e5e5e5 solid;
98
+ }
99
+
100
+ /* Colors/style dropdown box*/
101
+ nav.sidebar .navbar-nav .open .dropdown-menu {
102
+ position: static;
103
+ float: none;
104
+ width: auto;
105
+ margin-top: 0;
106
+ background-color: transparent;
107
+ border: 0;
108
+ -webkit-box-shadow: none;
109
+ box-shadow: none;
110
+ }
111
+
112
+ /*allows nav box to use 100% width*/
113
+ nav.sidebar .navbar-collapse, nav.sidebar .container-fluid{
114
+ padding: 0 0px 0 0px;
115
+ }
116
+
117
+ /*colors dropdown box text */
118
+ .navbar-inverse .navbar-nav .open .dropdown-menu>li>a {
119
+ color: #777;
120
+ }
121
+
122
+ /*gives sidebar width/height*/
123
+ nav.sidebar{
124
+ width: 200px;
125
+ height: 100%;
126
+ margin-left: -160px;
127
+ float: left;
128
+ z-index: 8000;
129
+ margin-bottom: 0px;
130
+ }
131
+
132
+ /*give sidebar 100% width;*/
133
+ nav.sidebar li {
134
+ width: 100%;
135
+ }
136
+
137
+ /* Move nav to full on mouse over*/
138
+ nav.sidebar:hover{
139
+ margin-left: 0px;
140
+ }
141
+ /*for hiden things when navbar hidden*/
142
+ .forAnimate{
143
+ opacity: 0;
144
+ }
145
+ }
146
+
147
+ /* .....NavBar: Fully showing nav bar..... */
148
+
149
+ @media (min-width: 1330px) {
150
+
151
+ /*Allow main to be next to Nav*/
152
+ .main{
153
+ width: calc(100% - 200px); /*keeps 100% minus nav size*/
154
+ margin-left: 200px;
155
+ }
156
+
157
+ /*Show all nav*/
158
+ nav.sidebar{
159
+ margin-left: 0px;
160
+ float: left;
161
+ }
162
+ /*Show hidden items on nav*/
163
+ nav.sidebar .forAnimate{
164
+ opacity: 1;
165
+ }
166
+ }
167
+
168
+ nav.sidebar .navbar-nav .open .dropdown-menu>li>a:hover, nav.sidebar .navbar-nav .open .dropdown-menu>li>a:focus {
169
+ color: #CCC;
170
+ background-color: transparent;
171
+ }
172
+
173
+ nav:hover .forAnimate{
174
+ opacity: 1;
175
+ }
176
+ section{
177
+ padding-left: 15px;
178
+ }
@@ -1,5 +1,10 @@
1
1
  module StripeWrapper
2
2
  class ApplicationController < ActionController::Base
3
+ include StripeWrapper::StripeWrapperHelper
3
4
  protect_from_forgery with: :exception
5
+
6
+ def main_app_current_user
7
+ @current_user = User.find(main_app.scope.session["warden.user.user.key"].first[1]) rescue nil #FIXME find a proper way to get main_app current_user
8
+ end
4
9
  end
5
10
  end
@@ -3,12 +3,22 @@ require_dependency "stripe_wrapper/application_controller"
3
3
  module StripeWrapper
4
4
  class ChargesController < ApplicationController
5
5
 
6
+ def process_payment
7
+ @user = main_app_current_user
8
+ token = params[:stripe_token]
9
+ @amount = stripe_get_amount
10
+ redirect_url = params[:redirect_path]
6
11
 
7
- def process
8
-
12
+ @customer = Customer.find_or_create_customer(token,@user)
13
+ @charge = @customer.process_new_charge(@amount)
14
+
15
+ # abort
16
+
17
+ return redirect_to redirect_url+"?charge_id=#{@charge.id}"
9
18
  end
19
+
10
20
  def index
11
- @charges = Charge.all
21
+ @charges = Charge.all.order("ID DESC")
12
22
  end
13
23
 
14
24
  end
@@ -0,0 +1,16 @@
1
+ module StripeWrapper
2
+ module StripeWrapperHelper
3
+ def stripe_pay(route_url)
4
+ render partial: 'stripe_wrapper/charges/pay', locals:{redirect_url: route_url}
5
+ end
6
+ def stripe_wrapper_path
7
+ return StripeWrapper::Engine.routes.url_helpers
8
+ end
9
+ def stripe_set_amount(amount)
10
+ session[:stripe_payment_amount] = @amount.to_i
11
+ end
12
+ def stripe_get_amount
13
+ session[:stripe_payment_amount].to_i
14
+ end
15
+ end
16
+ end
@@ -1,4 +1,17 @@
1
1
  module StripeWrapper
2
2
  class Charge < ApplicationRecord
3
+ belongs_to :stripe_customer, class_name: 'Customer', foreign_key: 'customer_id'
4
+ has_one :user, through: :stripe_customer
5
+
6
+ def self.build_stripe_charge(stripe_charge)
7
+ return Charge.new(Charge.white_params(stripe_charge))
8
+ end
9
+
10
+ private
11
+ def self.white_params(stripe_charge)
12
+ params = ActionController::Parameters.new(stripe_charge.as_json)
13
+ params.permit(:object, :amount, :application, :application_fee,:balance_transaction,:captured,:created,:currency,:customer,:description,:cvc_check,:failure_code,:failude_message)
14
+ end
15
+
3
16
  end
4
17
  end
@@ -1,4 +1,58 @@
1
1
  module StripeWrapper
2
2
  class Customer < ApplicationRecord
3
+
4
+ belongs_to :user
5
+ has_many :charges
6
+
7
+ def to_s
8
+ self.user.to_s
9
+ end
10
+
11
+ def self.get_customer(user)
12
+ Customer.find_by_user_id(user.id) rescue nil
13
+ end
14
+
15
+ def self.build_stripe_customer(stripe_customer)
16
+ return Customer.new(Customer.white_params(stripe_customer))
17
+ end
18
+
19
+ def self.find_or_create_customer(token,user)
20
+ customer = Customer.get_customer(user)
21
+
22
+ return customer if customer.present?()
23
+
24
+ # If the customer is not present, we create it
25
+
26
+ stripe_customer = StripeWrapper.create_customer(token,user)
27
+
28
+ customer = Customer.build_stripe_customer(stripe_customer)
29
+
30
+ customer.customer_id = stripe_customer.id
31
+ customer.user_id = user.id
32
+
33
+ customer.save
34
+
35
+ return customer
36
+ end
37
+
38
+ def process_new_charge(amount,metadata={},currency='clp',description='')
39
+ begin
40
+ stripe_charge = StripeWrapper.create_charge(self.customer_id,nil,amount,currency,metadata,description)
41
+ charge = Charge.build_stripe_charge(stripe_charge)
42
+ charge.customer_id = self.id
43
+ if charge.save
44
+ return charge
45
+ else
46
+ return nil
47
+ end
48
+ end
49
+ end
50
+
51
+ private
52
+ def self.white_params(stripe_customer)
53
+ params = ActionController::Parameters.new(stripe_customer.as_json)
54
+ params.permit(:customer_id, :account_balance, :created, :currency, :default_source, :delinquent, :description, :discount, :email, :livemode)
55
+ end
56
+
3
57
  end
4
58
  end
@@ -0,0 +1,8 @@
1
+ .container
2
+ .navbar-header
3
+ %button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", :type => "button"}
4
+ %span.sr-only Toggle navigation
5
+ %span.icon-bar
6
+ %span.icon-bar
7
+ %span.icon-bar
8
+ = link_to 'StripeWrapper', root_path, class: 'navbar-brand'
@@ -0,0 +1,25 @@
1
+ %nav.navbar.navbar-inverse.sidebar{:role => "navigation"}
2
+ .container-fluid
3
+ / Brand and toggle get grouped for better mobile display
4
+ .navbar-header
5
+ %button.navbar-toggle{"data-target" => "#bs-sidebar-navbar-collapse-1", "data-toggle" => "collapse", :type => "button"}
6
+ %span.sr-only Toggle navigation
7
+ %span.icon-bar
8
+ %span.icon-bar
9
+ %span.icon-bar
10
+ %a.navbar-brand{:href => "#"} StripeWrapper
11
+ / Collect the nav links, forms, and other content for toggling
12
+ #bs-sidebar-navbar-collapse-1.collapse.navbar-collapse
13
+ %ul.nav.navbar-nav
14
+ %li{class: controller.controller_name == 'home' ? 'active' : ''}
15
+ =link_to root_path do
16
+ =I18n.t('stripe_wrapper.menu.home')
17
+ %span.pull-right.hidden-xs.showopacity.glyphicon.glyphicon-home{:style => "font-size:16px;"}
18
+ %li{class: controller.controller_name == 'customers' ? 'active' : ''}
19
+ =link_to customers_path do
20
+ =I18n.t('stripe_wrapper.menu.customers')
21
+ %span.pull-right.hidden-xs.showopacity.glyphicon.glyphicon-user{:style => "font-size:16px;"}
22
+ %li{class: controller.controller_name == 'charges' ? 'active' : ''}
23
+ =link_to charges_path do
24
+ =I18n.t('stripe_wrapper.menu.charges')
25
+ %span.pull-right.hidden-xs.showopacity.glyphicon.glyphicon-usd{:style => "font-size:16px;"}
@@ -0,0 +1,13 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ %meta{:content => "width=device-width, initial-scale=1.0", :name => "viewport"}/
5
+ %title= content_for?(:title) ? yield(:title) : "StripeWrapper"
6
+ = stylesheet_link_tag 'stripe_wrapper/stripe_wrapper.css', media: 'all', 'data-turbolinks-track' => 'reload'
7
+ = javascript_include_tag 'stripe_wrapper/stripe_wrapper', 'data-turbolinks-track' => 'reload'
8
+ = csrf_meta_tags
9
+ %body
10
+ = render "layouts/stripe_wrapper/sidebar_navigation"
11
+ .main
12
+ .page-content
13
+ = yield
@@ -1,6 +1,9 @@
1
+ = stylesheet_link_tag "stripe_wrapper/stripe_wrapper", media: "all"
2
+ = javascript_include_tag "stripe_wrapper/stripe_wrapper"
1
3
  = javascript_include_tag 'https://js.stripe.com/v2/'
2
- = form_tag process_payment_public_client_infos_path, method: :post, role:'form',id: 'payment_form' do
4
+ = form_tag stripe_wrapper_path.process_payment_charges_path, method: :post, role:'form',id: 'stripe_wrapper_payment_form' do
3
5
  =hidden_field_tag :stripe_token
6
+ =hidden_field_tag :redirect_path, redirect_url
4
7
  .container.payment_partial
5
8
  .row
6
9
  .col-xs-12.col-md-7.col-md-offset-2
@@ -39,7 +42,7 @@
39
42
  %a{:href => "#"}
40
43
  %span.badge.pull-right
41
44
  %span.glyphicon.glyphicon-usd>
42
- 10.000
45
+ @amount
43
46
  Total
44
47
  %br/
45
48
  =submit_tag 'Pagar', class: 'btn btn-success btn-lg btn-block submit'
@@ -0,0 +1,19 @@
1
+ %p#notice= notice
2
+ %h1=I18n.t('stripe_wrapper.models.charges.other')
3
+ %table.table.breakable-table.table-striped
4
+ %thead
5
+ %tr
6
+ %th User
7
+ %th Customer
8
+ %th Amount
9
+ %th Amount Refunded
10
+ %th Description
11
+ %th{:colspan => "3"}
12
+ %tbody
13
+ - @charges.each do |charge|
14
+ %tr
15
+ %td=link_to charge.user,main_app.user_path(charge.user) if charge.user.present?()
16
+ %td=link_to charge.stripe_customer,customer_path(charge.stripe_customer) if charge.stripe_customer.present?()
17
+ %td= charge.amount
18
+ %td= charge.amount_refunded
19
+ %td= charge.description
@@ -0,0 +1,26 @@
1
+ %p#notice= notice
2
+ %h1=I18n.t('stripe_wrapper.models.customers.other')
3
+ %table.table.breakable-table.table-striped
4
+ %thead
5
+ %tr
6
+ %th User
7
+ %th Customer
8
+ %th Account balance
9
+ %th Currency
10
+ %th Default source
11
+ %th Description
12
+ %th Email
13
+ %th{:colspan => "3"}
14
+ %tbody
15
+ - @customers.each do |customer|
16
+ %tr
17
+ %td=link_to customer.user,main_app.user_path(customer.user) if customer.user.present?()
18
+ %td= customer.customer_id
19
+ %td= customer.account_balance
20
+ %td= customer.currency
21
+ %td= customer.default_source
22
+ %td= customer.description
23
+ %td= customer.email
24
+ %td= link_to 'Show', customer
25
+ %td= link_to 'Edit', edit_customer_path(customer)
26
+ %td= link_to 'Destroy', customer, method: :delete, data: { confirm: 'Are you sure?' }
@@ -0,0 +1,13 @@
1
+ en:
2
+ stripe_wrapper:
3
+ models:
4
+ customers:
5
+ one: 'Customer'
6
+ other: 'Customers'
7
+ charges:
8
+ one: 'Charge'
9
+ other: 'Charges'
10
+ menu:
11
+ customers: 'Customers'
12
+ charges: 'Charges'
13
+ home: 'Home'
@@ -0,0 +1,13 @@
1
+ es:
2
+ stripe_wrapper:
3
+ models:
4
+ customers:
5
+ one: 'Cliente'
6
+ other: 'Clientes'
7
+ charges:
8
+ one: 'Cargo'
9
+ other: 'Cargos'
10
+ menu:
11
+ customers: 'Clientes'
12
+ charges: 'Cargos'
13
+ home: 'Inicio'
data/config/routes.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  StripeWrapper::Engine.routes.draw do
2
+ root to: 'customers#index'
2
3
  resources :customers
3
- resources :customers, only:[:index] do
4
- post 'process',on: :collection
4
+ resources :charges, only:[:index] do
5
+ post 'process_payment',on: :collection
5
6
  end
6
7
  end
@@ -2,6 +2,7 @@ class CreateStripeWrapperCustomers < ActiveRecord::Migration[5.0]
2
2
  def change
3
3
  create_table :stripe_wrapper_customers do |t|
4
4
  t.string :customer_id
5
+ t.integer :user_id
5
6
  t.integer :account_balance
6
7
  t.datetime :created
7
8
  t.string :currency
@@ -2,6 +2,7 @@ class CreateStripeWrapperCharges < ActiveRecord::Migration[5.0]
2
2
  def change
3
3
  create_table :stripe_wrapper_charges do |t|
4
4
  t.string :stripe_id
5
+ t.integer :customer_id
5
6
  t.string :object
6
7
  t.float :amount
7
8
  t.float :amount_refunded
@@ -15,7 +16,7 @@ class CreateStripeWrapperCharges < ActiveRecord::Migration[5.0]
15
16
  t.text :description
16
17
  t.string :cvc_check
17
18
  t.string :failure_code
18
- t.string :failude_message
19
+ t.string :failure_message
19
20
 
20
21
  t.timestamps
21
22
  end
@@ -1,5 +1,45 @@
1
1
  require "stripe_wrapper/engine"
2
2
 
3
3
  module StripeWrapper
4
- # Your code goes here...
4
+ require "stripe"
5
+ Stripe.api_key = ENV["STRIPE_KEY"]
6
+
7
+ # Source is either a customer or a token
8
+ def self.create_charge(customer=nil,source=nil,amount=0,currency='clp',metadata={},description='')
9
+ #Metadata must be a hash. Example: :metadata => {'order_id' => '6735'}
10
+ Stripe::Charge.create({
11
+ amount: amount,
12
+ currency: currency,
13
+ customer: customer,
14
+ source: source, # obtained with Stripe.js
15
+ description: description,
16
+ metadata: metadata
17
+ }
18
+ # , { idempotency_key: "oSTGoYvkC1kaczHw"}
19
+ )
20
+ end
21
+
22
+ def self.create_customer(token,user)
23
+ Stripe::Customer.create(
24
+ :description => "Customer for liam.moore@example.com",
25
+ :email => user.email,
26
+ :source => token # obtained with Stripe.js
27
+ )
28
+ end
29
+
30
+ def self.get_customer(user)
31
+ customer = StripeCustomer.find_by_user_id(user.id)
32
+ customer = Customer.parse(Stripe::Customer.retrieve(customer.stripe_id)) rescue nil #TODO implement customer model
33
+ end
34
+ def self.update_customer(user,customer_params)
35
+ customer = StripeCustomer.find_by_user_id(user.id)
36
+ stripe_customer = Stripe::Customer.retrieve(customer.stripe_id)
37
+ customer_params.each do |param|
38
+ stripe_customer.send("#{param[0]}=",param[1])
39
+ end
40
+ stripe_customer.save
41
+
42
+ end
43
+
44
+
5
45
  end
@@ -1,5 +1,37 @@
1
+ require 'active_support/dependencies'
2
+ require 'bootstrap-sass'
3
+ require_dependency 'stripe_wrapper/main_app_route_delegator'
4
+
1
5
  module StripeWrapper
2
6
  class Engine < ::Rails::Engine
7
+ require 'jquery-rails'
3
8
  isolate_namespace StripeWrapper
9
+
10
+ initializer 'stripe_wrapper.action_controller' do |app|
11
+ ActiveSupport.on_load :action_controller do
12
+ helper StripeWrapper::StripeWrapperHelper
13
+ end
14
+ end
15
+
16
+ config.to_prepare do
17
+ ::StripeWrapper::ApplicationController.helper ::StripeWrapper::MainAppRouteDelegator
18
+ end
19
+
20
+ initializer 'StripeWrapper precompile hook', group: :all do |app|
21
+ app.config.assets.precompile += %w(
22
+ stripe_wrapper/stripe_wrapper.js
23
+ stripe_wrapper/stripe_wrapper.css
24
+ )
25
+ end
26
+
27
+ initializer "config.stripe" do |app|
28
+ config.stripe = {
29
+ :publishable_key => ENV['STRIPE_PUBLIC_KEY'],
30
+ :secret_key => ENV['STRIPE_KEY']
31
+ }
32
+
33
+ Stripe.api_key = ENV['STRIPE_KEY']
34
+ end
35
+
4
36
  end
5
37
  end
@@ -0,0 +1,24 @@
1
+ module StripeWrapper
2
+ # If StripeWrapper is rendered within an application layout, this module allows
3
+ # referring to the routes in the layout directly, without having to use `main_app.`.
4
+ module MainAppRouteDelegator
5
+ # delegate url helpers to main_app
6
+ # def method_missing(method, *args, &block)
7
+ # if main_app_route_method?(method)
8
+ # main_app.send(method, *args)
9
+ # else
10
+ # super
11
+ # end
12
+ # end
13
+
14
+ # def respond_to?(method, *args)
15
+ # super || main_app_route_method?(method)
16
+ # end
17
+
18
+ # private
19
+
20
+ # def main_app_route_method?(method)
21
+ # method.to_s =~ /_(?:path|url)$/ && main_app.respond_to?(method)
22
+ # end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module StripeWrapper
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stripe_wrapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Peebles | @waclock
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-15 00:00:00.000000000 Z
11
+ date: 2016-12-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -30,34 +30,186 @@ dependencies:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
32
  version: 5.0.0.1
33
+ - !ruby/object:Gem::Dependency
34
+ name: jquery-rails
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: rails-i18n
35
55
  requirement: !ruby/object:Gem::Requirement
36
56
  requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '5.0'
37
60
  - - ">="
38
61
  - !ruby/object:Gem::Version
39
- version: '0'
62
+ version: 5.0.1
40
63
  type: :runtime
41
64
  prerelease: false
42
65
  version_requirements: !ruby/object:Gem::Requirement
43
66
  requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '5.0'
44
70
  - - ">="
45
71
  - !ruby/object:Gem::Version
46
- version: '0'
72
+ version: 5.0.1
47
73
  - !ruby/object:Gem::Dependency
48
74
  name: stripe
49
75
  requirement: !ruby/object:Gem::Requirement
50
76
  requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '1.57'
51
80
  - - ">="
52
81
  - !ruby/object:Gem::Version
53
- version: '0'
82
+ version: 1.57.1
54
83
  type: :runtime
55
84
  prerelease: false
56
85
  version_requirements: !ruby/object:Gem::Requirement
57
86
  requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.57'
58
90
  - - ">="
59
91
  - !ruby/object:Gem::Version
60
- version: '0'
92
+ version: 1.57.1
93
+ - !ruby/object:Gem::Dependency
94
+ name: haml
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '4.0'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 4.0.7
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '4.0'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 4.0.7
113
+ - !ruby/object:Gem::Dependency
114
+ name: haml-rails
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '0.9'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 0.9.0
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '0.9'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 0.9.0
133
+ - !ruby/object:Gem::Dependency
134
+ name: less-rails-bootstrap
135
+ requirement: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - "~>"
138
+ - !ruby/object:Gem::Version
139
+ version: '3.3'
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: 3.3.5
143
+ type: :runtime
144
+ prerelease: false
145
+ version_requirements: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - "~>"
148
+ - !ruby/object:Gem::Version
149
+ version: '3.3'
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: 3.3.5
153
+ - !ruby/object:Gem::Dependency
154
+ name: sass-rails
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: '5.0'
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: 5.0.0
163
+ type: :runtime
164
+ prerelease: false
165
+ version_requirements: !ruby/object:Gem::Requirement
166
+ requirements:
167
+ - - "~>"
168
+ - !ruby/object:Gem::Version
169
+ version: '5.0'
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: 5.0.0
173
+ - !ruby/object:Gem::Dependency
174
+ name: bootstrap-sass
175
+ requirement: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - "~>"
178
+ - !ruby/object:Gem::Version
179
+ version: '3.3'
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: 3.3.7
183
+ type: :runtime
184
+ prerelease: false
185
+ version_requirements: !ruby/object:Gem::Requirement
186
+ requirements:
187
+ - - "~>"
188
+ - !ruby/object:Gem::Version
189
+ version: '3.3'
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ version: 3.3.7
193
+ - !ruby/object:Gem::Dependency
194
+ name: devise
195
+ requirement: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - "~>"
198
+ - !ruby/object:Gem::Version
199
+ version: '4.0'
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: 4.0.0
203
+ type: :runtime
204
+ prerelease: false
205
+ version_requirements: !ruby/object:Gem::Requirement
206
+ requirements:
207
+ - - "~>"
208
+ - !ruby/object:Gem::Version
209
+ version: '4.0'
210
+ - - ">="
211
+ - !ruby/object:Gem::Version
212
+ version: 4.0.0
61
213
  - !ruby/object:Gem::Dependency
62
214
  name: sqlite3
63
215
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +224,118 @@ dependencies:
72
224
  - - ">="
73
225
  - !ruby/object:Gem::Version
74
226
  version: '0'
227
+ - !ruby/object:Gem::Dependency
228
+ name: better_errors
229
+ requirement: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - ">="
232
+ - !ruby/object:Gem::Version
233
+ version: '0'
234
+ type: :development
235
+ prerelease: false
236
+ version_requirements: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - ">="
239
+ - !ruby/object:Gem::Version
240
+ version: '0'
241
+ - !ruby/object:Gem::Dependency
242
+ name: binding_of_caller
243
+ requirement: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - ">="
246
+ - !ruby/object:Gem::Version
247
+ version: '0'
248
+ type: :development
249
+ prerelease: false
250
+ version_requirements: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - ">="
253
+ - !ruby/object:Gem::Version
254
+ version: '0'
255
+ - !ruby/object:Gem::Dependency
256
+ name: haml
257
+ requirement: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ type: :development
263
+ prerelease: false
264
+ version_requirements: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - ">="
267
+ - !ruby/object:Gem::Version
268
+ version: '0'
269
+ - !ruby/object:Gem::Dependency
270
+ name: haml-rails
271
+ requirement: !ruby/object:Gem::Requirement
272
+ requirements:
273
+ - - ">="
274
+ - !ruby/object:Gem::Version
275
+ version: '0'
276
+ type: :development
277
+ prerelease: false
278
+ version_requirements: !ruby/object:Gem::Requirement
279
+ requirements:
280
+ - - ">="
281
+ - !ruby/object:Gem::Version
282
+ version: '0'
283
+ - !ruby/object:Gem::Dependency
284
+ name: therubyracer
285
+ requirement: !ruby/object:Gem::Requirement
286
+ requirements:
287
+ - - ">="
288
+ - !ruby/object:Gem::Version
289
+ version: '0'
290
+ type: :development
291
+ prerelease: false
292
+ version_requirements: !ruby/object:Gem::Requirement
293
+ requirements:
294
+ - - ">="
295
+ - !ruby/object:Gem::Version
296
+ version: '0'
297
+ - !ruby/object:Gem::Dependency
298
+ name: bootstrap-sass
299
+ requirement: !ruby/object:Gem::Requirement
300
+ requirements:
301
+ - - ">="
302
+ - !ruby/object:Gem::Version
303
+ version: '0'
304
+ type: :development
305
+ prerelease: false
306
+ version_requirements: !ruby/object:Gem::Requirement
307
+ requirements:
308
+ - - ">="
309
+ - !ruby/object:Gem::Version
310
+ version: '0'
311
+ - !ruby/object:Gem::Dependency
312
+ name: figaro
313
+ requirement: !ruby/object:Gem::Requirement
314
+ requirements:
315
+ - - ">="
316
+ - !ruby/object:Gem::Version
317
+ version: '0'
318
+ type: :development
319
+ prerelease: false
320
+ version_requirements: !ruby/object:Gem::Requirement
321
+ requirements:
322
+ - - ">="
323
+ - !ruby/object:Gem::Version
324
+ version: '0'
325
+ - !ruby/object:Gem::Dependency
326
+ name: devise
327
+ requirement: !ruby/object:Gem::Requirement
328
+ requirements:
329
+ - - ">="
330
+ - !ruby/object:Gem::Version
331
+ version: '0'
332
+ type: :development
333
+ prerelease: false
334
+ version_requirements: !ruby/object:Gem::Requirement
335
+ requirements:
336
+ - - ">="
337
+ - !ruby/object:Gem::Version
338
+ version: '0'
75
339
  description: Wrapper around Stripe for rails.
76
340
  email:
77
341
  - john@mispistachos.cl
@@ -83,33 +347,40 @@ files:
83
347
  - README.md
84
348
  - Rakefile
85
349
  - app/assets/config/stripe_wrapper_manifest.js
86
- - app/assets/javascripts/stripe_wrapper/application.js
87
350
  - app/assets/javascripts/stripe_wrapper/customers.js
351
+ - app/assets/javascripts/stripe_wrapper/stripe_wrapper.js
88
352
  - app/assets/stylesheets/scaffold.css
89
- - app/assets/stylesheets/stripe_wrapper/application.css
90
353
  - app/assets/stylesheets/stripe_wrapper/customers.css
354
+ - app/assets/stylesheets/stripe_wrapper/stripe_wrapper.css.scss
91
355
  - app/controllers/stripe_wrapper/application_controller.rb
92
356
  - app/controllers/stripe_wrapper/charges_controller.rb
93
357
  - app/controllers/stripe_wrapper/customers_controller.rb
94
- - app/helpers/stripe_wrapper/application_helper.rb
95
358
  - app/helpers/stripe_wrapper/customers_helper.rb
359
+ - app/helpers/stripe_wrapper/stripe_wrapper_helper.rb
96
360
  - app/jobs/stripe_wrapper/application_job.rb
97
361
  - app/mailers/stripe_wrapper/application_mailer.rb
98
362
  - app/models/stripe_wrapper/application_record.rb
99
363
  - app/models/stripe_wrapper/charge.rb
100
364
  - app/models/stripe_wrapper/customer.rb
101
- - app/views/layouts/stripe_wrapper/application.html.erb
365
+ - app/views/layouts/stripe_wrapper/_navigation.html.haml
366
+ - app/views/layouts/stripe_wrapper/_navigation_links.html.haml
367
+ - app/views/layouts/stripe_wrapper/_sidebar_navigation.html.haml
368
+ - app/views/layouts/stripe_wrapper/application.html.haml
102
369
  - app/views/stripe_wrapper/charges/_pay.html.haml
370
+ - app/views/stripe_wrapper/charges/index.html.haml
103
371
  - app/views/stripe_wrapper/customers/_form.html.erb
104
372
  - app/views/stripe_wrapper/customers/edit.html.erb
105
- - app/views/stripe_wrapper/customers/index.html.erb
373
+ - app/views/stripe_wrapper/customers/index.html.haml
106
374
  - app/views/stripe_wrapper/customers/new.html.erb
107
375
  - app/views/stripe_wrapper/customers/show.html.erb
376
+ - config/locales/en.yml
377
+ - config/locales/es.yml
108
378
  - config/routes.rb
109
379
  - db/migrate/20161215195603_create_stripe_wrapper_customers.rb
110
380
  - db/migrate/20161215195608_create_stripe_wrapper_charges.rb
111
381
  - lib/stripe_wrapper.rb
112
382
  - lib/stripe_wrapper/engine.rb
383
+ - lib/stripe_wrapper/main_app_route_delegator.rb
113
384
  - lib/stripe_wrapper/version.rb
114
385
  - lib/tasks/stripe_wrapper_tasks.rake
115
386
  homepage: https://mispistachos.cl
@@ -1,13 +0,0 @@
1
- // This is a manifest file that'll be compiled into application.js, which will include all the files
2
- // listed below.
3
- //
4
- // Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
5
- // or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
6
- //
7
- // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
- // compiled file. JavaScript code in this file should be added after the last require_* statement.
9
- //
10
- // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
11
- // about supported directives.
12
- //
13
- //= require_tree .
@@ -1,15 +0,0 @@
1
- /*
2
- * This is a manifest file that'll be compiled into application.css, which will include all the files
3
- * listed below.
4
- *
5
- * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
6
- * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path.
7
- *
8
- * You're free to add application-wide styles to this file and they'll appear at the bottom of the
9
- * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS
10
- * files in this directory. Styles in this file should be added after the last require_* statement.
11
- * It is generally better to create a new file per style scope.
12
- *
13
- *= require_tree .
14
- *= require_self
15
- */
@@ -1,4 +0,0 @@
1
- module StripeWrapper
2
- module ApplicationHelper
3
- end
4
- end
@@ -1,14 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <title>Stripe wrapper</title>
5
- <%= stylesheet_link_tag "stripe_wrapper/application", media: "all" %>
6
- <%= javascript_include_tag "stripe_wrapper/application" %>
7
- <%= csrf_meta_tags %>
8
- </head>
9
- <body>
10
-
11
- <%= yield %>
12
-
13
- </body>
14
- </html>
@@ -1,45 +0,0 @@
1
- <p id="notice"><%= notice %></p>
2
-
3
- <h1>Customers</h1>
4
-
5
- <table>
6
- <thead>
7
- <tr>
8
- <th>Customer</th>
9
- <th>Account balance</th>
10
- <th>Created</th>
11
- <th>Currency</th>
12
- <th>Default source</th>
13
- <th>Delinquent</th>
14
- <th>Description</th>
15
- <th>Discount</th>
16
- <th>Email</th>
17
- <th>Livemode</th>
18
- <th colspan="3"></th>
19
- </tr>
20
- </thead>
21
-
22
- <tbody>
23
- <% @customers.each do |customer| %>
24
- <tr>
25
- <td><%= customer.customer_id %></td>
26
- <td><%= customer.account_balance %></td>
27
- <td><%= customer.created %></td>
28
- <td><%= customer.currency %></td>
29
- <td><%= customer.default_source %></td>
30
- <td><%= customer.delinquent %></td>
31
- <td><%= customer.description %></td>
32
- <td><%= customer.discount %></td>
33
- <td><%= customer.email %></td>
34
- <td><%= customer.livemode %></td>
35
- <td><%= link_to 'Show', customer %></td>
36
- <td><%= link_to 'Edit', edit_customer_path(customer) %></td>
37
- <td><%= link_to 'Destroy', customer, method: :delete, data: { confirm: 'Are you sure?' } %></td>
38
- </tr>
39
- <% end %>
40
- </tbody>
41
- </table>
42
-
43
- <br>
44
-
45
- <%= link_to 'New Customer', new_customer_path %>