lesli_audit 1.1.1 → 1.1.2

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 (43) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +6 -1
  3. data/app/assets/stylesheets/lesli_audit/application.css +366 -35
  4. data/app/controllers/lesli_audit/accounts_controller.rb +7 -3
  5. data/app/controllers/lesli_audit/logs_controller.rb +3 -8
  6. data/app/controllers/lesli_audit/visitors_controller.rb +1 -1
  7. data/app/interfaces/lesli_audit/logger_interface.rb +56 -59
  8. data/app/jobs/lesli_audit/retention_cleanup_job.rb +9 -0
  9. data/app/models/concerns/lesli_audit/append_only.rb +12 -0
  10. data/app/models/lesli_audit/account.rb +26 -10
  11. data/app/models/lesli_audit/account_device.rb +3 -1
  12. data/app/models/lesli_audit/account_log.rb +12 -7
  13. data/app/models/lesli_audit/account_request.rb +3 -1
  14. data/app/models/lesli_audit/user_journal.rb +16 -3
  15. data/app/models/lesli_audit/user_log.rb +12 -3
  16. data/app/models/lesli_audit/user_request.rb +7 -3
  17. data/app/services/lesli_audit/activity_audit.rb +130 -0
  18. data/app/services/lesli_audit/request_service.rb +2 -35
  19. data/app/services/lesli_audit/retention_cleanup.rb +146 -0
  20. data/app/services/lesli_audit/user_agent_parser.rb +51 -0
  21. data/app/services/lesli_audit/user_service.rb +18 -16
  22. data/app/services/lesli_audit/visitor_service.rb +22 -49
  23. data/app/views/lesli_audit/logs/show.html.erb +14 -8
  24. data/app/views/lesli_audit/partials/_navigation.html.erb +1 -1
  25. data/app/views/lesli_audit/users/index.html.erb +0 -3
  26. data/app/views/lesli_audit/visitors/index.html.erb +12 -12
  27. data/config/routes.rb +3 -2
  28. data/db/migrate/v1.0/0501000110_create_lesli_audit_accounts.rb +14 -1
  29. data/db/migrate/v1.0/0501110110_create_lesli_audit_account_logs.rb +10 -6
  30. data/db/migrate/v1.0/0501110210_create_lesli_audit_account_devices.rb +10 -7
  31. data/db/migrate/v1.0/0501110310_create_lesli_audit_account_requests.rb +10 -7
  32. data/db/migrate/v1.0/0501120110_create_lesli_audit_user_logs.rb +11 -7
  33. data/db/migrate/v1.0/0501120210_create_lesli_audit_user_journals.rb +19 -8
  34. data/db/migrate/v1.0/0501120310_create_lesli_audit_user_requests.rb +13 -10
  35. data/db/seed/devices.rb +1 -1
  36. data/db/seed/requests.rb +3 -3
  37. data/lib/lesli_audit/engine.rb +1 -12
  38. data/lib/lesli_audit/version.rb +2 -2
  39. data/lib/tasks/lesli_audit_tasks.rake +12 -4
  40. data/readme.md +18 -5
  41. metadata +14 -6
  42. data/app/assets/stylesheets/lesli_audit/application.tailwind.css +0 -2
  43. data/app/models/concerns/lesli_audit/user_associations.rb +0 -11
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lesli_audit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Lesli Development Team
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 1980-01-02 00:00:00.000000000 Z
11
+ date: 2026-10-23 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: lesli
@@ -48,7 +49,6 @@ files:
48
49
  - app/assets/images/lesli_audit/audit-logo.svg
49
50
  - app/assets/javascripts/lesli_audit/application.js
50
51
  - app/assets/stylesheets/lesli_audit/application.css
51
- - app/assets/stylesheets/lesli_audit/application.tailwind.css
52
52
  - app/controllers/lesli_audit/accounts_controller.rb
53
53
  - app/controllers/lesli_audit/application_controller.rb
54
54
  - app/controllers/lesli_audit/dashboards_controller.rb
@@ -65,8 +65,9 @@ files:
65
65
  - app/helpers/lesli_audit/users_helper.rb
66
66
  - app/interfaces/lesli_audit/logger_interface.rb
67
67
  - app/jobs/lesli_audit/application_job.rb
68
+ - app/jobs/lesli_audit/retention_cleanup_job.rb
68
69
  - app/mailers/lesli_audit/application_mailer.rb
69
- - app/models/concerns/lesli_audit/user_associations.rb
70
+ - app/models/concerns/lesli_audit/append_only.rb
70
71
  - app/models/lesli_audit/account.rb
71
72
  - app/models/lesli_audit/account_device.rb
72
73
  - app/models/lesli_audit/account_log.rb
@@ -76,8 +77,11 @@ files:
76
77
  - app/models/lesli_audit/user_journal.rb
77
78
  - app/models/lesli_audit/user_log.rb
78
79
  - app/models/lesli_audit/user_request.rb
80
+ - app/services/lesli_audit/activity_audit.rb
79
81
  - app/services/lesli_audit/log_service.rb
80
82
  - app/services/lesli_audit/request_service.rb
83
+ - app/services/lesli_audit/retention_cleanup.rb
84
+ - app/services/lesli_audit/user_agent_parser.rb
81
85
  - app/services/lesli_audit/user_service.rb
82
86
  - app/services/lesli_audit/visitor_service.rb
83
87
  - app/views/lesli_audit/dashboards/_component-calendar.html.erb
@@ -120,8 +124,11 @@ licenses:
120
124
  - GPL-3.0
121
125
  metadata:
122
126
  homepage_uri: https://www.lesli.dev/
123
- changelog_uri: https://github.com/LesliTech/LesliAudit
127
+ changelog_uri: https://github.com/LesliTech/LesliAudit/releases
124
128
  source_code_uri: https://github.com/LesliTech/LesliAudit
129
+ bug_tracker_uri: https://github.com/LesliTech/LesliAudit/issues
130
+ documentation_uri: https://www.lesli.dev/engines/audit/
131
+ post_install_message:
125
132
  rdoc_options: []
126
133
  require_paths:
127
134
  - lib
@@ -136,7 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
143
  - !ruby/object:Gem::Version
137
144
  version: '0'
138
145
  requirements: []
139
- rubygems_version: 3.7.1
146
+ rubygems_version: 3.5.16
147
+ signing_key:
140
148
  specification_version: 4
141
149
  summary: Logs Activities & Analytics for The Lesli Framework
142
150
  test_files: []
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@layer theme{:root,:host{--color-amber-600:oklch(66.6% .179 58.318);--color-sky-600:oklch(58.8% .158 241.966);--color-rose-600:oklch(58.6% .253 17.585);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-900:oklch(20.8% .042 265.755);--color-white:#fff;--spacing:.25rem;--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--radius-2xl:1rem}}@layer utilities{.absolute{position:absolute}.relative{position:relative}.inset-y-0{inset-block:0}.left-0{left:0}.isolate{isolation:isolate}.-z-10{z-index:calc(10 * -1)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-6{margin-top:calc(var(--spacing) * 6)}.flex{display:flex}.grid{display:grid}.inline-flex{display:inline-flex}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-full{width:100%}.\!min-w-0{min-width:0!important}.min-w-0{min-width:0}.shrink-0{flex-shrink:0}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:calc(var(--spacing) * 2)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.rounded-2xl{border-radius:var(--radius-2xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-slate-200{border-color:var(--color-slate-200)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-white{background-color:var(--color-white)}.\!p-0{padding:0!important}.p-5{padding:calc(var(--spacing) * 5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.pb-8{padding-bottom:calc(var(--spacing) * 8)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.leading-none{--tw-leading:1;line-height:1}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-amber-600{color:var(--color-amber-600)}.text-rose-600{color:var(--color-rose-600)}.text-sky-600{color:var(--color-sky-600)}.text-slate-500{color:var(--color-slate-500)}.text-slate-700{color:var(--color-slate-700)}.text-slate-900{color:var(--color-slate-900)}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}@media (min-width:40rem){.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:64rem){.lg\:w-2\/5{width:40%}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}}}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}
@@ -1,11 +0,0 @@
1
- module LesliAudit
2
- module UserAssociations
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- has_many :requests, class_name: "LesliAudit::UserRequest"
7
- has_many :journals, class_name: "LesliAudit::UserJournal"
8
- has_many :logs, class_name: "LesliAudit::UserLog"
9
- end
10
- end
11
- end