ditty 0.4.1 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/Readme.md +3 -12
- data/ditty.gemspec +4 -1
- data/exe/ditty +4 -0
- data/lib/ditty/cli.rb +44 -0
- data/lib/ditty/controllers/application.rb +3 -4
- data/lib/ditty/controllers/component.rb +38 -14
- data/lib/ditty/controllers/main.rb +115 -34
- data/lib/ditty/controllers/users.rb +7 -10
- data/lib/ditty/db.rb +6 -1
- data/lib/ditty/emails/base.rb +74 -0
- data/lib/ditty/emails/forgot_password.rb +15 -0
- data/lib/ditty/helpers/authentication.rb +2 -2
- data/lib/ditty/helpers/component.rb +7 -4
- data/lib/ditty/helpers/views.rb +5 -2
- data/lib/ditty/listener.rb +41 -7
- data/lib/ditty/models/user.rb +8 -4
- data/lib/ditty/policies/identity_policy.rb +2 -2
- data/lib/ditty/rake_tasks.rb +6 -5
- data/lib/ditty/services/authentication.rb +55 -0
- data/lib/ditty/services/email.rb +18 -20
- data/lib/ditty/services/logger.rb +10 -8
- data/lib/ditty/services/pagination_wrapper.rb +82 -0
- data/lib/ditty/services/settings.rb +45 -0
- data/lib/ditty/version.rb +1 -1
- data/migrate/20180307_password_reset.rb +10 -0
- data/views/audit_logs/index.haml +1 -1
- data/views/emails/base.haml +2 -0
- data/views/emails/forgot_password.haml +26 -0
- data/views/emails/layouts/action.haml +68 -0
- data/views/emails/layouts/alert.haml +88 -0
- data/views/emails/layouts/billing.haml +108 -0
- data/views/identity/forgot.haml +16 -0
- data/views/identity/login.haml +16 -5
- data/views/identity/register.haml +8 -0
- data/views/identity/reset.haml +20 -0
- data/views/layout.haml +2 -0
- metadata +62 -5
- data/lib/ditty/helpers/wisper.rb +0 -14
@@ -0,0 +1,108 @@
|
|
1
|
+
!!!
|
2
|
+
%html{:style => "font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;", :xmlns => "http://www.w3.org/1999/xhtml"}
|
3
|
+
%head
|
4
|
+
%meta{:content => "width=device-width", :name => "viewport"}/
|
5
|
+
%meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/
|
6
|
+
%title Billing e.g. invoices and receipts
|
7
|
+
:css
|
8
|
+
img {
|
9
|
+
max-width: 100%;
|
10
|
+
}
|
11
|
+
body {
|
12
|
+
-webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em;
|
13
|
+
}
|
14
|
+
body {
|
15
|
+
background-color: #f6f6f6;
|
16
|
+
}
|
17
|
+
@media only screen and (max-width: 640px) {
|
18
|
+
body {
|
19
|
+
padding: 0 !important;
|
20
|
+
}
|
21
|
+
h1 {
|
22
|
+
font-weight: 800 !important; margin: 20px 0 5px !important;
|
23
|
+
}
|
24
|
+
h2 {
|
25
|
+
font-weight: 800 !important; margin: 20px 0 5px !important;
|
26
|
+
}
|
27
|
+
h3 {
|
28
|
+
font-weight: 800 !important; margin: 20px 0 5px !important;
|
29
|
+
}
|
30
|
+
h4 {
|
31
|
+
font-weight: 800 !important; margin: 20px 0 5px !important;
|
32
|
+
}
|
33
|
+
h1 {
|
34
|
+
font-size: 22px !important;
|
35
|
+
}
|
36
|
+
h2 {
|
37
|
+
font-size: 18px !important;
|
38
|
+
}
|
39
|
+
h3 {
|
40
|
+
font-size: 16px !important;
|
41
|
+
}
|
42
|
+
.container {
|
43
|
+
padding: 0 !important; width: 100% !important;
|
44
|
+
}
|
45
|
+
.content {
|
46
|
+
padding: 0 !important;
|
47
|
+
}
|
48
|
+
.content-wrap {
|
49
|
+
padding: 10px !important;
|
50
|
+
}
|
51
|
+
.invoice {
|
52
|
+
width: 100% !important;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
%body{:bgcolor => "#f6f6f6", :itemscope => "", :itemtype => "http://schema.org/EmailMessage", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; -webkit-font-smoothing: antialiased; -webkit-text-size-adjust: none; width: 100% !important; height: 100%; line-height: 1.6em; background-color: #f6f6f6; margin: 0;"}
|
56
|
+
%table.body-wrap{:bgcolor => "#f6f6f6", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; background-color: #f6f6f6; margin: 0;"}
|
57
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
58
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;", :valign => "top"}
|
59
|
+
%td.container{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; display: block !important; max-width: 600px !important; clear: both !important; margin: 0 auto;", :valign => "top", :width => "600"}
|
60
|
+
.content{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; max-width: 600px; display: block; margin: 0 auto; padding: 20px;"}
|
61
|
+
%table.main{:bgcolor => "#fff", :cellpadding => "0", :cellspacing => "0", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; border-radius: 3px; background-color: #fff; margin: 0; border: 1px solid #e9e9e9;", :width => "100%"}
|
62
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
63
|
+
%td.content-wrap.aligncenter{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 20px;", :valign => "top"}
|
64
|
+
%table{:cellpadding => "0", :cellspacing => "0", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;", :width => "100%"}
|
65
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
66
|
+
%td.content-block{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;", :valign => "top"}
|
67
|
+
%h1.aligncenter{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif; box-sizing: border-box; font-size: 32px; color: #000; line-height: 1.2em; font-weight: 500; text-align: center; margin: 40px 0 0;"} $33.98 Paid
|
68
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
69
|
+
%td.content-block{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 0 0 20px;", :valign => "top"}
|
70
|
+
%h2.aligncenter{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,'Lucida Grande',sans-serif; box-sizing: border-box; font-size: 24px; color: #000; line-height: 1.2em; font-weight: 400; text-align: center; margin: 40px 0 0;"} Thanks for using Acme Inc.
|
71
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
72
|
+
%td.content-block.aligncenter{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 20px;", :valign => "top"}
|
73
|
+
%table.invoice{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; text-align: left; width: 80%; margin: 40px auto;"}
|
74
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
75
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;", :valign => "top"}
|
76
|
+
Lee Munroe
|
77
|
+
%br{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}>/
|
78
|
+
Invoice #12345
|
79
|
+
%br{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}>/
|
80
|
+
June 01 2014
|
81
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
82
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0; padding: 5px 0;", :valign => "top"}
|
83
|
+
%table.invoice-items{:cellpadding => "0", :cellspacing => "0", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; margin: 0;"}
|
84
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
85
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;", :valign => "top"} Service 1
|
86
|
+
%td.alignright{:align => "right", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: right; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;", :valign => "top"} $ 19.99
|
87
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
88
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;", :valign => "top"} Service 2
|
89
|
+
%td.alignright{:align => "right", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: right; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;", :valign => "top"} $ 9.99
|
90
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
91
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;", :valign => "top"} Service 3
|
92
|
+
%td.alignright{:align => "right", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: right; border-top-width: 1px; border-top-color: #eee; border-top-style: solid; margin: 0; padding: 5px 0;", :valign => "top"} $ 4.00
|
93
|
+
%tr.total{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
94
|
+
%td.alignright{:align => "right", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: right; border-top-width: 2px; border-top-color: #333; border-top-style: solid; border-bottom-color: #333; border-bottom-width: 2px; border-bottom-style: solid; font-weight: 700; margin: 0; padding: 5px 0;", :valign => "top", :width => "80%"} Total
|
95
|
+
%td.alignright{:align => "right", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: right; border-top-width: 2px; border-top-color: #333; border-top-style: solid; border-bottom-color: #333; border-bottom-width: 2px; border-bottom-style: solid; font-weight: 700; margin: 0; padding: 5px 0;", :valign => "top"} $ 33.98
|
96
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
97
|
+
%td.content-block.aligncenter{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 20px;", :valign => "top"}
|
98
|
+
%a{:href => "http://www.mailgun.com", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; color: #348eda; text-decoration: underline; margin: 0;"} View in browser
|
99
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
100
|
+
%td.content-block.aligncenter{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; text-align: center; margin: 0; padding: 0 0 20px;", :valign => "top"}
|
101
|
+
Acme Inc. 123 Van Ness, San Francisco 94102
|
102
|
+
.footer{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; width: 100%; clear: both; color: #999; margin: 0; padding: 20px;"}
|
103
|
+
%table{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;", :width => "100%"}
|
104
|
+
%tr{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; margin: 0;"}
|
105
|
+
%td.aligncenter.content-block{:align => "center", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; vertical-align: top; color: #999; text-align: center; margin: 0; padding: 0 0 20px;", :valign => "top"}
|
106
|
+
Questions? Email
|
107
|
+
%a{:href => "mailto:", :style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 12px; color: #999; text-decoration: underline; margin: 0;"} support@acme.inc
|
108
|
+
%td{:style => "font-family: 'Helvetica Neue',Helvetica,Arial,sans-serif; box-sizing: border-box; font-size: 14px; vertical-align: top; margin: 0;", :valign => "top"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
.row
|
2
|
+
.col-md-4
|
3
|
+
.col-md-4
|
4
|
+
.panel.panel-default
|
5
|
+
.panel-body
|
6
|
+
%p.text-center
|
7
|
+
Enter your email address and we will send you a link to reset your password if you've registered on the system.
|
8
|
+
%form.form-horizontal{ method: 'post', action: "#{settings.map_path}/auth/identity/forgot" }
|
9
|
+
.form-group
|
10
|
+
.col-sm-12
|
11
|
+
%input.form-control{ name: 'email', type: 'text', placeholder: 'Enter your email address' }
|
12
|
+
.row.text-right
|
13
|
+
.col-md-12
|
14
|
+
%button.btn.btn-primary.btn-block{ type: 'submit' }
|
15
|
+
Email password reset link
|
16
|
+
.col-md-4
|
data/views/identity/login.haml
CHANGED
@@ -6,13 +6,24 @@
|
|
6
6
|
%form{ method: 'post', action: "#{settings.map_path}/auth/identity/callback" }
|
7
7
|
.form-group
|
8
8
|
%label.control-label Email
|
9
|
-
%input.form-control.border-input{ name: 'username' }
|
9
|
+
%input.form-control.border-input{ name: 'username', tabindex: '1' }
|
10
10
|
.form-group
|
11
|
-
%label.control-label
|
12
|
-
|
13
|
-
|
11
|
+
%label.control-label{ style: 'display: block' }
|
12
|
+
Password
|
13
|
+
%a{ href: "#{settings.map_path}/auth/identity/forgot", style: 'float: right', tabindex: '5' }
|
14
|
+
Forgot?
|
15
|
+
%input.form-control.border-input{ name: 'password', type: 'password', tabindex: '2' }
|
16
|
+
%button.btn.btn-primary{ type: 'submit', tabindex: '3' } Log In
|
14
17
|
- if policy(::Ditty::Identity).register?
|
15
18
|
.pull-right
|
16
19
|
No account yet?
|
17
|
-
%a.btn.btn-default{ href: "#{settings.map_path}/auth/identity/register" } Register
|
20
|
+
%a.btn.btn-default{ href: "#{settings.map_path}/auth/identity/register", tabindex: '4' } Register
|
21
|
+
.row
|
22
|
+
.col-sm-12= " "
|
23
|
+
- if Ditty::Services::Authentication.provides? 'google_oauth2'
|
24
|
+
.row
|
25
|
+
.col-sm-8.col-sm-push-2
|
26
|
+
%a.btn.btn-block.btn-default{ href: "#{settings.map_path}/auth/google_oauth2" }
|
27
|
+
%i.fa.fa-google
|
28
|
+
Log in with Google
|
18
29
|
.col-sm-3
|
@@ -18,4 +18,12 @@
|
|
18
18
|
|
19
19
|
- if policy(::Ditty::Identity).register?
|
20
20
|
%button.btn.btn-primary{ type: 'submit' } Register
|
21
|
+
.row
|
22
|
+
.col-sm-12= " "
|
23
|
+
- if Ditty::Services::Authentication.provides? 'google_oauth2'
|
24
|
+
.row
|
25
|
+
.col-sm-8.col-sm-push-2
|
26
|
+
%a.btn.btn-block.btn-default{ href: "#{settings.map_path}/auth/google_oauth2" }
|
27
|
+
%i.fa.fa-google
|
28
|
+
Register with Google
|
21
29
|
.col-md-2
|
@@ -0,0 +1,20 @@
|
|
1
|
+
.row
|
2
|
+
.col-md-2
|
3
|
+
.col-md-8
|
4
|
+
.panel.panel-default
|
5
|
+
.panel-body
|
6
|
+
%form.form-horizontal{ method: 'post', action: "#{settings.map_path}/auth/identity/reset" }
|
7
|
+
%input{ name: '_method', value: 'PUT', type: 'hidden' }
|
8
|
+
%input{ name: 'token', value: params['token'], type: 'hidden' }
|
9
|
+
- if identity.errors[:password] && identity.errors[:password].include?('is not strong enough')
|
10
|
+
.alert.alert-warning
|
11
|
+
%p Make sure your password is at least 8 characters long, and including the following
|
12
|
+
%ul
|
13
|
+
%li Upper- and lowercase letters
|
14
|
+
%li Numbers
|
15
|
+
%li Special Characters
|
16
|
+
= form_control(:password, identity, type: 'password', placeholder: 'Your password', group: 'identity')
|
17
|
+
= form_control(:password_confirmation, identity, type: 'password', label: 'Confirm Password', placeholder: 'Confirm your password', group: 'identity')
|
18
|
+
%button.btn.btn-primary{ type: 'submit' }
|
19
|
+
Reset Password
|
20
|
+
.col-md-2
|
data/views/layout.haml
CHANGED
@@ -53,8 +53,10 @@
|
|
53
53
|
%script{ type: 'text/javascript', src: 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js' }
|
54
54
|
%script{ type: 'text/javascript', src: 'https://cdnjs.cloudflare.com/ajax/libs/react/15.4.1/react.min.js' }
|
55
55
|
%script{ type: 'text/javascript', src: 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.bundle.min.js' }
|
56
|
+
%script{ type: 'text/javascript', src: 'https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js' }
|
56
57
|
:javascript
|
57
58
|
$(function() {
|
58
59
|
$('.sidebar-nav').metisMenu();
|
60
|
+
$('.select2').select2();
|
59
61
|
});
|
60
62
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ditty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jurgens du Toit
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-07-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '2.14'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: mail
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '1.7'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '1.7'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: omniauth
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -318,6 +332,34 @@ dependencies:
|
|
318
332
|
- - ">="
|
319
333
|
- !ruby/object:Gem::Version
|
320
334
|
version: '2'
|
335
|
+
- !ruby/object:Gem::Dependency
|
336
|
+
name: thor
|
337
|
+
requirement: !ruby/object:Gem::Requirement
|
338
|
+
requirements:
|
339
|
+
- - ">="
|
340
|
+
- !ruby/object:Gem::Version
|
341
|
+
version: '0.20'
|
342
|
+
type: :runtime
|
343
|
+
prerelease: false
|
344
|
+
version_requirements: !ruby/object:Gem::Requirement
|
345
|
+
requirements:
|
346
|
+
- - ">="
|
347
|
+
- !ruby/object:Gem::Version
|
348
|
+
version: '0.20'
|
349
|
+
- !ruby/object:Gem::Dependency
|
350
|
+
name: will_paginate
|
351
|
+
requirement: !ruby/object:Gem::Requirement
|
352
|
+
requirements:
|
353
|
+
- - ">="
|
354
|
+
- !ruby/object:Gem::Version
|
355
|
+
version: '3.1'
|
356
|
+
type: :runtime
|
357
|
+
prerelease: false
|
358
|
+
version_requirements: !ruby/object:Gem::Requirement
|
359
|
+
requirements:
|
360
|
+
- - ">="
|
361
|
+
- !ruby/object:Gem::Version
|
362
|
+
version: '3.1'
|
321
363
|
- !ruby/object:Gem::Dependency
|
322
364
|
name: wisper
|
323
365
|
requirement: !ruby/object:Gem::Requirement
|
@@ -335,7 +377,8 @@ dependencies:
|
|
335
377
|
description: Sinatra Based Application Framework
|
336
378
|
email:
|
337
379
|
- jrgns@jadeit.co.za
|
338
|
-
executables:
|
380
|
+
executables:
|
381
|
+
- ditty
|
339
382
|
extensions: []
|
340
383
|
extra_rdoc_files: []
|
341
384
|
files:
|
@@ -351,7 +394,9 @@ files:
|
|
351
394
|
- Readme.md
|
352
395
|
- config.ru
|
353
396
|
- ditty.gemspec
|
397
|
+
- exe/ditty
|
354
398
|
- lib/ditty.rb
|
399
|
+
- lib/ditty/cli.rb
|
355
400
|
- lib/ditty/components/app.rb
|
356
401
|
- lib/ditty/controllers/application.rb
|
357
402
|
- lib/ditty/controllers/audit_logs.rb
|
@@ -360,12 +405,13 @@ files:
|
|
360
405
|
- lib/ditty/controllers/roles.rb
|
361
406
|
- lib/ditty/controllers/users.rb
|
362
407
|
- lib/ditty/db.rb
|
408
|
+
- lib/ditty/emails/base.rb
|
409
|
+
- lib/ditty/emails/forgot_password.rb
|
363
410
|
- lib/ditty/helpers/authentication.rb
|
364
411
|
- lib/ditty/helpers/component.rb
|
365
412
|
- lib/ditty/helpers/pundit.rb
|
366
413
|
- lib/ditty/helpers/response.rb
|
367
414
|
- lib/ditty/helpers/views.rb
|
368
|
-
- lib/ditty/helpers/wisper.rb
|
369
415
|
- lib/ditty/listener.rb
|
370
416
|
- lib/ditty/middleware/error_catchall.rb
|
371
417
|
- lib/ditty/models/audit_log.rb
|
@@ -380,12 +426,16 @@ files:
|
|
380
426
|
- lib/ditty/policies/user_policy.rb
|
381
427
|
- lib/ditty/rake_tasks.rb
|
382
428
|
- lib/ditty/seed.rb
|
429
|
+
- lib/ditty/services/authentication.rb
|
383
430
|
- lib/ditty/services/email.rb
|
384
431
|
- lib/ditty/services/logger.rb
|
432
|
+
- lib/ditty/services/pagination_wrapper.rb
|
433
|
+
- lib/ditty/services/settings.rb
|
385
434
|
- lib/ditty/version.rb
|
386
435
|
- migrate/20170207_base_tables.rb
|
387
436
|
- migrate/20170208_audit_log.rb
|
388
437
|
- migrate/20170416_audit_log_details.rb
|
438
|
+
- migrate/20180307_password_reset.rb
|
389
439
|
- public/browserconfig.xml
|
390
440
|
- public/images/apple-icon.png
|
391
441
|
- public/images/favicon-16x16.png
|
@@ -398,10 +448,17 @@ files:
|
|
398
448
|
- public/manifest.json
|
399
449
|
- views/404.haml
|
400
450
|
- views/audit_logs/index.haml
|
451
|
+
- views/emails/base.haml
|
452
|
+
- views/emails/forgot_password.haml
|
453
|
+
- views/emails/layouts/action.haml
|
454
|
+
- views/emails/layouts/alert.haml
|
455
|
+
- views/emails/layouts/billing.haml
|
401
456
|
- views/embedded.haml
|
402
457
|
- views/error.haml
|
458
|
+
- views/identity/forgot.haml
|
403
459
|
- views/identity/login.haml
|
404
460
|
- views/identity/register.haml
|
461
|
+
- views/identity/reset.haml
|
405
462
|
- views/index.haml
|
406
463
|
- views/layout.haml
|
407
464
|
- views/partials/actions.haml
|
@@ -447,7 +504,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
447
504
|
version: '0'
|
448
505
|
requirements: []
|
449
506
|
rubyforge_project:
|
450
|
-
rubygems_version: 2.7.
|
507
|
+
rubygems_version: 2.7.7
|
451
508
|
signing_key:
|
452
509
|
specification_version: 4
|
453
510
|
summary: Sinatra Based Application Framework
|
data/lib/ditty/helpers/wisper.rb
DELETED