ditty 0.8.0 → 0.9.0

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 (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