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,318 @@
1
+ /**
2
+ * Theme: Ubold Admin Template
3
+ * Author: Coderthemes
4
+ * Module/App: Main Js
5
+ */
6
+
7
+
8
+ !function($) {
9
+ "use strict";
10
+
11
+ var Sidemenu = function() {
12
+ this.$body = $("body"),
13
+ this.$openLeftBtn = $(".open-left"),
14
+ this.$menuItem = $("#sidebar-menu a")
15
+ };
16
+ Sidemenu.prototype.openLeftBar = function() {
17
+ $("#wrapper").toggleClass("enlarged");
18
+ $("#wrapper").addClass("forced");
19
+
20
+ if($("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left")) {
21
+ $("body").removeClass("fixed-left").addClass("fixed-left-void");
22
+ } else if(!$("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left-void")) {
23
+ $("body").removeClass("fixed-left-void").addClass("fixed-left");
24
+ }
25
+
26
+ if($("#wrapper").hasClass("enlarged")) {
27
+ $(".left ul").removeAttr("style");
28
+ } else {
29
+ $(".subdrop").siblings("ul:first").show();
30
+ }
31
+
32
+ toggle_slimscroll(".slimscrollleft");
33
+ $("body").trigger("resize");
34
+ },
35
+ //menu item click
36
+ Sidemenu.prototype.menuItemClick = function(e) {
37
+ if(!$("#wrapper").hasClass("enlarged")){
38
+ if($(this).parent().hasClass("has_sub")) {
39
+
40
+ }
41
+ if(!$(this).hasClass("subdrop")) {
42
+ // hide any open menus and remove all other classes
43
+ $("ul",$(this).parents("ul:first")).slideUp(350);
44
+ $("a",$(this).parents("ul:first")).removeClass("subdrop");
45
+ $("#sidebar-menu .pull-right i").removeClass("md-remove").addClass("md-add");
46
+
47
+ // open our new menu and add the open class
48
+ $(this).next("ul").slideDown(350);
49
+ $(this).addClass("subdrop");
50
+ $(".pull-right i",$(this).parents(".has_sub:last")).removeClass("md-add").addClass("md-remove");
51
+ $(".pull-right i",$(this).siblings("ul")).removeClass("md-remove").addClass("md-add");
52
+ }else if($(this).hasClass("subdrop")) {
53
+ $(this).removeClass("subdrop");
54
+ $(this).next("ul").slideUp(350);
55
+ $(".pull-right i",$(this).parent()).removeClass("md-remove").addClass("md-add");
56
+ }
57
+ }
58
+ },
59
+
60
+ //init sidemenu
61
+ Sidemenu.prototype.init = function() {
62
+ var $this = this;
63
+
64
+ var ua = navigator.userAgent,
65
+ event = (ua.match(/iP/i)) ? "touchstart" : "click";
66
+
67
+ //bind on click
68
+ this.$openLeftBtn.on(event, function(e) {
69
+ e.stopPropagation();
70
+ $this.openLeftBar();
71
+ });
72
+
73
+ // LEFT SIDE MAIN NAVIGATION
74
+ $this.$menuItem.on(event, $this.menuItemClick);
75
+
76
+ // NAVIGATION HIGHLIGHT & OPEN PARENT
77
+ $("#sidebar-menu ul li.has_sub a.active").parents("li:last").children("a:first").addClass("active").trigger("click");
78
+ },
79
+
80
+ //init Sidemenu
81
+ $.Sidemenu = new Sidemenu, $.Sidemenu.Constructor = Sidemenu
82
+
83
+ }(window.jQuery),
84
+
85
+
86
+ function($) {
87
+ "use strict";
88
+
89
+ var FullScreen = function() {
90
+ this.$body = $("body"),
91
+ this.$fullscreenBtn = $("#btn-fullscreen")
92
+ };
93
+
94
+ //turn on full screen
95
+ // Thanks to http://davidwalsh.name/fullscreen
96
+ FullScreen.prototype.launchFullscreen = function(element) {
97
+ if(element.requestFullscreen) {
98
+ element.requestFullscreen();
99
+ } else if(element.mozRequestFullScreen) {
100
+ element.mozRequestFullScreen();
101
+ } else if(element.webkitRequestFullscreen) {
102
+ element.webkitRequestFullscreen();
103
+ } else if(element.msRequestFullscreen) {
104
+ element.msRequestFullscreen();
105
+ }
106
+ },
107
+ FullScreen.prototype.exitFullscreen = function() {
108
+ if(document.exitFullscreen) {
109
+ document.exitFullscreen();
110
+ } else if(document.mozCancelFullScreen) {
111
+ document.mozCancelFullScreen();
112
+ } else if(document.webkitExitFullscreen) {
113
+ document.webkitExitFullscreen();
114
+ }
115
+ },
116
+ //toggle screen
117
+ FullScreen.prototype.toggle_fullscreen = function() {
118
+ var $this = this;
119
+ var fullscreenEnabled = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled;
120
+ if(fullscreenEnabled) {
121
+ if(!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
122
+ $this.launchFullscreen(document.documentElement);
123
+ } else{
124
+ $this.exitFullscreen();
125
+ }
126
+ }
127
+ },
128
+ //init sidemenu
129
+ FullScreen.prototype.init = function() {
130
+ var $this = this;
131
+ //bind
132
+ $this.$fullscreenBtn.on('click', function() {
133
+ $this.toggle_fullscreen();
134
+ });
135
+ },
136
+ //init FullScreen
137
+ $.FullScreen = new FullScreen, $.FullScreen.Constructor = FullScreen
138
+
139
+ }(window.jQuery),
140
+
141
+
142
+
143
+ //main app module
144
+ function($) {
145
+ "use strict";
146
+
147
+ var App = function() {
148
+ this.VERSION = "1.6.0",
149
+ this.AUTHOR = "Coderthemes",
150
+ this.SUPPORT = "coderthemes@gmail.com",
151
+ this.pageScrollElement = "html, body",
152
+ this.$body = $("body")
153
+ };
154
+
155
+ //on doc load
156
+ App.prototype.onDocReady = function(e) {
157
+ FastClick.attach(document.body);
158
+ resizefunc.push("initscrolls");
159
+ resizefunc.push("changeptype");
160
+
161
+ $('.animate-number').each(function(){
162
+ $(this).animateNumbers($(this).attr("data-value"), true, parseInt($(this).attr("data-duration")));
163
+ });
164
+
165
+ //RUN RESIZE ITEMS
166
+ $(window).resize(debounce(resizeitems,100));
167
+ $("body").trigger("resize");
168
+
169
+ // right side-bar toggle
170
+ $('.right-bar-toggle').on('click', function(e){
171
+
172
+ $('#wrapper').toggleClass('right-bar-enabled');
173
+ });
174
+
175
+
176
+ },
177
+ //initilizing
178
+ App.prototype.init = function() {
179
+ var $this = this;
180
+ //document load initialization
181
+ $(document).ready($this.onDocReady);
182
+ //init side bar - left
183
+ $.Sidemenu.init();
184
+ //init fullscreen
185
+ $.FullScreen.init();
186
+ },
187
+
188
+ $.App = new App, $.App.Constructor = App
189
+
190
+ }(window.jQuery),
191
+
192
+ //initializing main application module
193
+ function($) {
194
+ "use strict";
195
+ $.App.init();
196
+ }(window.jQuery);
197
+
198
+
199
+
200
+ /* ------------ some utility functions ----------------------- */
201
+ //this full screen
202
+ var toggle_fullscreen = function () {
203
+
204
+ }
205
+
206
+ function executeFunctionByName(functionName, context /*, args */) {
207
+ var args = [].slice.call(arguments).splice(2);
208
+ var namespaces = functionName.split(".");
209
+ var func = namespaces.pop();
210
+ for(var i = 0; i < namespaces.length; i++) {
211
+ context = context[namespaces[i]];
212
+ }
213
+ return context[func].apply(this, args);
214
+ }
215
+ var w,h,dw,dh;
216
+ var changeptype = function(){
217
+ w = $(window).width();
218
+ h = $(window).height();
219
+ dw = $(document).width();
220
+ dh = $(document).height();
221
+
222
+ if(jQuery.browser.mobile === true){
223
+ $("body").addClass("mobile").removeClass("fixed-left");
224
+ }
225
+
226
+ if(!$("#wrapper").hasClass("forced")){
227
+ if(w > 990){
228
+ $("body").removeClass("smallscreen").addClass("widescreen");
229
+ $("#wrapper").removeClass("enlarged");
230
+ }else{
231
+ $("body").removeClass("widescreen").addClass("smallscreen");
232
+ $("#wrapper").addClass("enlarged");
233
+ $(".left ul").removeAttr("style");
234
+ }
235
+ if($("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left")){
236
+ $("body").removeClass("fixed-left").addClass("fixed-left-void");
237
+ }else if(!$("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left-void")){
238
+ $("body").removeClass("fixed-left-void").addClass("fixed-left");
239
+ }
240
+
241
+ }
242
+ toggle_slimscroll(".slimscrollleft");
243
+ }
244
+
245
+
246
+ var debounce = function(func, wait, immediate) {
247
+ var timeout, result;
248
+ return function() {
249
+ var context = this, args = arguments;
250
+ var later = function() {
251
+ timeout = null;
252
+ if (!immediate) result = func.apply(context, args);
253
+ };
254
+ var callNow = immediate && !timeout;
255
+ clearTimeout(timeout);
256
+ timeout = setTimeout(later, wait);
257
+ if (callNow) result = func.apply(context, args);
258
+ return result;
259
+ };
260
+ }
261
+
262
+ function resizeitems(){
263
+ if($.isArray(resizefunc)){
264
+ for (i = 0; i < resizefunc.length; i++) {
265
+ window[resizefunc[i]]();
266
+ }
267
+ }
268
+ }
269
+
270
+ function initscrolls(){
271
+ if(jQuery.browser.mobile !== true){
272
+ //SLIM SCROLL
273
+ $('.slimscroller').slimscroll({
274
+ height: 'auto',
275
+ size: "5px"
276
+ });
277
+
278
+ $('.slimscrollleft').slimScroll({
279
+ height: 'auto',
280
+ position: 'right',
281
+ size: "5px",
282
+ color: '#98a6ad',
283
+ wheelStep: 5
284
+ });
285
+ }
286
+ }
287
+ function toggle_slimscroll(item){
288
+ if($("#wrapper").hasClass("enlarged")){
289
+ $(item).css("overflow","inherit").parent().css("overflow","inherit");
290
+ $(item). siblings(".slimScrollBar").css("visibility","hidden");
291
+ }else{
292
+ $(item).css("overflow","hidden").parent().css("overflow","hidden");
293
+ $(item). siblings(".slimScrollBar").css("visibility","visible");
294
+ }
295
+ }
296
+
297
+ var wow = new WOW(
298
+ {
299
+ boxClass: 'wow', // animated element css class (default is wow)
300
+ animateClass: 'animated', // animation css class (default is animated)
301
+ offset: 50, // distance to the element when triggering the animation (default is 0)
302
+ mobile: false // trigger animations on mobile devices (true is default)
303
+ }
304
+ );
305
+ wow.init();
306
+
307
+ // === following js will activate the menu in left side bar based on url ====
308
+ $(document).ready(function() {
309
+ $("#sidebar-menu a").each(function() {
310
+ if (this.href == window.location.href) {
311
+ $(this).addClass("active");
312
+ $(this).parent().addClass("active"); // add active to li of the current link
313
+ $(this).parent().parent().prev().addClass("active"); // add active class to an anchor
314
+ $(this).parent().parent().prev().click(); // click the item to make it drop
315
+ }
316
+ });
317
+ });
318
+