ditty 0.4.1 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Readme.md +3 -12
  4. data/ditty.gemspec +4 -1
  5. data/exe/ditty +4 -0
  6. data/lib/ditty/cli.rb +44 -0
  7. data/lib/ditty/controllers/application.rb +3 -4
  8. data/lib/ditty/controllers/component.rb +38 -14
  9. data/lib/ditty/controllers/main.rb +115 -34
  10. data/lib/ditty/controllers/users.rb +7 -10
  11. data/lib/ditty/db.rb +6 -1
  12. data/lib/ditty/emails/base.rb +74 -0
  13. data/lib/ditty/emails/forgot_password.rb +15 -0
  14. data/lib/ditty/helpers/authentication.rb +2 -2
  15. data/lib/ditty/helpers/component.rb +7 -4
  16. data/lib/ditty/helpers/views.rb +5 -2
  17. data/lib/ditty/listener.rb +41 -7
  18. data/lib/ditty/models/user.rb +8 -4
  19. data/lib/ditty/policies/identity_policy.rb +2 -2
  20. data/lib/ditty/rake_tasks.rb +6 -5
  21. data/lib/ditty/services/authentication.rb +55 -0
  22. data/lib/ditty/services/email.rb +18 -20
  23. data/lib/ditty/services/logger.rb +10 -8
  24. data/lib/ditty/services/pagination_wrapper.rb +82 -0
  25. data/lib/ditty/services/settings.rb +45 -0
  26. data/lib/ditty/version.rb +1 -1
  27. data/migrate/20180307_password_reset.rb +10 -0
  28. data/views/audit_logs/index.haml +1 -1
  29. data/views/emails/base.haml +2 -0
  30. data/views/emails/forgot_password.haml +26 -0
  31. data/views/emails/layouts/action.haml +68 -0
  32. data/views/emails/layouts/alert.haml +88 -0
  33. data/views/emails/layouts/billing.haml +108 -0
  34. data/views/identity/forgot.haml +16 -0
  35. data/views/identity/login.haml +16 -5
  36. data/views/identity/register.haml +8 -0
  37. data/views/identity/reset.haml +20 -0
  38. data/views/layout.haml +2 -0
  39. metadata +62 -5
  40. 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
@@ -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 Password
12
- %input.form-control.border-input{ name: 'password', type: 'password' }
13
- %button.btn.btn-primary{ type: 'submit' } Log In
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= "&nbsp"
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= "&nbsp"
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.1
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-04-30 00:00:00.000000000 Z
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.6
507
+ rubygems_version: 2.7.7
451
508
  signing_key:
452
509
  specification_version: 4
453
510
  summary: Sinatra Based Application Framework
@@ -1,14 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'wisper'
4
-
5
- module Ditty
6
- module Helpers
7
- module Wisper
8
- def log_action(action, args = {})
9
- args[:user] = current_user unless args.key? :user
10
- broadcast(action, args)
11
- end
12
- end
13
- end
14
- end