ditty 0.8.0 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (123) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.pryrc +2 -0
  4. data/.rubocop.yml +1 -1
  5. data/.travis.yml +5 -4
  6. data/CNAME +1 -0
  7. data/Dockerfile +18 -0
  8. data/Gemfile.ci +0 -2
  9. data/Rakefile +2 -2
  10. data/_config.yml +1 -0
  11. data/config.ru +4 -4
  12. data/ditty.gemspec +9 -3
  13. data/docs/CNAME +1 -0
  14. data/docs/_config.yml +1 -0
  15. data/docs/index.md +34 -0
  16. data/exe/ditty +2 -0
  17. data/lib/ditty.rb +4 -2
  18. data/lib/ditty/cli.rb +28 -4
  19. data/lib/ditty/components/{app.rb → ditty.rb} +19 -14
  20. data/lib/ditty/controllers/{application.rb → application_controller.rb} +58 -29
  21. data/lib/ditty/controllers/{audit_logs.rb → audit_logs_controller.rb} +2 -2
  22. data/lib/ditty/controllers/{auth.rb → auth_controller.rb} +17 -16
  23. data/lib/ditty/controllers/{component.rb → component_controller.rb} +19 -18
  24. data/lib/ditty/controllers/{main.rb → main_controller.rb} +6 -2
  25. data/lib/ditty/controllers/roles_controller.rb +23 -0
  26. data/lib/ditty/controllers/{user_login_traits.rb → user_login_traits_controller.rb} +4 -3
  27. data/lib/ditty/controllers/{users.rb → users_controller.rb} +11 -10
  28. data/lib/ditty/db.rb +4 -3
  29. data/lib/ditty/emails/base.rb +5 -2
  30. data/lib/ditty/generators/crud_generator.rb +104 -0
  31. data/lib/ditty/generators/migration_generator.rb +26 -0
  32. data/lib/ditty/generators/project_generator.rb +51 -0
  33. data/lib/ditty/helpers/component.rb +2 -1
  34. data/lib/ditty/helpers/pundit.rb +20 -4
  35. data/lib/ditty/helpers/response.rb +20 -13
  36. data/lib/ditty/helpers/views.rb +7 -3
  37. data/lib/ditty/listener.rb +5 -3
  38. data/lib/ditty/memcached.rb +8 -0
  39. data/lib/ditty/middleware/accept_extension.rb +2 -2
  40. data/lib/ditty/middleware/error_catchall.rb +2 -2
  41. data/lib/ditty/models/base.rb +4 -0
  42. data/lib/ditty/models/role.rb +1 -0
  43. data/lib/ditty/models/user.rb +14 -1
  44. data/lib/ditty/policies/role_policy.rb +1 -1
  45. data/lib/ditty/policies/user_login_trait_policy.rb +1 -1
  46. data/lib/ditty/services/authentication.rb +11 -10
  47. data/lib/ditty/services/email.rb +8 -4
  48. data/lib/ditty/services/logger.rb +1 -1
  49. data/lib/ditty/tasks/ditty.rake +17 -0
  50. data/lib/ditty/tasks/omniauth-ldap.rake +2 -2
  51. data/lib/ditty/templates/.gitignore +5 -0
  52. data/lib/ditty/templates/.rspec +2 -0
  53. data/lib/ditty/templates/.rubocop.yml +7 -0
  54. data/lib/ditty/templates/Rakefile +12 -0
  55. data/lib/ditty/templates/application.rb +12 -0
  56. data/lib/ditty/templates/config.ru +37 -0
  57. data/lib/ditty/templates/controller.rb.erb +58 -0
  58. data/lib/ditty/templates/env.example +4 -0
  59. data/lib/ditty/templates/lib/project.rb.erb +5 -0
  60. data/lib/ditty/templates/migration.rb.erb +7 -0
  61. data/lib/ditty/templates/model.rb.erb +26 -0
  62. data/lib/ditty/templates/pids/.empty_directory +0 -0
  63. data/lib/ditty/templates/policy.rb.erb +48 -0
  64. data/lib/ditty/templates/public/css/sb-admin-2.min.css +10 -0
  65. data/lib/ditty/templates/public/js/sb-admin-2.min.js +7 -0
  66. data/lib/ditty/templates/settings.yml.erb +18 -0
  67. data/lib/ditty/templates/sidekiq.rb +18 -0
  68. data/lib/ditty/templates/sidekiq.yml +9 -0
  69. data/lib/ditty/templates/spec_helper.rb +43 -0
  70. data/lib/ditty/templates/type.rb.erb +21 -0
  71. data/lib/ditty/templates/views/display.haml.tt +20 -0
  72. data/lib/ditty/templates/views/edit.haml.tt +10 -0
  73. data/lib/ditty/templates/views/form.haml.tt +11 -0
  74. data/lib/ditty/templates/views/index.haml.tt +29 -0
  75. data/lib/ditty/templates/views/new.haml.tt +10 -0
  76. data/lib/ditty/version.rb +1 -1
  77. data/lib/rubocop/cop/ditty/call_services_directly.rb +2 -2
  78. data/migrate/20181209_add_user_login_traits.rb +4 -4
  79. data/migrate/20190220_add_parent_id_to_roles.rb +9 -0
  80. data/public/css/styles.css +13 -0
  81. data/public/js/scripts.js +1 -0
  82. data/views/404.haml +2 -4
  83. data/views/audit_logs/index.haml +32 -34
  84. data/views/auth/forgot_password.haml +27 -16
  85. data/views/auth/identity.haml +14 -13
  86. data/views/auth/ldap.haml +2 -2
  87. data/views/auth/login.haml +22 -17
  88. data/views/auth/register.haml +19 -18
  89. data/views/auth/register_identity.haml +27 -12
  90. data/views/auth/reset_password.haml +2 -2
  91. data/views/blank.haml +42 -0
  92. data/views/index.haml +1 -1
  93. data/views/layout.haml +37 -30
  94. data/views/partials/content_tag.haml +0 -0
  95. data/views/partials/delete_form.haml +1 -1
  96. data/views/partials/filter_control.haml +1 -1
  97. data/views/partials/footer.haml +5 -5
  98. data/views/partials/form_control.haml +19 -12
  99. data/views/partials/navitems.haml +44 -0
  100. data/views/partials/notifications.haml +12 -8
  101. data/views/partials/pager.haml +17 -17
  102. data/views/partials/search.haml +6 -7
  103. data/views/partials/sidebar.haml +15 -37
  104. data/views/partials/topbar.haml +68 -0
  105. data/views/roles/display.haml +27 -6
  106. data/views/roles/edit.haml +3 -3
  107. data/views/roles/form.haml +1 -0
  108. data/views/roles/index.haml +23 -16
  109. data/views/roles/new.haml +2 -2
  110. data/views/user_login_traits/display.haml +4 -4
  111. data/views/user_login_traits/edit.haml +3 -3
  112. data/views/user_login_traits/index.haml +4 -4
  113. data/views/user_login_traits/new.haml +2 -2
  114. data/views/users/display.haml +11 -12
  115. data/views/users/edit.haml +3 -3
  116. data/views/users/form.haml +0 -0
  117. data/views/users/index.haml +31 -24
  118. data/views/users/login_traits.haml +6 -8
  119. data/views/users/new.haml +2 -2
  120. data/views/users/profile.haml +13 -13
  121. metadata +143 -15
  122. data/lib/ditty/controllers/roles.rb +0 -13
  123. data/views/partials/navbar.haml +0 -22
@@ -1,17 +1,38 @@
1
- .row
1
+ .row.mb-4
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  %p.description
7
7
  %label Name:
8
- = entity.name
8
+ = entity.name.titlecase
9
+ %p.description
10
+ %label Parent:
11
+ %a{ href: "#{base_path}/#{entity.parent_id}" }= entity.parent&.name&.titlecase || '(None)'
9
12
 
10
13
  .row
11
14
  .col-md-6
12
- %a.btn.btn-default{ href: "#{base_path}/#{entity.id}/edit" } Edit
15
+ %a.btn.btn-secondary{ href: "#{base_path}/#{entity.display_id}/edit" } Edit
13
16
  .col-md-6.text-right
14
17
  - if policy(entity).delete?
15
- = delete_form_tag("#{base_path}/#{entity.id}") do
18
+ = delete_form_tag("#{base_path}/#{entity.display_id}") do
16
19
  %button.btn.btn-warning{ type: 'submit' } Delete
17
20
  .col-md-2
21
+
22
+ .row
23
+ .col-md-2
24
+ .col-md-8
25
+ .card.card-default
26
+ .card-body
27
+ %h4.card-title Included Roles
28
+ %table.table.table-striped
29
+ %tbody
30
+ - if entity.descendants.count > 0
31
+ - entity.descendants.each do |role|
32
+ %tr
33
+ %td
34
+ %a.btn-block{ href: "#{settings.map_path}/role/#{role.id}" }
35
+ = role.name.titlecase
36
+ - else
37
+ %tr
38
+ %td.text-center No records
@@ -1,9 +1,9 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
6
- = edit_form_tag "#{base_path}/#{entity.id}" do
4
+ .card
5
+ .card-body
6
+ = edit_form_tag "#{base_path}/#{entity.display_id}" do
7
7
  = haml :'roles/form', locals: { entity: entity }
8
8
  %button.btn.btn-primary{ type: 'submit' }
9
9
  Update Role
@@ -1 +1,2 @@
1
+ = form_control(:parent_id, entity, type: 'select', options: parent_options(entity).as_hash(:id, :name))
1
2
  = form_control(:name, entity)
@@ -1,20 +1,27 @@
1
1
  .row
2
2
  .col-md-12
3
- .panel.panel-default
4
- .panel-body
5
- = haml :'partials/search'
6
- %table.table.table-striped
7
- %thead
8
- %tr
9
- %th Name
10
- %tbody
11
- - if list.count > 0
12
- - list.all.each do |entity|
13
- %tr
14
- %td
15
- %a{ href: "#{base_path}/#{entity.id}" }= entity.name
16
- - else
3
+ = haml :'partials/search'
4
+ %table.table.table-striped.table-bordered.table-hover
5
+ %thead.thead-dark
6
+ %tr
7
+ %th Name
8
+ %th Parent
9
+ %th
10
+ %tbody
11
+ - if list.count > 0
12
+ - list.all.each do |entity|
17
13
  %tr
18
- %td.text-center{ colspan: 1 } No records
14
+ %td
15
+ %a{ href: "#{base_path}/#{entity.display_id}" }= entity.name
16
+ %td
17
+ %a{ href: "#{base_path}/#{entity.parent_id}" }= entity.parent&.name || '(None)'
18
+ %td
19
+ - if policy(entity).update?
20
+ %a{ href: "#{base_path}/#{entity.display_id}/edit", title: 'Edit' }
21
+ %i.fa.fa-edit
22
+ - else
23
+ %tr
24
+ %td.text-center{ colspan: 3 } No Roles
19
25
 
20
- =pagination(list, base_path)
26
+ - if list.count > 0
27
+ =pagination(list, base_path)
@@ -1,8 +1,8 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  = new_form_tag base_path do
7
7
  = haml :'roles/form', locals: { entity: entity }
8
8
  %button.btn.btn-primary{ type: 'submit' }
@@ -1,8 +1,8 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  %p.description
7
7
  %label User:
8
8
  = entity.user&.email || 'Unknown'
@@ -24,9 +24,9 @@
24
24
 
25
25
  .row
26
26
  .col-md-6
27
- %a.btn.btn-default{ href: "#{base_path}/#{entity.id}/edit" } Edit
27
+ %a.btn.btn-secondary{ href: "#{base_path}/#{entity.display_id}/edit" } Edit
28
28
  .col-md-6.text-right
29
29
  - if policy(entity).delete?
30
- = delete_form_tag("#{base_path}/#{entity.id}") do
30
+ = delete_form_tag("#{base_path}/#{entity.display_id}") do
31
31
  %button.btn.btn-warning{ type: 'submit' } Delete
32
32
  .col-md-2
@@ -1,9 +1,9 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
6
- = edit_form_tag "#{base_path}/#{entity.id}" do
4
+ .card.card-default
5
+ .card-body
6
+ = edit_form_tag "#{base_path}/#{entity.display_id}" do
7
7
  = haml :'user_login_traits/form', locals: { entity: entity }
8
8
  %button.btn.btn-primary{ type: 'submit' }
9
9
  Update Login Trait
@@ -1,10 +1,10 @@
1
1
  .row
2
2
  .col-md-12
3
- .panel.panel-default
4
- .panel-body
3
+ .card.card-default
4
+ .card-body
5
5
  = haml :'partials/search'
6
6
  %table.table.table-striped
7
- %thead
7
+ %thead.thead-dark
8
8
  %tr
9
9
  %th User
10
10
  %th IP Address
@@ -18,7 +18,7 @@
18
18
  %tr
19
19
  %td= entity.user&.email || 'Unknown'
20
20
  %td
21
- %a{ href: "#{base_path}/#{entity.id}" }= entity.ip_address || 'Unknown'
21
+ %a{ href: "#{base_path}/#{entity.display_id}" }= entity.ip_address || 'Unknown'
22
22
  %td= entity.device || 'Unknown'
23
23
  %td= entity.platform || 'Unknown'
24
24
  %td= entity.browser || 'Unknown'
@@ -1,8 +1,8 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  = new_form_tag base_path do
7
7
  = haml :'user_login_traits/form', locals: { entity: entity }
8
8
  %button.btn.btn-primary{ type: 'submit' }
@@ -1,10 +1,10 @@
1
- .row
1
+ .row.mb-4
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  .author
7
- %img.pull-right.thumbnail{ src: entity.gravatar }
7
+ %img.float-right.img-thumbnail{ src: entity.gravatar }
8
8
  %h4= entity.email
9
9
 
10
10
  %hr
@@ -24,22 +24,21 @@
24
24
  .row
25
25
  .col-md-6
26
26
  - if policy(entity).update?
27
- %a.btn.btn-default{ href: "#{base_path}/#{entity.id}/edit" } Edit
27
+ %a.btn.btn-secondary{ href: "#{base_path}/#{entity.display_id}/edit" } Edit
28
28
  .col-md-6.text-right
29
29
  - if policy(entity).delete?
30
- = delete_form_tag("#{base_path}/#{entity.id}") do
30
+ = delete_form_tag("#{base_path}/#{entity.display_id}") do
31
31
  %button.btn.btn-warning{ type: 'submit' } Delete
32
32
  .col-md-2
33
33
 
34
34
  - if entity.identity.first
35
- .row
35
+ .row.mb-4
36
36
  .col-md-2
37
37
  .col-md-8
38
- .panel.panel-default
39
- .panel-heading
40
- %h4 Change Password
41
- .panel-body
42
- = edit_form_tag("#{base_path}/#{entity.id}/identity") do
38
+ .card.card-default
39
+ .card-body
40
+ %h4.card-title Change Password
41
+ = edit_form_tag("#{base_path}/#{entity.display_id}/identity") do
43
42
  = form_control(:password, entity.identity.first, type: 'password', placeholder: 'Your password', group: 'identity')
44
43
  = form_control(:password_confirmation, entity.identity.first, type: 'password', label: 'Confirm Password', placeholder: 'Confirm your password', group: 'identity')
45
44
  %button.btn.btn-primary{ type: 'submit' }
@@ -1,9 +1,9 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
6
- = edit_form_tag "#{base_path}/#{entity.id}" do
4
+ .card.card-default
5
+ .card-body
6
+ = edit_form_tag "#{base_path}/#{entity.display_id}" do
7
7
  = haml :'users/user', locals: { user: entity }
8
8
  %button.btn.btn-primary{ type: 'submit' }
9
9
  Update User
File without changes
@@ -1,28 +1,35 @@
1
1
  .row
2
2
  .col-md-12
3
- .panel.panel-default
4
- .panel-body
5
- = haml :'partials/search'
6
- %table.table.table-striped
7
- %thead
8
- %tr
9
- %th Email
10
- %th Name
11
- %th Surname
12
- %th Roles
13
- %th Signed Up
14
- %tbody
15
- - if list.count > 0
16
- - list.all.each do |entity|
17
- %tr
18
- %td
19
- %a{ href: "#{base_path}/#{entity.id}" }= entity.email
20
- %td= entity.name
21
- %td= entity.surname
22
- %td= entity.roles_dataset.map(:name).map(&:titlecase).join(', ')
23
- %td= entity.created_at.strftime('%Y-%m-%d')
24
- - else
3
+ = haml :'partials/search'
4
+ %table.table.table-striped.table-bordered.table-hover
5
+ %thead.thead-dark
6
+ %tr
7
+ %th Email
8
+ %th Name
9
+ %th Surname
10
+ %th Roles
11
+ %th Signed Up
12
+ %th
13
+ %tbody
14
+ - if list.count > 0
15
+ - list.all.each do |entity|
25
16
  %tr
26
- %td.text-center{ colspan: 5 } No records
17
+ %td
18
+ - if policy(entity).read?
19
+ %a{ href: "#{base_path}/#{entity.display_id}" }= entity.email
20
+ - else
21
+ = entity.email
22
+ %td= entity.name
23
+ %td= entity.surname
24
+ %td= entity.all_roles.map(&:name).map(&:titlecase).join(', ')
25
+ %td= entity.created_at.strftime('%Y-%m-%d')
26
+ %td
27
+ - if policy(entity).update?
28
+ %a{ href: "#{base_path}/#{entity.display_id}/edit", title: 'Edit' }
29
+ %i.fa.fa-edit
30
+ - else
31
+ %tr
32
+ %td.text-center{ colspan: 6 } No records
27
33
 
28
- =pagination(list, base_path)
34
+ - if list.count > 0
35
+ =pagination(list, base_path)
@@ -1,11 +1,10 @@
1
1
  .row
2
- .col-md-2
3
- .col-md-8
4
- .panel.panel-default
5
- .panel-heading
6
- %h4 Logins
7
- %table.table
8
- %thead
2
+ .col-md-12
3
+ .card.card-default
4
+ .card-body
5
+ %h4.card-title Logins
6
+ %table.table.table-striped
7
+ %thead.thead-dark
9
8
  %tr
10
9
  %th IP Address
11
10
  %th Device
@@ -24,4 +23,3 @@
24
23
  - else
25
24
  %tr
26
25
  %td.text-center{ colspan: 5 } No Records
27
- .col-md-2
@@ -1,8 +1,8 @@
1
1
  .row
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  = new_form_tag base_path do
7
7
  = haml :'users/identity', locals: { identity: identity }
8
8
  = haml :'users/user', locals: { user: entity }
@@ -1,10 +1,10 @@
1
- .row
1
+ .row.mb-4
2
2
  .col-md-2
3
3
  .col-md-8
4
- .panel.panel-default
5
- .panel-body
4
+ .card.card-default
5
+ .card-body
6
6
  .author
7
- %img.pull-right.thumbnail{ src: entity.gravatar }
7
+ %img.float-right.img-thumbnail{ src: entity.gravatar }
8
8
  %h4= entity.email
9
9
 
10
10
  %hr
@@ -23,22 +23,22 @@
23
23
  .row
24
24
  .col-md-6
25
25
  - if policy(entity).update?
26
- %a.btn.btn-default{ href: "#{base_path}/#{entity.id}/edit" } Edit
26
+ %a.btn.btn-secondary{ href: "#{base_path}/#{entity.display_id}/edit" } Edit
27
27
  .col-md-6.text-right
28
28
  - if policy(entity).delete?
29
- = delete_form_tag("#{base_path}/#{entity.id}") do
29
+ = delete_form_tag("#{base_path}/#{entity.display_id}") do
30
30
  %button.btn.btn-warning{ type: 'submit' } Delete
31
31
  .col-md-2
32
32
 
33
- .row
33
+ .row.mb-4
34
34
  .col-md-2
35
35
  .col-md-8
36
- .panel.panel-default
37
- .panel-heading
38
- %h4 Change Password
39
- .panel-body
40
- = edit_form_tag("#{base_path}/#{entity.id}/identity") do
41
- = form_control(:old_password, identity, type: 'password', placeholder: 'Your current password')
36
+ .card.card-default
37
+ .card-body
38
+ %h4.card-title Change Password
39
+ = edit_form_tag("#{base_path}/#{entity.display_id}/identity") do
40
+ - if current_user.super_admin? == false
41
+ = form_control(:old_password, identity, type: 'password', placeholder: 'Your current password', value: '')
42
42
  = form_control(:password, identity, type: 'password', placeholder: 'Your new password')
43
43
  = form_control(:password_confirmation, identity, type: 'password', label: 'Confirm Password', placeholder: 'Confirm your password')
44
44
  %button.btn.btn-primary{ type: 'submit' }
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.8.0
4
+ version: 0.9.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: 2019-01-30 00:00:00.000000000 Z
11
+ date: 2020-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,76 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '3.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-performance
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-sequel
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop-thread_safety
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
97
167
  - !ruby/object:Gem::Dependency
98
168
  name: timecop
99
169
  requirement: !ruby/object:Gem::Requirement
@@ -150,20 +220,34 @@ dependencies:
150
220
  - - "~>"
151
221
  - !ruby/object:Gem::Version
152
222
  version: '2.5'
223
+ - !ruby/object:Gem::Dependency
224
+ name: dotenv
225
+ requirement: !ruby/object:Gem::Requirement
226
+ requirements:
227
+ - - ">="
228
+ - !ruby/object:Gem::Version
229
+ version: '2'
230
+ type: :runtime
231
+ prerelease: false
232
+ version_requirements: !ruby/object:Gem::Requirement
233
+ requirements:
234
+ - - ">="
235
+ - !ruby/object:Gem::Version
236
+ version: '2'
153
237
  - !ruby/object:Gem::Dependency
154
238
  name: haml
155
239
  requirement: !ruby/object:Gem::Requirement
156
240
  requirements:
157
241
  - - "~>"
158
242
  - !ruby/object:Gem::Version
159
- version: '5.0'
243
+ version: 5.1.2
160
244
  type: :runtime
161
245
  prerelease: false
162
246
  version_requirements: !ruby/object:Gem::Requirement
163
247
  requirements:
164
248
  - - "~>"
165
249
  - !ruby/object:Gem::Version
166
- version: '5.0'
250
+ version: 5.1.2
167
251
  - !ruby/object:Gem::Dependency
168
252
  name: logger
169
253
  requirement: !ruby/object:Gem::Requirement
@@ -429,34 +513,44 @@ files:
429
513
  - ".rspec"
430
514
  - ".rubocop.yml"
431
515
  - ".travis.yml"
516
+ - CNAME
432
517
  - Contributors.md
518
+ - Dockerfile
433
519
  - Gemfile.ci
434
520
  - License.txt
435
521
  - Rakefile
436
522
  - Readme.md
523
+ - _config.yml
437
524
  - config.ru
438
525
  - ditty.gemspec
526
+ - docs/CNAME
527
+ - docs/_config.yml
528
+ - docs/index.md
439
529
  - exe/ditty
440
530
  - lib/ditty.rb
441
531
  - lib/ditty/cli.rb
442
- - lib/ditty/components/app.rb
443
- - lib/ditty/controllers/application.rb
444
- - lib/ditty/controllers/audit_logs.rb
445
- - lib/ditty/controllers/auth.rb
446
- - lib/ditty/controllers/component.rb
447
- - lib/ditty/controllers/main.rb
448
- - lib/ditty/controllers/roles.rb
449
- - lib/ditty/controllers/user_login_traits.rb
450
- - lib/ditty/controllers/users.rb
532
+ - lib/ditty/components/ditty.rb
533
+ - lib/ditty/controllers/application_controller.rb
534
+ - lib/ditty/controllers/audit_logs_controller.rb
535
+ - lib/ditty/controllers/auth_controller.rb
536
+ - lib/ditty/controllers/component_controller.rb
537
+ - lib/ditty/controllers/main_controller.rb
538
+ - lib/ditty/controllers/roles_controller.rb
539
+ - lib/ditty/controllers/user_login_traits_controller.rb
540
+ - lib/ditty/controllers/users_controller.rb
451
541
  - lib/ditty/db.rb
452
542
  - lib/ditty/emails/base.rb
453
543
  - lib/ditty/emails/forgot_password.rb
544
+ - lib/ditty/generators/crud_generator.rb
545
+ - lib/ditty/generators/migration_generator.rb
546
+ - lib/ditty/generators/project_generator.rb
454
547
  - lib/ditty/helpers/authentication.rb
455
548
  - lib/ditty/helpers/component.rb
456
549
  - lib/ditty/helpers/pundit.rb
457
550
  - lib/ditty/helpers/response.rb
458
551
  - lib/ditty/helpers/views.rb
459
552
  - lib/ditty/listener.rb
553
+ - lib/ditty/memcached.rb
460
554
  - lib/ditty/middleware/accept_extension.rb
461
555
  - lib/ditty/middleware/error_catchall.rb
462
556
  - lib/ditty/models/audit_log.rb
@@ -480,6 +574,32 @@ files:
480
574
  - lib/ditty/services/settings.rb
481
575
  - lib/ditty/tasks/ditty.rake
482
576
  - lib/ditty/tasks/omniauth-ldap.rake
577
+ - lib/ditty/templates/.gitignore
578
+ - lib/ditty/templates/.rspec
579
+ - lib/ditty/templates/.rubocop.yml
580
+ - lib/ditty/templates/Rakefile
581
+ - lib/ditty/templates/application.rb
582
+ - lib/ditty/templates/config.ru
583
+ - lib/ditty/templates/controller.rb.erb
584
+ - lib/ditty/templates/env.example
585
+ - lib/ditty/templates/lib/project.rb.erb
586
+ - lib/ditty/templates/logs/.empty_directory
587
+ - lib/ditty/templates/migration.rb.erb
588
+ - lib/ditty/templates/model.rb.erb
589
+ - lib/ditty/templates/pids/.empty_directory
590
+ - lib/ditty/templates/policy.rb.erb
591
+ - lib/ditty/templates/public/css/sb-admin-2.min.css
592
+ - lib/ditty/templates/public/js/sb-admin-2.min.js
593
+ - lib/ditty/templates/settings.yml.erb
594
+ - lib/ditty/templates/sidekiq.rb
595
+ - lib/ditty/templates/sidekiq.yml
596
+ - lib/ditty/templates/spec_helper.rb
597
+ - lib/ditty/templates/type.rb.erb
598
+ - lib/ditty/templates/views/display.haml.tt
599
+ - lib/ditty/templates/views/edit.haml.tt
600
+ - lib/ditty/templates/views/form.haml.tt
601
+ - lib/ditty/templates/views/index.haml.tt
602
+ - lib/ditty/templates/views/new.haml.tt
483
603
  - lib/ditty/version.rb
484
604
  - lib/rubocop/cop/ditty/call_services_directly.rb
485
605
  - migrate/20170207_base_tables.rb
@@ -488,7 +608,9 @@ files:
488
608
  - migrate/20180307_password_reset.rb
489
609
  - migrate/20181209_add_user_login_traits.rb
490
610
  - migrate/20181209_extend_audit_log.rb
611
+ - migrate/20190220_add_parent_id_to_roles.rb
491
612
  - public/browserconfig.xml
613
+ - public/css/styles.css
492
614
  - public/images/apple-icon.png
493
615
  - public/images/favicon-16x16.png
494
616
  - public/images/favicon-32x32.png
@@ -497,6 +619,7 @@ files:
497
619
  - public/images/launcher-icon-4x.png
498
620
  - public/images/mstile-150x150.png
499
621
  - public/images/safari-pinned-tab.svg
622
+ - public/js/scripts.js
500
623
  - public/manifest.json
501
624
  - views/400.haml
502
625
  - views/403.haml
@@ -509,6 +632,7 @@ files:
509
632
  - views/auth/register.haml
510
633
  - views/auth/register_identity.haml
511
634
  - views/auth/reset_password.haml
635
+ - views/blank.haml
512
636
  - views/emails/base.haml
513
637
  - views/emails/forgot_password.haml
514
638
  - views/emails/layouts/action.haml
@@ -519,16 +643,18 @@ files:
519
643
  - views/index.haml
520
644
  - views/layout.haml
521
645
  - views/partials/actions.haml
646
+ - views/partials/content_tag.haml
522
647
  - views/partials/delete_form.haml
523
648
  - views/partials/filter_control.haml
524
649
  - views/partials/footer.haml
525
650
  - views/partials/form_control.haml
526
651
  - views/partials/form_tag.haml
527
- - views/partials/navbar.haml
652
+ - views/partials/navitems.haml
528
653
  - views/partials/notifications.haml
529
654
  - views/partials/pager.haml
530
655
  - views/partials/search.haml
531
656
  - views/partials/sidebar.haml
657
+ - views/partials/topbar.haml
532
658
  - views/roles/display.haml
533
659
  - views/roles/edit.haml
534
660
  - views/roles/form.haml
@@ -541,6 +667,7 @@ files:
541
667
  - views/user_login_traits/new.haml
542
668
  - views/users/display.haml
543
669
  - views/users/edit.haml
670
+ - views/users/form.haml
544
671
  - views/users/identity.haml
545
672
  - views/users/index.haml
546
673
  - views/users/login_traits.haml
@@ -566,7 +693,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
566
693
  - !ruby/object:Gem::Version
567
694
  version: '0'
568
695
  requirements: []
569
- rubygems_version: 3.0.2
696
+ rubyforge_project:
697
+ rubygems_version: 2.7.7
570
698
  signing_key:
571
699
  specification_version: 4
572
700
  summary: Sinatra Based Application Framework