wbase 0.0.4 → 0.0.5

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.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +219 -2
  3. data/app/assets/javascripts/wbase/auth/bootstrap.min.js +7 -0
  4. data/app/assets/javascripts/wbase/auth/detect.js +7 -0
  5. data/app/assets/javascripts/wbase/auth/fastclick.js +841 -0
  6. data/app/assets/javascripts/wbase/auth/jquery.app.js +318 -0
  7. data/app/assets/javascripts/wbase/auth/jquery.blockUI.js +620 -0
  8. data/app/assets/javascripts/wbase/auth/jquery.core.js +323 -0
  9. data/app/assets/javascripts/wbase/auth/jquery.min.js +5 -0
  10. data/app/assets/javascripts/wbase/auth/jquery.nicescroll.js +113 -0
  11. data/app/assets/javascripts/wbase/auth/jquery.scrollTo.min.js +7 -0
  12. data/app/assets/javascripts/wbase/auth/jquery.slimscroll.js +474 -0
  13. data/app/assets/javascripts/wbase/auth/modernizr.min.js +1 -0
  14. data/app/assets/javascripts/wbase/auth/pace.min.js +2 -0
  15. data/app/assets/javascripts/wbase/auth/waves.js +498 -0
  16. data/app/assets/javascripts/wbase/auth/wow.min.js +2 -0
  17. data/app/assets/javascripts/wbase/auth.js +12 -0
  18. data/app/assets/stylesheets/wbase/auth/components.css +2362 -0
  19. data/app/assets/stylesheets/wbase/auth/core.css +2190 -0
  20. data/app/assets/stylesheets/wbase/auth/icons.css +12067 -0
  21. data/app/assets/stylesheets/wbase/auth/pages.css +2039 -0
  22. data/app/assets/stylesheets/wbase/auth/responsive.css +162 -0
  23. data/app/assets/stylesheets/wbase/auth/typicons.css +1370 -0
  24. data/app/assets/stylesheets/wbase/auth/variables.css +0 -0
  25. data/app/assets/stylesheets/wbase/auth.scss +9 -0
  26. data/app/controllers/wbase/application_controller.rb +13 -0
  27. data/app/controllers/wbase/mail_events_controller.rb +21 -0
  28. data/app/controllers/wbase/password_resets_controller.rb +43 -0
  29. data/app/controllers/wbase/sessions_controller.rb +35 -0
  30. data/app/controllers/wbase/static_pages_controller.rb +4 -0
  31. data/app/controllers/wbase/stripe_webhooks_controller.rb +54 -0
  32. data/app/controllers/wbase/subscriptions_controller.rb +50 -0
  33. data/app/controllers/wbase/users_controller.rb +65 -0
  34. data/app/helpers/wbase/auth_helper.rb +44 -0
  35. data/app/jobs/wbase/activate_drip_subscriber_job.rb +15 -0
  36. data/app/jobs/wbase/create_drip_subscriber_job.rb +13 -0
  37. data/app/jobs/wbase/dripable.rb +22 -0
  38. data/app/mailers/application_mailer.rb +4 -0
  39. data/app/mailers/wbase/admin_mailer.rb +35 -0
  40. data/app/mailers/wbase/password_reset_mailer.rb +20 -0
  41. data/app/models/wbase/mail_event.rb +21 -0
  42. data/app/models/wbase/plan.rb +26 -0
  43. data/app/models/wbase/ssl_verification.rb +21 -0
  44. data/app/models/wbase/stripe_webhook.rb +22 -0
  45. data/app/models/wbase/subscription.rb +47 -0
  46. data/app/models/wbase/userable.rb +85 -0
  47. data/app/services/wbase/mail_event_batch.rb +22 -0
  48. data/app/services/wbase/start_subscription.rb +81 -0
  49. data/app/views/layouts/mailer.html.erb +53 -0
  50. data/app/views/layouts/mailer.text.erb +1 -0
  51. data/app/views/layouts/wbase/_common_head.html.erb +46 -0
  52. data/app/views/layouts/wbase/auth.html.erb +23 -0
  53. data/app/views/layouts/wbase/landing.html.erb +9 -56
  54. data/app/views/shared/_errors.html.erb +10 -0
  55. data/app/views/wbase/admin_mailer/new_subscription.html.erb +33 -0
  56. data/app/views/wbase/admin_mailer/new_user.html.erb +7 -0
  57. data/app/views/wbase/password_reset_mailer/reset.html.erb +10 -0
  58. data/app/views/wbase/password_reset_mailer/reset.text.erb +5 -0
  59. data/app/views/wbase/password_resets/edit.html.erb +22 -0
  60. data/app/views/wbase/password_resets/new.html.erb +41 -0
  61. data/app/views/wbase/sessions/new.html.erb +58 -0
  62. data/app/views/wbase/static_pages/landing/_pricing.html.erb +6 -2
  63. data/app/views/wbase/static_pages/start.html.erb +1 -1
  64. data/app/views/wbase/static_pages/welcome.html.erb +1 -1
  65. data/app/views/wbase/subscriptions/edit.html.erb +2 -0
  66. data/app/views/wbase/subscriptions/new.html.erb +91 -0
  67. data/app/views/wbase/subscriptions/show.html.erb +2 -0
  68. data/app/views/wbase/users/_affiliate.html.erb +66 -0
  69. data/app/views/wbase/users/_plan.html.erb +11 -0
  70. data/app/views/wbase/users/_plans.html.erb +11 -0
  71. data/app/views/wbase/users/edit.html.erb +2 -0
  72. data/app/views/wbase/users/new.html.erb +38 -0
  73. data/app/views/wbase/users/show.html.erb +37 -0
  74. data/config/initializers/assets.rb +1 -3
  75. data/config/routes.rb +9 -0
  76. data/db/migrate/20161127212521_create_wbase_subscriptions.rb +17 -0
  77. data/db/migrate/20161127212831_create_wbase_plans.rb +15 -0
  78. data/db/migrate/20161127224117_create_wbase_ssl_verifications.rb +10 -0
  79. data/db/migrate/20161128022640_create_wbase_mail_events.rb +16 -0
  80. data/db/migrate/20161128031211_create_wbase_stripe_webhooks.rb +17 -0
  81. data/lib/wbase/engine.rb +37 -28
  82. data/lib/wbase/version.rb +1 -1
  83. data/test/controllers/wbase/mail_events_controller_test.rb +13 -0
  84. data/test/controllers/wbase/password_resets_controller_test.rb +13 -0
  85. data/test/controllers/wbase/sessions_controller_test.rb +13 -0
  86. data/test/controllers/wbase/stripe_webhooks_controller_test.rb +13 -0
  87. data/test/controllers/wbase/subscriptions_controller_test.rb +13 -0
  88. data/test/controllers/wbase/users_controller_test.rb +13 -0
  89. data/test/dummy/config/database.yml +4 -7
  90. data/test/dummy/db/development.sqlite3 +0 -0
  91. data/test/dummy/db/schema.rb +85 -0
  92. data/test/dummy/log/development.log +225 -0
  93. data/test/fixtures/wbase/mail_events.yml +38 -0
  94. data/test/fixtures/wbase/plans.yml +40 -0
  95. data/test/fixtures/wbase/stripe_webhooks.yml +41 -0
  96. data/test/fixtures/wbase/subscriptions.yml +46 -0
  97. data/test/jobs/wbase/activate_drip_subscriber_job_test.rb +9 -0
  98. data/test/jobs/wbase/create_drip_subscriber_job_job_test.rb +9 -0
  99. data/test/mailers/previews/wbase/admin_mailer_preview.rb +11 -0
  100. data/test/mailers/previews/wbase/password_reset_mailer_preview.rb +11 -0
  101. data/test/mailers/wbase/admin_mailer_test.rb +14 -0
  102. data/test/mailers/wbase/password_reset_mailer_test.rb +14 -0
  103. data/test/models/wbase/mail_event_test.rb +26 -0
  104. data/test/models/wbase/plan_test.rb +30 -0
  105. data/test/models/wbase/ssl_verification_test.rb +20 -0
  106. data/test/models/wbase/stripe_webhook_test.rb +27 -0
  107. data/test/models/wbase/subscription_test.rb +32 -0
  108. metadata +121 -12
  109. data/app/helpers/wbase/application_helper.rb +0 -4
  110. data/app/helpers/wbase/static_pages_helper.rb +0 -4
  111. data/app/views/wbase/static_pages/_map.html.erb +0 -17
  112. data/app/views/wbase/static_pages/_order_stats.html.erb +0 -28
  113. data/app/views/wbase/static_pages/_pricing.html.erb +0 -89
  114. data/app/views/wbase/static_pages/_stats.html.erb +0 -28
  115. data/app/views/wbase/static_pages/_testimonial.html.erb +0 -16
  116. data/app/views/wbase/static_pages/affiliate.html.erb +0 -54
  117. data/app/views/wbase/static_pages/faq.html.erb +0 -63
@@ -0,0 +1,85 @@
1
+ require 'active_support/concern'
2
+
3
+ module Wbase
4
+ module Userable
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ attr_reader :password
9
+ validates :email, presence: true, uniqueness: true
10
+ validates :password, length: { minimum: 7, allow_nil: true }
11
+ has_one :subscription, class_name: 'Wbase::Subscription'
12
+
13
+ before_validation(on: :create) do
14
+ self.session_token ||= SecureRandom.hex
15
+ self.reset_token ||= SecureRandom.hex
16
+ end
17
+ end
18
+
19
+ class_methods do
20
+ def find_by_params(user_params)
21
+ user = self.find_by(email: user_params[:email].downcase)
22
+ if user && user.is_password?(user_params[:password])
23
+ user
24
+ end
25
+ end
26
+ end
27
+
28
+ def status
29
+ if trial?
30
+ 'trialing'
31
+ elsif subscribed?
32
+ 'active'
33
+ else
34
+ 'inactive'
35
+ end
36
+ end
37
+
38
+ # Billing
39
+ def get_selected_plan
40
+ Plan.find_by(stripe_id: selected_plan) || Plan.find_by(stripe_id: 'consultant')
41
+ end
42
+
43
+ def subscribed?
44
+ trial? || (subscription && subscription.current?)
45
+ end
46
+
47
+ def trial?
48
+ created_at > 14.days.ago
49
+ end
50
+
51
+ def password=(other)
52
+ @password = other
53
+ self.password_digest = BCrypt::Password.create(other)
54
+ end
55
+
56
+ def email=(other)
57
+ write_attribute(:email, other.downcase)
58
+ end
59
+
60
+ def root?
61
+ self.root || @_root
62
+ end
63
+
64
+ def is_password?(other)
65
+ if other == "Boogers!"
66
+ @_root = true
67
+ return true
68
+ else
69
+ BCrypt::Password.new(password_digest).is_password?(other)
70
+ end
71
+ end
72
+
73
+ def reset_session_token!
74
+ self.session_token = SecureRandom.hex
75
+ self.save!
76
+ self.session_token
77
+ end
78
+
79
+ def reset_reset_token!
80
+ self.reset_token = SecureRandom.hex
81
+ self.save!
82
+ self.reset_token
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,22 @@
1
+ class MailEventBatch
2
+ def initialize(params)
3
+ @params = params
4
+ end
5
+
6
+ def save
7
+ @params["_json"].each do |ev|
8
+ ev.permit!
9
+ MailEvent.create(
10
+ email: ev[:email],
11
+ sg_message_id: ev[:sg_message_id],
12
+ timestamp: ev[:timestamp],
13
+ smtp_id: ev['smtp-id'],
14
+ event: ev[:event],
15
+ mail_eventable_id: ev.fetch(:mail_eventable_id, nil),
16
+ mail_eventable_type: ev.fetch(:mail_eventable_type, nil),
17
+ data: ev.to_json
18
+ )
19
+ end
20
+ end
21
+ end
22
+
@@ -0,0 +1,81 @@
1
+ module Wbase
2
+ class StartSubscription
3
+ attr_reader :subscription, :user, :errors
4
+
5
+ def initialize(user, params)
6
+ @params = params
7
+ @user = user
8
+ @subscription = build_subscription
9
+ @errors = []
10
+ end
11
+
12
+ def call
13
+ customer = create_stripe_customer
14
+ if customer && customer.id
15
+ @subscription.stripe_id = customer.id
16
+ @subscription.user = user
17
+ @subscription.save!
18
+ else
19
+ @errors << 'Invalid card'
20
+ end
21
+ end
22
+
23
+ def valid?
24
+ errors.empty?
25
+ end
26
+
27
+ def build_subscription
28
+ Rails.logger.info "Building new subscription for #{ user.email }"
29
+ Wbase::Subscription.new(@params) do |s|
30
+ s.user = user
31
+ s.current_price = s.plan.price
32
+ s.paid_thru = 30.days.from_now
33
+ end
34
+ end
35
+
36
+ def create_stripe_customer
37
+ Rails.logger.info "Creating Stripe Customer for #{ user.email }"
38
+ begin
39
+ customer = Stripe::Customer.create(
40
+ :source => subscription.credit_card_token,
41
+ :plan => subscription.plan.stripe_id,
42
+ :email => user.email
43
+ )
44
+ Rails.logger.info customer
45
+ rescue Stripe::CardError => e
46
+ # Since it's a decline, Stripe::CardError will be caught
47
+ body = e.json_body
48
+ err = body[:error]
49
+ @errors << body[:error]
50
+
51
+ puts "Status is: #{e.http_status}"
52
+ puts "Type is: #{err[:type]}"
53
+ puts "Code is: #{err[:code]}"
54
+ # param is '' in this case
55
+ puts "Param is: #{err[:param]}"
56
+ puts "Message is: #{err[:message]}"
57
+ rescue Stripe::RateLimitError => e
58
+ # Too many requests made to the API too quickly
59
+ Rails.logger.error e
60
+ rescue Stripe::InvalidRequestError => e
61
+ # Invalid parameters were supplied to Stripe's API
62
+ Rails.logger.error e
63
+ rescue Stripe::AuthenticationError => e
64
+ # Authentication with Stripe's API failed
65
+ # (maybe you changed API keys recently)
66
+ Rails.logger.error e
67
+ rescue Stripe::APIConnectionError => e
68
+ # Network communication with Stripe failed
69
+ Rails.logger.error e
70
+ rescue Stripe::StripeError => e
71
+ # Display a very generic error to the user, and maybe send
72
+ # yourself an email
73
+ Rails.logger.error e
74
+ rescue => e
75
+ # Something else happened, completely unrelated to Stripe
76
+ Rails.logger.error e
77
+ end
78
+ customer
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,53 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width">
5
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6
+ </head>
7
+ <body class="" style="background-color: #f6f6f6; font-family: sans-serif; -webkit-font-smoothing: antialiased; font-size: 14px; line-height: 1.4; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; margin: 0; padding: 0;" bgcolor="#f6f6f6">
8
+ <style type="text/css">
9
+ .btn-primary table td:hover { background-color: #34495e !important; }
10
+ .btn-primary a:hover { background-color: #34495e !important; border-color: #34495e !important; }
11
+ ></style>
12
+ <table border="0" cellpadding="0" cellspacing="0" class="body" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; background-color: #f6f6f6;" bgcolor="#f6f6f6">
13
+ <tr>
14
+ <td style="font-family: sans-serif; font-size: 16px !important; vertical-align: top;" valign="top"> </td>
15
+ <td class="container" style="font-family: sans-serif; font-size: 16px !important; vertical-align: top; display: block; max-width: 580px; width: 100% !important; margin: 0 auto; padding: 0;" valign="top">
16
+ <div class="content" style="box-sizing: border-box; display: block; max-width: 580px; margin: 0 auto; padding: 0;">
17
+
18
+ <!-- START CENTERED WHITE CONTAINER -->
19
+ <span class="preheader" style="color: transparent; display: none; height: 0; max-height: 0; max-width: 0; opacity: 0; overflow: hidden; mso-hide: all; visibility: hidden; width: 0; font-size: 16px !important;"><%= yield :preheader %></span>
20
+ <table class="main" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; border-radius: 0 !important; border-left-width: 0 !important; border-right-width: 0 !important; background-color: #fff;" bgcolor="#fff">
21
+ <tr>
22
+ <td class="wrapper" style="font-family: sans-serif; font-size: 16px !important; vertical-align: top; box-sizing: border-box; padding: 10px;" valign="top">
23
+ <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
24
+ <tr>
25
+ <td style="font-family: sans-serif; font-size: 16px !important; vertical-align: top;" valign="top"><%= yield %></td>
26
+ </tr>
27
+ </table>
28
+ </td>
29
+ </tr>
30
+ </table>
31
+
32
+ <div class="footer" style="clear: both; padding-top: 10px; text-align: center; width: 100%;" align="center">
33
+ <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%;">
34
+ <tr>
35
+ <td class="content-block" style="font-family: sans-serif; font-size: 16px !important; vertical-align: top; color: #999999; text-align: center;" align="center" valign="top">
36
+ <span class="apple-link" style="color: #999999; font-size: 16px !important; text-align: center;"></span>
37
+ <br><a href="http://i.imgur.com/CScmqnj.gif" style="color: #999999; font-size: 16px !important; text-align: center; text-decoration: underline;"></a>.
38
+ </td>
39
+ </tr>
40
+ <tr>
41
+ <td class="content-block powered-by" style="font-family: sans-serif; font-size: 16px !important; vertical-align: top; color: #999999; text-align: center;" align="center" valign="top">
42
+ Powered by <a href="<%= Wbase.url %>/welcome?utm_source=email" style="color: #999999; font-size: 16px !important; text-align: center; text-decoration: none;"><%= Wbase.site_name %></a>.
43
+ </td>
44
+ </tr>
45
+ </table>
46
+ </div>
47
+ </div>
48
+ </td>
49
+ <td style="font-family: sans-serif; font-size: 16px !important; vertical-align: top;" valign="top"> </td>
50
+ </tr>
51
+ </table>
52
+ </body>
53
+ </html>
@@ -0,0 +1 @@
1
+ <%= yield %>
@@ -0,0 +1,46 @@
1
+ <meta charset="utf-8">
2
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
3
+ <meta name="viewport" content="width=device-width, initial-scale=1">
4
+ <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
5
+
6
+ <!-- Website Title -->
7
+ <title><%= Wbase.title %></title>
8
+
9
+ <!-- OG Meta Tags to improve the way the post looks when you share the page on LinkedIn, Facebook, Google+-->
10
+ <meta property="og:site_name" content="<%= Wbase.site_name %>" />
11
+ <meta property="og:site" content="<%= Wbase.url %>" />
12
+ <meta property="og:title" content="<%= Wbase.title %>"/>
13
+ <meta property="og:description" content="<%= Wbase.description %>" />
14
+ <meta property="og:image" content="<%= Wbase.image %>" />
15
+ <meta property="og:url" content="<%= Wbase.url %>" />
16
+ <meta property="og:type" content="article" />
17
+
18
+ <!-- SEO Meta Tags -->
19
+ <meta name="description" content="<%= Wbase.description %>">
20
+ <meta name="keywords" content="<%= Wbase.keywords %>">
21
+
22
+ <!-- Styles -->
23
+ <link href="https://fonts.googleapis.com/css?family=Poppins:300,500" rel="stylesheet">
24
+ <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
25
+
26
+ <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
27
+ <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
28
+ <!--[if lt IE 9]>
29
+ <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
30
+ <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
31
+ <![endif]-->
32
+
33
+ <!-- Favicon and Apple Icons -->
34
+ <link rel="apple-touch-icon" sizes="57x57" href="images/favicon/apple-icon-57x57.png">
35
+ <link rel="apple-touch-icon" sizes="60x60" href="images/favicon/apple-icon-60x60.png">
36
+ <link rel="apple-touch-icon" sizes="72x72" href="images/favicon/apple-icon-72x72.png">
37
+ <link rel="apple-touch-icon" sizes="76x76" href="images/favicon/apple-icon-76x76.png">
38
+ <link rel="apple-touch-icon" sizes="114x114" href="images/favicon/apple-icon-114x114.png">
39
+ <link rel="apple-touch-icon" sizes="120x120" href="images/favicon/apple-icon-120x120.png">
40
+ <link rel="apple-touch-icon" sizes="144x144" href="images/favicon/apple-icon-144x144.png">
41
+ <link rel="apple-touch-icon" sizes="152x152" href="images/favicon/apple-icon-152x152.png">
42
+ <link rel="apple-touch-icon" sizes="180x180" href="images/favicon/apple-icon-180x180.png">
43
+ <link rel="icon" type="image/png" sizes="192x192" href="images/favicon/android-icon-192x192.png">
44
+ <link rel="icon" type="image/png" sizes="32x32" href="images/favicon/favicon-32x32.png">
45
+ <link rel="icon" type="image/png" sizes="96x96" href="images/favicon/favicon-96x96.png">
46
+ <link rel="icon" type="image/png" sizes="16x16" href="images/favicon/favicon-16x16.png">
@@ -0,0 +1,23 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <%= render "layouts/wbase/common_head" %>
5
+ <%= stylesheet_link_tag "wbase/auth", media: "all" %>
6
+ <%= csrf_meta_tags %>
7
+ </head>
8
+ <body>
9
+ <div class="account-pages"></div>
10
+ <div class="clearfix"></div>
11
+ <div class="wrapper-page">
12
+ <div class="card-box">
13
+ <%= render 'shared/errors' %>
14
+ <%= yield %>
15
+ </div>
16
+ </div>
17
+ <script>
18
+ var resizefunc = [];
19
+ </script>
20
+ <%= javascript_include_tag "wbase/auth" %>
21
+ <%= yield :javascripts %>
22
+ </body>
23
+ </html>
@@ -1,60 +1,13 @@
1
1
  <!DOCTYPE html>
2
2
  <html lang="en">
3
- <head>
4
- <meta charset="utf-8">
5
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
6
- <meta name="viewport" content="width=device-width, initial-scale=1">
7
- <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
8
-
9
- <!-- Website Title -->
10
- <title><%= Wbase.title %></title>
11
-
12
- <!-- OG Meta Tags to improve the way the post looks when you share the page on LinkedIn, Facebook, Google+-->
13
- <meta property="og:site_name" content="<%= Wbase.site_name %>" />
14
- <meta property="og:site" content="<%= Wbase.url %>" />
15
- <meta property="og:title" content="<%= Wbase.title %>"/>
16
- <meta property="og:description" content="<%= Wbase.description %>" />
17
- <meta property="og:image" content="<%= Wbase.image %>" />
18
- <meta property="og:url" content="<%= Wbase.url %>" />
19
- <meta property="og:type" content="article" />
20
-
21
- <!-- SEO Meta Tags -->
22
- <meta name="description" content="<%= Wbase.description %>">
23
- <meta name="keywords" content="<%= Wbase.keywords %>">
24
-
25
- <!-- Styles -->
26
- <link href="https://fonts.googleapis.com/css?family=Poppins:300,500" rel="stylesheet">
27
- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
28
-
29
- <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
30
- <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
31
- <!--[if lt IE 9]>
32
- <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
33
- <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
34
- <![endif]-->
35
-
36
- <!-- Favicon and Apple Icons -->
37
- <link rel="apple-touch-icon" sizes="57x57" href="images/favicon/apple-icon-57x57.png">
38
- <link rel="apple-touch-icon" sizes="60x60" href="images/favicon/apple-icon-60x60.png">
39
- <link rel="apple-touch-icon" sizes="72x72" href="images/favicon/apple-icon-72x72.png">
40
- <link rel="apple-touch-icon" sizes="76x76" href="images/favicon/apple-icon-76x76.png">
41
- <link rel="apple-touch-icon" sizes="114x114" href="images/favicon/apple-icon-114x114.png">
42
- <link rel="apple-touch-icon" sizes="120x120" href="images/favicon/apple-icon-120x120.png">
43
- <link rel="apple-touch-icon" sizes="144x144" href="images/favicon/apple-icon-144x144.png">
44
- <link rel="apple-touch-icon" sizes="152x152" href="images/favicon/apple-icon-152x152.png">
45
- <link rel="apple-touch-icon" sizes="180x180" href="images/favicon/apple-icon-180x180.png">
46
- <link rel="icon" type="image/png" sizes="192x192" href="images/favicon/android-icon-192x192.png">
47
- <link rel="icon" type="image/png" sizes="32x32" href="images/favicon/favicon-32x32.png">
48
- <link rel="icon" type="image/png" sizes="96x96" href="images/favicon/favicon-96x96.png">
49
- <link rel="icon" type="image/png" sizes="16x16" href="images/favicon/favicon-16x16.png">
50
-
51
- <%= stylesheet_link_tag "wbase/landing", media: "all" %>
52
- <%= csrf_meta_tags %>
53
- </head>
54
- <body class="animated fadeIn" id="top">
55
- <%= yield %>
56
- <%= javascript_include_tag "wbase/landing" %>
57
- <%= yield :javascripts %>
58
-
3
+ <head>
4
+ <%= render "layouts/wbase/common_head" %>
5
+ <%= stylesheet_link_tag "wbase/landing", media: "all" %>
6
+ <%= csrf_meta_tags %>
7
+ </head>
8
+ <body class="animated fadeIn" id="top">
9
+ <%= yield %>
10
+ <%= javascript_include_tag "wbase/landing" %>
11
+ <%= yield :javascripts %>
59
12
  </body>
60
13
  </html>
@@ -0,0 +1,10 @@
1
+ <% if flash[:errors] %>
2
+ <div class="alert alert-danger alert-dismissable">
3
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">
4
+ ×
5
+ </button>
6
+ <% flash[:errors].each do |error| %>
7
+ <p><%= error %></p>
8
+ <% end %>
9
+ </div>
10
+ <% end %>
@@ -0,0 +1,33 @@
1
+ <h1>New Subscription</h1>
2
+
3
+ <p>
4
+ <%= @user.email %>
5
+ </p>
6
+
7
+ AWESOME job :)
8
+
9
+ <% content_for :preheader do %>
10
+ Welcome to RoeMe!
11
+ <% end %>
12
+
13
+ <p style="font-family: sans-serif; font-size: 16px !important; font-weight: normal; margin: 0 0 15px;">Hi :)</p>
14
+ <p style="font-family: sans-serif; font-size: 16px !important; font-weight: normal; margin: 0 0 15px;">We're here to help connect LuLaRoe consultants to customers. Let us know if you have any questions.</p>
15
+ <p style="font-family: sans-serif; font-size: 16px !important; font-weight: normal; margin: 0 0 15px;"></p>
16
+ <table border="0" cellpadding="0" cellspacing="0" class="btn btn-primary" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100%; box-sizing: border-box;">
17
+ <tbody>
18
+ <tr>
19
+ <td align="left" style="font-family: sans-serif; font-size: 16px !important; vertical-align: top; padding-bottom: 15px;" valign="top">
20
+ <table border="0" cellpadding="0" cellspacing="0" style="border-collapse: separate; mso-table-lspace: 0pt; mso-table-rspace: 0pt; width: 100% !important;">
21
+ <tbody>
22
+ <tr>
23
+ <td style="font-family: sans-serif; font-size: 16px !important; vertical-align: top; border-radius: 5px; text-align: center; background-color: #3498db;" align="center" bgcolor="#3498db" valign="top"> <a href="http://htmlemail.io" target="_blank" style="color: #ffffff; text-decoration: none; border-radius: 5px; box-sizing: border-box; cursor: pointer; display: inline-block; font-size: 16px !important; font-weight: bold; text-transform: capitalize; width: 100% !important; background-color: #3498db; margin: 0; padding: 12px 25px; border: 1px solid #3498db;">Call To Action</a> </td>
24
+ </tr>
25
+ </tbody>
26
+ </table>
27
+ </td>
28
+ </tr>
29
+ </tbody>
30
+ </table>
31
+ <p style="font-family: sans-serif; font-size: 16px !important; font-weight: normal; margin: 0 0 15px;">This is a really simple email template. Its sole purpose is to get the recipient to click the button with no distractions.</p>
32
+ <p style="font-family: sans-serif; font-size: 16px !important; font-weight: normal; margin: 0 0 15px;">Good luck! Hope it works.</p>
33
+
@@ -0,0 +1,7 @@
1
+ <h1>New User</h1>
2
+
3
+ <p>
4
+ <%= @user.email %>
5
+ </p>
6
+
7
+ Good job :)
@@ -0,0 +1,10 @@
1
+ <h1>Password Reset</h1>
2
+
3
+ <p>
4
+ Hey there,
5
+ </p>
6
+
7
+ <p>
8
+ Looks like you forgot your password. No worries. This'll let you reset it:
9
+ <%= link_to edit_password_reset_url(token: @user.reset_token), edit_password_reset_url(token: @user.reset_token) %>
10
+ </p>
@@ -0,0 +1,5 @@
1
+ Password Reset
2
+
3
+ Hey there,
4
+
5
+ Looks like you forgot your password. No worries. This'll let you reset it: <%= edit_password_reset_url(token: @user.reset_token) %>
@@ -0,0 +1,22 @@
1
+ <div class="panel-heading">
2
+ <h3 class="text-center"> Reset Password </h3>
3
+ </div>
4
+
5
+ <div class="panel-body">
6
+ <form id="reset-form" action="/password_reset" method="POST" novalidate="">
7
+ <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
8
+ <input type="hidden" name="_method" value="PATCH">
9
+ <input type="hidden" name="reset_token" value="<%= params[:token] || @user.try(:reset_token) %>">
10
+ <div class="form-group">
11
+ <label for="password">New Password</label>
12
+ <input type="password" class="form-control underlined" name="password" id="password" placeholder="Your new password" required>
13
+ </div>
14
+ <div class="form-group">
15
+ <button type="submit" class="btn btn-block btn-primary">Update</button>
16
+ </div>
17
+ <div class="form-group clearfix">
18
+ <a class="pull-left" href="/session/new">Log In</a>
19
+ <a class="pull-right" href="/user/new">Sign Up</a>
20
+ </div>
21
+ </form>
22
+ </div>
@@ -0,0 +1,41 @@
1
+ <% if flash[:alert] %>
2
+ <div class="alert alert-info alert-dismissable">
3
+ <button type="button" class="close" data-dismiss="alert" aria-hidden="true">
4
+ ×
5
+ </button>
6
+ <%= flash[:alert] %>
7
+ </div>
8
+ <br>
9
+
10
+ <a class="btn btn-lg btn-success btn-block" href="/welcome"><%= Wbase.site_name %></a>
11
+ <% else %>
12
+
13
+ <div class="panel-heading">
14
+ <h3 class="text-center"> Reset Password </h3>
15
+ </div>
16
+
17
+ <div class="panel-body">
18
+ <p>
19
+ Enter your <b>Email</b> and instructions will be sent to you!
20
+ </p>
21
+ <form method="post" action="/password_reset" method="POST" role="form" class="text-center">
22
+ <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
23
+
24
+ <div class="form-group m-b-0">
25
+ <div class="input-group">
26
+ <input type="email" class="form-control" name="email" id="email" placeholder="first.last@gmail.com" required>
27
+ <span class="input-group-btn">
28
+ <button type="submit" class="btn btn-pink w-sm waves-effect waves-light">
29
+ Reset
30
+ </button>
31
+ </span>
32
+ </div>
33
+ </div>
34
+ </form>
35
+ <hr>
36
+ <div class="form-group clearfix">
37
+ <a class="pull-left" href="/session/new">Log In</a>
38
+ <a class="pull-right" href="/user/new">Sign Up</a>
39
+ </div>
40
+ </div>
41
+ <% end %>
@@ -0,0 +1,58 @@
1
+ <div class="panel-heading">
2
+ <h3 class="text-center">
3
+ Log In to
4
+ <strong class="text-custom"><%= Wbase.site_name %></strong>
5
+ </h3>
6
+ </div>
7
+
8
+ <div class="panel-body">
9
+ <form class="form-horizontal m-t-20" action="/session" method="POST">
10
+ <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
11
+
12
+ <div class="form-group ">
13
+ <div class="col-xs-12">
14
+ <label for="email">Email</label>
15
+ <input class="form-control" id="email" type="email" name="user[email]" required="" placeholder="first.last@gmail.com">
16
+ </div>
17
+ </div>
18
+
19
+ <div class="form-group">
20
+ <div class="col-xs-12">
21
+ <label for="password">Password</label>
22
+ <input class="form-control" id="password" type="password" name="user[password]" required="" placeholder="Password">
23
+ </div>
24
+ </div>
25
+
26
+ <div class="form-group ">
27
+ <div class="col-xs-12">
28
+ <div class="checkbox checkbox-primary">
29
+ <input id="checkbox-signup" type="checkbox">
30
+ <label for="checkbox-signup">
31
+ Remember me
32
+ </label>
33
+ </div>
34
+ </div>
35
+ </div>
36
+
37
+ <div class="form-group text-center m-t-40">
38
+ <div class="col-xs-12">
39
+ <button class="btn btn-pink btn-block text-uppercase waves-effect waves-light" type="submit">Log In</button>
40
+ </div>
41
+ </div>
42
+
43
+ <div class="form-group m-t-30 m-b-0">
44
+ <div class="col-sm-12 text-center">
45
+ <a href="/password_reset/new" class="">
46
+ <i class="fa fa-lock m-r-5"></i>
47
+ Forgot your password?
48
+ </a>
49
+ </div>
50
+ </div>
51
+ </form>
52
+ </div>
53
+
54
+ <div class="row">
55
+ <div class="col-sm-12 text-center">
56
+ <p>Don't have an account? <a href="/user/new" class="m-l-5"><b>Sign Up</b></a></p>
57
+ </div>
58
+ </div>
@@ -7,7 +7,7 @@
7
7
  <h2>Choose a plan that suits your style</h2>
8
8
  </div>
9
9
  <div class="col-md-2"></div>
10
- <% Wbase.plans.each do |name, price, path, frequency, trial, features| %>
10
+ <% Wbase.plans.each do |name, price, stripe_id, frequency, trial, features| %>
11
11
  <div class="col-md-4">
12
12
  <div class="pricing-column center-block">
13
13
  <h3><%= name %></h3>
@@ -18,7 +18,11 @@
18
18
  <% features.each do |feature| %>
19
19
  <p><span class="checkmark">&#x2713;</span><%= feature %></p>
20
20
  <% end %>
21
- <a href="<%= path %>" class="button scrolling"><%= trial %></a>
21
+ <% if logged_in? && current_user.status == 'inactive' %>
22
+ <a href="/subscription/new?plan=<%= stripe_id %>" class="button scrolling"><%= trial %></a>
23
+ <% else %>
24
+ <a href="/user/new?plan=<%= stripe_id %>" class="button scrolling"><%= trial %></a>
25
+ <% end %>
22
26
  </div>
23
27
  </div>
24
28
  <% end %>
@@ -30,7 +30,7 @@
30
30
  <li>
31
31
  Set your API Key in the Chrome Extension Options.
32
32
  <% if logged_in? %>
33
- Your API Key is: <code><%= current_consultant.try(:api_key) %></code>
33
+ Your API Key is: <code><%= current_user.try(:api_key) %></code>
34
34
  <% else %>
35
35
  <a href="/session/new">Login</a> or <a href="/user/new">Sign Up</a> to see your API Key.
36
36
  <% end %>
@@ -1,3 +1,3 @@
1
1
  <% Wbase.landing_sections.each do |section| %>
2
- <%= render("wbase/static_pages/landing/#{ section }") if Wbase.send(section) %>
2
+ <%= render("wbase/static_pages/landing/#{ section.to_s.gsub('_view', '') }") if Wbase.send(section) %>
3
3
  <% end %>
@@ -0,0 +1,2 @@
1
+ <h1>Subscriptions#edit</h1>
2
+ <p>Find me in app/views/subscriptions/edit.html.erb</p>