solid_cache_dashboard 0.0.1 → 0.1.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.
@@ -10,8 +10,7 @@ module SolidCacheDashboard
10
10
  end
11
11
 
12
12
  def key
13
- readable_key = @entry.key.force_encoding("UTF-8")
14
- readable_key.match?(/^[-+\/=A-Za-z0-9]+$/) ? readable_key : key_hash
13
+ @entry.key
15
14
  rescue
16
15
  key_hash
17
16
  end
@@ -35,25 +34,107 @@ module SolidCacheDashboard
35
34
  end
36
35
 
37
36
  def created_at_ago
38
- time_ago_in_words(created_at)
37
+ time_ago_in_words(created_at, Time.now)
39
38
  end
40
39
 
41
- private
40
+ def status
41
+ expires_at.present? && expires_at <= Time.now ? SolidCacheDashboard::CacheEntry::EXPIRED : SolidCacheDashboard::CacheEntry::ACTIVE
42
+ end
43
+
44
+ def status_badge
45
+ status_text = status.to_s.capitalize
46
+ color = SolidCacheDashboard::CacheEntry.status_color(status)
47
+
48
+ "<span class='inline-flex items-center px-2.5 py-0.5 rounded-full text-xs font-medium bg-#{color}-100 dark:bg-#{color}-800 text-#{color}-800 dark:text-#{color}-100'>#{status_text}</span>".html_safe
49
+ end
50
+
51
+ def expires_at
52
+ return unless @entry.respond_to?(:expires_at)
53
+ @entry.expires_at
54
+ end
55
+
56
+ def expires_in
57
+ return unless expires_at
58
+
59
+ if expires_at <= Time.now
60
+ "Expired #{time_ago_in_words(expires_at, Time.now)}"
61
+ else
62
+ time_ago_in_words(Time.now, expires_at)
63
+ end
64
+ end
65
+
66
+ def encrypted?
67
+ return false unless defined?(SolidCache.configuration)
68
+ SolidCache.configuration.encrypt?
69
+ end
70
+
71
+ def encryption_status
72
+ encrypted? ? "Encrypted" : "Not encrypted"
73
+ end
74
+
75
+ def estimated_row_overhead
76
+ if encrypted?
77
+ SolidCache::Entry::ESTIMATED_ROW_OVERHEAD + SolidCache::Entry::ESTIMATED_ENCRYPTION_OVERHEAD
78
+ else
79
+ SolidCache::Entry::ESTIMATED_ROW_OVERHEAD
80
+ end
81
+ rescue NameError
82
+ 140 # fallback to default ESTIMATED_ROW_OVERHEAD
83
+ end
84
+
85
+ def key_size
86
+ @entry.key.to_s.bytesize
87
+ end
88
+
89
+ def value_size
90
+ @entry.value.to_s.bytesize
91
+ end
92
+
93
+ def overhead_size
94
+ byte_size - key_size - value_size
95
+ end
96
+
97
+ def overhead_percentage
98
+ return 0 if byte_size == 0
99
+ (overhead_size.to_f / byte_size * 100).round(1)
100
+ end
42
101
 
43
- def time_ago_in_words(time)
44
- distance_in_seconds = (Time.now - time).round
102
+ def total_lifetime
103
+ return nil unless expires_at && created_at
104
+
105
+ distance_in_seconds = (expires_at - created_at).round
45
106
 
46
107
  case distance_in_seconds
47
108
  when 0..59
48
- "#{distance_in_seconds} seconds ago"
109
+ "#{distance_in_seconds} seconds"
110
+ when 60..3599
111
+ "#{(distance_in_seconds / 60).round} minutes"
112
+ when 3600..86399
113
+ "#{(distance_in_seconds / 3600).round} hours"
114
+ else
115
+ "#{(distance_in_seconds / 86400).round} days"
116
+ end
117
+ end
118
+
119
+ def time_ago_in_words(from_time, to_time = Time.now)
120
+ distance_in_seconds = (to_time - from_time).abs.round
121
+ suffix = to_time > from_time ? "ago" : "from now"
122
+
123
+ time_words = case distance_in_seconds
124
+ when 0..59
125
+ "#{distance_in_seconds} seconds"
49
126
  when 60..3599
50
- "#{(distance_in_seconds / 60).round} minutes ago"
127
+ "#{(distance_in_seconds / 60).round} minutes"
51
128
  when 3600..86399
52
- "#{(distance_in_seconds / 3600).round} hours ago"
129
+ "#{(distance_in_seconds / 3600).round} hours"
53
130
  else
54
- "#{(distance_in_seconds / 86400).round} days ago"
131
+ "#{(distance_in_seconds / 86400).round} days"
55
132
  end
133
+
134
+ "#{time_words} #{suffix}"
56
135
  end
136
+
137
+ private
57
138
  end
58
139
  end
59
140
  end
@@ -1,3 +1,5 @@
1
+ require 'pagy'
2
+
1
3
  module SolidCacheDashboard
2
4
  class Engine < ::Rails::Engine
3
5
  isolate_namespace SolidCacheDashboard
@@ -15,5 +17,16 @@ module SolidCacheDashboard
15
17
  SolidCacheDashboard::Instrumentation.install
16
18
  end
17
19
  end
20
+
21
+ initializer "solid_cache_dashboard.pagy" do
22
+ # Include Pagy modules in application controller and views
23
+ ActiveSupport.on_load(:action_controller) do
24
+ include Pagy::Backend
25
+ end
26
+
27
+ ActiveSupport.on_load(:action_view) do
28
+ include Pagy::Frontend
29
+ end
30
+ end
18
31
  end
19
32
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidCacheDashboard
4
- VERSION = "0.0.1"
4
+ VERSION = "0.1.0"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solid_cache_dashboard
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrea Fomera
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-02-25 00:00:00.000000000 Z
10
+ date: 2025-02-26 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: solid_cache
@@ -51,6 +51,20 @@ dependencies:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
53
  version: '5.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: pagy
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '6.0'
61
+ type: :runtime
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '6.0'
54
68
  description: Dashboard for Solid Cache
55
69
  email:
56
70
  - afomera@hey.com
@@ -75,6 +89,7 @@ files:
75
89
  - app/views/solid_cache_dashboard/application/_flash_messages.html.erb
76
90
  - app/views/solid_cache_dashboard/application/_footer.html.erb
77
91
  - app/views/solid_cache_dashboard/application/_navbar.html.erb
92
+ - app/views/solid_cache_dashboard/application/_pagination.html.erb
78
93
  - app/views/solid_cache_dashboard/cache_entries/index.html.erb
79
94
  - app/views/solid_cache_dashboard/cache_entries/show.html.erb
80
95
  - app/views/solid_cache_dashboard/cache_events/index.html.erb