johnhenry 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/Rakefile +34 -0
  4. data/app/assets/images/johnhenry/home/welcome/ga-screenshot.jpg +0 -0
  5. data/app/assets/images/johnhenry/home/welcome/logo-bootstrap-html-css.jpg +0 -0
  6. data/app/assets/images/johnhenry/home/welcome/logo-heroku.jpg +0 -0
  7. data/app/assets/images/johnhenry/home/welcome/logo-stripe-users.jpg +0 -0
  8. data/app/assets/images/johnhenry/home/welcome/sign-in-screenshot.jpg +0 -0
  9. data/app/assets/images/johnhenry/home/welcome/sign-up-screenshot.jpg +0 -0
  10. data/app/assets/images/johnhenry/home/welcome/tree-bark.png +0 -0
  11. data/app/assets/images/johnhenry/spinner-primary.gif +0 -0
  12. data/app/assets/javascripts/johnhenry/application.js +16 -0
  13. data/app/assets/javascripts/johnhenry/form-require-validation.js +27 -0
  14. data/app/assets/javascripts/johnhenry/layout.js +6 -0
  15. data/app/assets/javascripts/johnhenry/payment-form.js +33 -0
  16. data/app/assets/stylesheets/johnhenry/application.css +21 -0
  17. data/app/assets/stylesheets/johnhenry/home.css.scss +27 -0
  18. data/app/assets/stylesheets/johnhenry/payment-form.css.scss +5 -0
  19. data/app/assets/stylesheets/johnhenry/payments.css.scss +3 -0
  20. data/app/controllers/johnhenry/application_controller.rb +39 -0
  21. data/app/controllers/johnhenry/home_controller.rb +25 -0
  22. data/app/controllers/johnhenry/payments_controller.rb +146 -0
  23. data/app/controllers/johnhenry/registrations_controller.rb +26 -0
  24. data/app/controllers/johnhenry/sessions_controller.rb +5 -0
  25. data/app/helpers/johnhenry/application_helper.rb +4 -0
  26. data/app/models/payment.rb +3 -0
  27. data/app/models/user.rb +6 -0
  28. data/app/views/johnhenry/devise/confirmations/new.html.haml +9 -0
  29. data/app/views/johnhenry/devise/mailer/confirmation_instructions.html.haml +4 -0
  30. data/app/views/johnhenry/devise/mailer/reset_password_instructions.html.haml +6 -0
  31. data/app/views/johnhenry/devise/mailer/unlock_instructions.html.haml +5 -0
  32. data/app/views/johnhenry/devise/passwords/edit.html.haml +14 -0
  33. data/app/views/johnhenry/devise/passwords/new.html.haml +9 -0
  34. data/app/views/johnhenry/devise/registrations/edit.html.haml +30 -0
  35. data/app/views/johnhenry/devise/registrations/new.html.haml +6 -0
  36. data/app/views/johnhenry/devise/sessions/new.html.haml +6 -0
  37. data/app/views/johnhenry/devise/shared/_links.haml +21 -0
  38. data/app/views/johnhenry/devise/unlocks/new.html.haml +9 -0
  39. data/app/views/johnhenry/home/welcome.html.haml +119 -0
  40. data/app/views/johnhenry/payments/_form.html.haml +19 -0
  41. data/app/views/johnhenry/payments/edit.html.haml +7 -0
  42. data/app/views/johnhenry/payments/index.html.haml +22 -0
  43. data/app/views/johnhenry/payments/index.json.jbuilder +4 -0
  44. data/app/views/johnhenry/payments/new.html.haml +5 -0
  45. data/app/views/johnhenry/payments/show.html.haml +19 -0
  46. data/app/views/johnhenry/payments/show.json.jbuilder +1 -0
  47. data/app/views/johnhenry/shared/_payment_form.html.haml +74 -0
  48. data/app/views/johnhenry/shared/_signin_form.html.haml +37 -0
  49. data/app/views/johnhenry/shared/_signup_form.html.haml +48 -0
  50. data/app/views/layouts/johnhenry/application.html.haml +65 -0
  51. data/config/initializers/devise.rb +258 -0
  52. data/config/routes.rb +12 -0
  53. data/db/development.sqlite3 +0 -0
  54. data/db/migrate/20140104011356_add_users_and_payments.rb +33 -0
  55. data/lib/Gemfile +19 -0
  56. data/lib/johnhenry.rb +4 -0
  57. data/lib/johnhenry/engine.rb +5 -0
  58. data/lib/johnhenry/version.rb +3 -0
  59. data/lib/tasks/johnhenry_tasks.rake +129 -0
  60. data/test/dummy/README.rdoc +28 -0
  61. data/test/dummy/Rakefile +6 -0
  62. data/test/dummy/app/assets/javascripts/application.js +13 -0
  63. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  64. data/test/dummy/app/controllers/application_controller.rb +5 -0
  65. data/test/dummy/app/helpers/application_helper.rb +2 -0
  66. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  67. data/test/dummy/bin/bundle +3 -0
  68. data/test/dummy/bin/rails +4 -0
  69. data/test/dummy/bin/rake +4 -0
  70. data/test/dummy/config.ru +4 -0
  71. data/test/dummy/config/application.rb +23 -0
  72. data/test/dummy/config/boot.rb +5 -0
  73. data/test/dummy/config/database.yml +25 -0
  74. data/test/dummy/config/environment.rb +5 -0
  75. data/test/dummy/config/environments/development.rb +29 -0
  76. data/test/dummy/config/environments/production.rb +80 -0
  77. data/test/dummy/config/environments/test.rb +36 -0
  78. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  79. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  80. data/test/dummy/config/initializers/inflections.rb +16 -0
  81. data/test/dummy/config/initializers/mime_types.rb +5 -0
  82. data/test/dummy/config/initializers/secret_token.rb +12 -0
  83. data/test/dummy/config/initializers/session_store.rb +3 -0
  84. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  85. data/test/dummy/config/locales/en.yml +23 -0
  86. data/test/dummy/config/routes.rb +4 -0
  87. data/test/dummy/public/404.html +58 -0
  88. data/test/dummy/public/422.html +58 -0
  89. data/test/dummy/public/500.html +57 -0
  90. data/test/dummy/public/favicon.ico +0 -0
  91. data/test/integration/navigation_test.rb +10 -0
  92. data/test/test_helper.rb +15 -0
  93. metadata +311 -0
@@ -0,0 +1,26 @@
1
+ class Johnhenry::RegistrationsController < Devise::RegistrationsController
2
+ before_filter :maybe_generate_password, only: [:create]
3
+ before_filter :noop_test_at_test_dot_com, only: [:create]
4
+
5
+ def new
6
+ render 'johnhenry/devise/registrations/new'
7
+ end
8
+
9
+ private
10
+
11
+ def maybe_generate_password
12
+ if params['user']['password'].blank? &&
13
+ params['user']['password_confirmation'].blank?
14
+ password = Devise.friendly_token.first(10)
15
+ params['user']['password'] = password
16
+ params['user']['password_confirmation'] = password
17
+ end
18
+ end
19
+
20
+ def noop_test_at_test_dot_com
21
+ if params['user']['email'] == 'test@test.com'
22
+ flash[:notice] = 'Almost created account for test@test.com.'
23
+ return redirect_to '/'
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,5 @@
1
+ class Johnhenry::SessionsController < Devise::SessionsController
2
+ def new
3
+ render 'johnhenry/devise/sessions/new'
4
+ end
5
+ end
@@ -0,0 +1,4 @@
1
+ module Johnhenry
2
+ module ApplicationHelper
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ class Payment < ActiveRecord::Base
2
+ belongs_to :user
3
+ end
@@ -0,0 +1,6 @@
1
+ class User < ActiveRecord::Base
2
+ # Include default devise modules. Others available are:
3
+ # :confirmable, :lockable, :timeoutable and :omniauthable
4
+ devise :database_authenticatable, :registerable,
5
+ :recoverable, :rememberable, :trackable, :validatable
6
+ end
@@ -0,0 +1,9 @@
1
+ %h2 Resend confirmation instructions
2
+ = form_for(resource, :as => resource_name, :url => confirmation_path(resource_name), :html => { :method => :post }) do |f|
3
+ = devise_error_messages!
4
+ %div
5
+ = f.label :email
6
+ %br/
7
+ = f.email_field :email, :autofocus => true
8
+ %div= f.submit "Resend confirmation instructions"
9
+ = render "devise/shared/links"
@@ -0,0 +1,4 @@
1
+ %p
2
+ Welcome #{@email}!
3
+ %p You can confirm your account email through the link below:
4
+ %p= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @token)
@@ -0,0 +1,6 @@
1
+ %p
2
+ Hello #{@resource.email}!
3
+ %p Someone has requested a link to change your password. You can do this through the link below.
4
+ %p= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @token)
5
+ %p If you didn't request this, please ignore this email.
6
+ %p Your password won't change until you access the link above and create a new one.
@@ -0,0 +1,5 @@
1
+ %p
2
+ Hello #{@resource.email}!
3
+ %p Your account has been locked due to an excessive number of unsuccessful sign in attempts.
4
+ %p Click the link below to unlock your account:
5
+ %p= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @token)
@@ -0,0 +1,14 @@
1
+ %h2 Change your password
2
+ = form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f|
3
+ = devise_error_messages!
4
+ = f.hidden_field :reset_password_token
5
+ %div
6
+ = f.label :password, "New password"
7
+ %br/
8
+ = f.password_field :password, :autofocus => true
9
+ %div
10
+ = f.label :password_confirmation, "Confirm new password"
11
+ %br/
12
+ = f.password_field :password_confirmation
13
+ %div= f.submit "Change my password"
14
+ = render "devise/shared/links"
@@ -0,0 +1,9 @@
1
+ %h2 Forgot your password?
2
+ = form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f|
3
+ = devise_error_messages!
4
+ %div
5
+ = f.label :email
6
+ %br/
7
+ = f.email_field :email, :autofocus => true
8
+ %div= f.submit "Send me reset password instructions"
9
+ = render "devise/shared/links"
@@ -0,0 +1,30 @@
1
+ %h2
2
+ Edit #{resource_name.to_s.humanize}
3
+ = form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f|
4
+ = devise_error_messages!
5
+ %div
6
+ = f.label :email
7
+ %br/
8
+ = f.email_field :email, :autofocus => true
9
+ - if devise_mapping.confirmable? && resource.pending_reconfirmation?
10
+ %div
11
+ Currently waiting confirmation for: #{resource.unconfirmed_email}
12
+ %div
13
+ = f.label :password
14
+ %i (leave blank if you don't want to change it)
15
+ %br/
16
+ = f.password_field :password, :autocomplete => "off"
17
+ %div
18
+ = f.label :password_confirmation
19
+ %br/
20
+ = f.password_field :password_confirmation
21
+ %div
22
+ = f.label :current_password
23
+ %i (we need your current password to confirm your changes)
24
+ %br/
25
+ = f.password_field :current_password
26
+ %div= f.submit "Update"
27
+ %h3 Cancel my account
28
+ %p
29
+ Unhappy? #{button_to "Cancel my account", registration_path(resource_name), :data => { :confirm => "Are you sure?" }, :method => :delete}
30
+ = link_to "Back", :back
@@ -0,0 +1,6 @@
1
+ .container
2
+ .form-row
3
+ %h1.col-xs-6.col-xs-offset-3.text-center Sign up
4
+ .form-row
5
+ .col-md-6.col-md-offset-3.col-sm-8.col-sm-offset-2.col-xs-12.form-group
6
+ = render 'johnhenry/shared/signup_form'
@@ -0,0 +1,6 @@
1
+ .container
2
+ .form-row
3
+ %h1.col-xs-12.text-center Sign in
4
+ .form-row
5
+ .col-md-6.col-md-offset-3.col-sm-8.col-sm-offset-2.col-xs-12.form-group
6
+ = render 'johnhenry/shared/signin_form'
@@ -0,0 +1,21 @@
1
+ - if controller_name != 'sessions'
2
+ Already have an account?
3
+ = link_to raw("Sign in &raquo"), new_session_path(resource_name), class: 'btn btn-info'
4
+ %br/
5
+ - if devise_mapping.registerable? && controller_name != 'registrations'
6
+ Need an account?
7
+ = link_to raw("Sign up &raquo"), new_registration_path(resource_name), class: 'btn btn-info'
8
+ %br/
9
+ - if devise_mapping.recoverable? && controller_name != 'passwords' && controller_name != 'registrations'
10
+ = link_to "Forgot your password?", new_password_path(resource_name)
11
+ %br/
12
+ - if devise_mapping.confirmable? && controller_name != 'confirmations'
13
+ = link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name)
14
+ %br/
15
+ - if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks'
16
+ = link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name)
17
+ %br/
18
+ - if devise_mapping.omniauthable?
19
+ - resource_class.omniauth_providers.each do |provider|
20
+ = link_to "Sign in with #{provider.to_s.titleize}", omniauth_authorize_path(resource_name, provider)
21
+ %br/
@@ -0,0 +1,9 @@
1
+ %h2 Resend unlock instructions
2
+ = form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f|
3
+ = devise_error_messages!
4
+ %div
5
+ = f.label :email
6
+ %br/
7
+ = f.email_field :email, :autofocus => true
8
+ %div= f.submit "Resend unlock instructions"
9
+ = render "devise/shared/links"
@@ -0,0 +1,119 @@
1
+ .container#hero-unit{ style: "background: url(#{ image_path('johnhenry/home/welcome/tree-bark.png') })" }
2
+ .row
3
+ .col-xs-12
4
+ %h1.text-center
5
+ New to Ruby on Rails? Launch a site like this in 10 minutes
6
+ .well.col-md-6.col-md-offset-3.col-sm-8.col-sm-offset-2.col-xs-10.col-xs-offset-1
7
+ %p
8
+ A blank canvas can be intimidating, even if learning Rails is something
9
+ you've wanted to do for years. With
10
+ %i John Henry Rails
11
+ you'll start with a web site like this one in under 10 minutes.
12
+ %p
13
+ Sign up to be notified when the John Henry Rails toolkit is available:
14
+ .col-md-8.col-md-offset-2.col-sm-8.col-sm-offset-2.col-xs-12
15
+ = render 'johnhenry/shared/signup_form',
16
+ generate_password: true,
17
+ autofocus: true,
18
+ cta: raw('Get Started For Free &raquo;')
19
+
20
+ .container#bootstrap
21
+ .row
22
+ .col-sm-6.col-xs-12
23
+ %h2 Leverage Twitter's Bootstrap 3.0
24
+ %p Sleek, intuitive, and powerful mobile first front-end framework for faster and easier web development.
25
+ .col-sm-6.col-xs-12.text-center
26
+ = image_tag "johnhenry/home/welcome/logo-bootstrap-html-css.jpg"
27
+
28
+ .container#stripe
29
+ .row
30
+ .col-xs-12
31
+ %h2 Start taking payments immediately with Stripe
32
+
33
+ .row
34
+ .col-sm-7.col-xs-12
35
+ %p Stripe makes it easy to start accepting credit cards on the web today
36
+ %ul
37
+ %li 2.9% + $.30 per transaction
38
+ %li Stripe stores card number and gives you a secure token
39
+ %li Quick and easy to switch between test and live mode
40
+ %li Used by major Internet companies
41
+ .col-sm-4.col-sm-offset-1.col-xs-12
42
+ = image_tag "johnhenry/home/welcome/logo-stripe-users.jpg"
43
+
44
+
45
+ .container#common-modules
46
+ .row.well
47
+ .col-xs-12
48
+ %h2 Launch your Ruby on Rails site in just minutes. Start now!
49
+ .col-md-4.col-md-offset-1.col-sm-12
50
+ = render 'johnhenry/shared/payment_form', amount: 7, cta: raw('Take the First Step &raquo;')
51
+ .col-md-6.col-md-offset-1
52
+ %h4
53
+ It's never been easier to set up a Ruby on Rails web site. You'll
54
+ have your first version live on the internet in just three easy steps:
55
+ %ol
56
+ %li Download `johnhenry` gem
57
+ %li Follow the installation guide
58
+ %li Deploy to Heroku
59
+
60
+ .container
61
+ .row
62
+ .col-xs-12
63
+ %h2 Bootstrapped Essential Pages
64
+ %h4
65
+ John Henry Rails includes basic user management pages
66
+ .row
67
+ %a{ href: new_user_session_path }
68
+ = image_tag 'johnhenry/home/welcome/sign-in-screenshot.jpg', class: 'col-sm-6 col-xs-12'
69
+ %a{ href: new_user_registration_path }
70
+ = image_tag 'johnhenry/home/welcome/sign-up-screenshot.jpg', class: 'col-sm-6 col-xs-12 '
71
+
72
+ .container#google-analytics
73
+ .row
74
+ .col-xs-12
75
+ %h2 Google Analytics
76
+ .row
77
+ .col-sm-6.col-xs-12
78
+ %ul
79
+ %li Monitor traffic
80
+ %li Link to AdWords
81
+ %li Set up conversion goals
82
+ = image_tag 'johnhenry/home/welcome/ga-screenshot.jpg', class: 'col-sm-6 col-xs-12'
83
+
84
+ .container#heroku
85
+ .row
86
+ .col-xs-12
87
+ %h2 Use Heroku and stop worrying about web hosting
88
+
89
+ .row
90
+ .col-sm-7.col-xs-12
91
+ %p
92
+ Deliver apps, the right way.
93
+ Cloud computing designed and built for developers.
94
+ %ul
95
+ %li Free tier sufficient for small web sites
96
+ %li Makes running a Rails App "foolproof"
97
+ %li Commonly used among Rails developers
98
+ .col-sm-5.col-xs-12.text-center
99
+ %br
100
+ %br
101
+ %br
102
+ = image_tag "johnhenry/home/welcome/logo-heroku.jpg"
103
+
104
+ .container#common-modules
105
+ .row
106
+ .col-md-6
107
+ %h2
108
+ Start with an existing project
109
+ %br
110
+ %ul
111
+ %li Learn by modifying
112
+ %li Use included components
113
+ %li Avoid common mistakes
114
+ %li Save time
115
+
116
+ .col-md-4.col-md-offset-1
117
+ %h4.text-center Example Signup Form
118
+ %h5.text-center Just one of many included forms
119
+ = render 'johnhenry/shared/signup_form', cta: raw('Example Button &raquo;')
@@ -0,0 +1,19 @@
1
+ = form_for @payment do |f|
2
+ - if @payment.errors.any?
3
+ #error_explanation
4
+ %h2= "#{pluralize(@payment.errors.count, "error")} prohibited this payment from being saved:"
5
+ %ul
6
+ - @payment.errors.full_messages.each do |msg|
7
+ %li= msg
8
+
9
+ .field
10
+ = f.label :user_id
11
+ = f.text_field :user_id
12
+ .field
13
+ = f.label :stripe_token
14
+ = f.text_field :stripe_token
15
+ .field
16
+ = f.label :stripe_customer_id
17
+ = f.text_field :stripe_customer_id
18
+ .actions
19
+ = f.submit 'Save'
@@ -0,0 +1,7 @@
1
+ %h1 Editing payment
2
+
3
+ = render 'form'
4
+
5
+ = link_to 'Show', @payment
6
+ \|
7
+ = link_to 'Back', payments_path
@@ -0,0 +1,22 @@
1
+ .container
2
+ .row
3
+ %h1.col-xs-12.text-center Payments
4
+
5
+ %table.col-xs-12
6
+ - if @payments.empty?
7
+ %i.col-xs-12.text-center — No payments —
8
+ - else
9
+ %tr
10
+ %th User
11
+ %th Stripe token
12
+ %th Stripe customer
13
+ %th
14
+ %th
15
+ %th
16
+
17
+ - @payments.each do |payment|
18
+ %tr
19
+ %td= payment.user_id
20
+ %td= payment.stripe_token
21
+ %td= payment.stripe_customer_id
22
+ %td= link_to 'Show', payment
@@ -0,0 +1,4 @@
1
+ json.array!(@payments) do |payment|
2
+ json.extract! payment, :id, :user_id, :stripe_token, :stripe_customer_id
3
+ json.url payment_url(payment, format: :json)
4
+ end
@@ -0,0 +1,5 @@
1
+ %h1 New payment
2
+
3
+ = render 'form'
4
+
5
+ = link_to 'Back', payments_path
@@ -0,0 +1,19 @@
1
+ .container
2
+ .row
3
+ .col-xs-12 &nbsp;
4
+ .row
5
+ .col-xs-12
6
+ %p
7
+ %b User:
8
+ = @payment.user.email
9
+ .col-xs-12
10
+ %p
11
+ %b Amount:
12
+ = @payment.amount
13
+ .col-xs-12
14
+ %p
15
+ %b Date:
16
+ = @payment.created_at
17
+ .container
18
+ .row
19
+ .col-xs-12= raw(@readme)
@@ -0,0 +1 @@
1
+ json.extract! @payment, :id, :user_id, :stripe_token, :stripe_customer_id, :created_at, :updated_at
@@ -0,0 +1,74 @@
1
+ %script{ src: 'https://js.stripe.com/v2/', type: 'text/javascript' }
2
+ = form_tag '/payments', id: 'payment-form', method: 'POST',
3
+ data: { 'stripe-publishable-key' => ENV['STRIPE_PUBLISHABLE_KEY'],
4
+ 'cc-on-file' => false }, class: 'require-validation' do
5
+ - if false
6
+ .form-row
7
+ We have your credit card information on file.
8
+ - else
9
+ .form-row
10
+ .col-xs-12.form-group.required
11
+ %label.control-label Email Address
12
+ - if signed_in?
13
+ %input.form-control{ size: '4', type: 'email',
14
+ value: current_user.email,
15
+ disabled: true }/
16
+ - elsif Rails.env.development?
17
+ - nonce = nil # Devise.friendly_token.first(10)
18
+ %input.form-control{ name: 'email', size: '4', type: 'email', value: "user+#{ nonce }@example.com" }/
19
+ - else
20
+ %input.form-control{ name: 'email', size: '4', type: 'email' }/
21
+
22
+ .form-row
23
+ .col-xs-12.form-group.card.required
24
+ %label.control-label Card Number
25
+ -# TODO stub in default values better for dev
26
+ - if Rails.env.development?
27
+ %input.form-control.card-number{ autocomplete: 'off', size: '20', type: 'text', value: '4242424242424242' }/
28
+ - else
29
+ %input.form-control.card-number{ autocomplete: 'off', size: '20', type: 'text' }/
30
+
31
+ .form-row
32
+ .col-xs-4.form-group.cvc.required
33
+ %label.control-label CVC
34
+ - if Rails.env.development?
35
+ %input.form-control.card-cvc{ autocomplete: 'off', size: '4', type: 'text', placeholder: 'ex. 311', value: '175' }/
36
+ - else
37
+ %input.form-control.card-cvc{ autocomplete: 'off', size: '4', type: 'text', placeholder: 'ex. 311' }/
38
+ .col-xs-4.form-group.expiration.required
39
+ %label.control-label Expiration
40
+ - if Rails.env.development?
41
+ %input.form-control.card-expiry-month{ size: '2', type: 'text', placeholder: 'MM', value: '04' }/
42
+ - else
43
+ %input.form-control.card-expiry-month{ size: '2', type: 'text', placeholder: 'MM' }/
44
+ .col-xs-4.form-group.expiration.required
45
+ %label.control-label &nbsp;
46
+ - if Rails.env.development?
47
+ %input.form-control.card-expiry-year{ size: '4', type: 'text', placeholder: 'YYYY', value: '2014' }/
48
+ - else
49
+ %input.form-control.card-expiry-year{ size: '4', type: 'text', placeholder: 'YYYY' }/
50
+
51
+ .form-row
52
+ .col-md-12
53
+ .form-control.total.btn.btn-info
54
+ Total:
55
+ %span.amount= number_to_currency(local_assigns[:amount].try(:to_f) || 50)
56
+
57
+ - %w(STRIPE_PUBLISHABLE_KEY STRIPE_SECRET_KEY).each do |env_var|
58
+ - if ENV[env_var].blank?
59
+ .form-row
60
+ .col-md-12
61
+ .form-control.total.btn.btn-warning{ style: 'margin-top: 10px; height: auto; white-space: normal' }
62
+ Environment variable `#{ env_var }` must be set for this
63
+ form to work.
64
+
65
+ .form-row
66
+ .col-md-12.form-group
67
+ %button.form-control.btn.btn-primary.submit-button{ type: 'submit' }
68
+ = image_tag 'johnhenry/spinner-primary.gif', class: 'hide'
69
+ = local_assigns[:cta] || raw('Pay &raquo;')
70
+
71
+ .form-row
72
+ .col-md-12.error.form-group.hide
73
+ .alert-danger.alert
74
+ Please fix the errors and try again.