solidstats 1.1.0 → 2.0.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +68 -0
  3. data/README.md +33 -0
  4. data/app/assets/javascripts/solidstats/application.js +257 -0
  5. data/app/assets/javascripts/solidstats/dashboard.js +225 -0
  6. data/app/assets/javascripts/solidstats/gem_metadata.js +554 -0
  7. data/app/assets/stylesheets/solidstats/application.css +6 -1
  8. data/app/assets/stylesheets/solidstats/components/action_button.css +99 -0
  9. data/app/assets/stylesheets/solidstats/components/dashboard.css +151 -0
  10. data/app/assets/stylesheets/solidstats/components/dashboard_header.css +93 -0
  11. data/app/assets/stylesheets/solidstats/components/dashboard_layout.css +97 -0
  12. data/app/assets/stylesheets/solidstats/components/gem_metadata.css +1403 -0
  13. data/app/assets/stylesheets/solidstats/components/navigation.css +80 -0
  14. data/app/assets/stylesheets/solidstats/components/quick_navigation.css +54 -0
  15. data/app/assets/stylesheets/solidstats/components/security.css +332 -0
  16. data/app/assets/stylesheets/solidstats/components/status_badge.css +58 -0
  17. data/app/assets/stylesheets/solidstats/components/summary_card.css +66 -0
  18. data/app/assets/stylesheets/solidstats/components/tab_navigation.css +95 -0
  19. data/app/components/solidstats/base_component.rb +88 -0
  20. data/app/components/solidstats/code_quality/code_quality_section_component.html.erb +0 -0
  21. data/app/components/solidstats/code_quality/code_quality_section_component.rb +0 -0
  22. data/app/components/solidstats/code_quality/section_component.html.erb +45 -0
  23. data/app/components/solidstats/code_quality/section_component.rb +34 -0
  24. data/app/components/solidstats/dashboard_header_component.html.erb +39 -0
  25. data/app/components/solidstats/dashboard_header_component.rb +33 -0
  26. data/app/components/solidstats/previews/action_button_component_preview/button_vs_link.html.erb +6 -0
  27. data/app/components/solidstats/previews/action_button_component_preview/sizes.html.erb +6 -0
  28. data/app/components/solidstats/previews/action_button_component_preview/variants.html.erb +6 -0
  29. data/app/components/solidstats/previews/action_button_component_preview/with_icons.html.erb +6 -0
  30. data/app/components/solidstats/previews/action_button_component_preview.rb +64 -0
  31. data/app/components/solidstats/previews/navigation_component_preview.rb +74 -0
  32. data/app/components/solidstats/previews/stats_overview_component_preview.rb +100 -0
  33. data/app/components/solidstats/previews/status_badge_component_preview/sizes.html.erb +6 -0
  34. data/app/components/solidstats/previews/status_badge_component_preview/statuses.html.erb +6 -0
  35. data/app/components/solidstats/previews/status_badge_component_preview/with_icons.html.erb +6 -0
  36. data/app/components/solidstats/previews/status_badge_component_preview.rb +49 -0
  37. data/app/components/solidstats/previews/summary_card_component_preview/clickable.html.erb +9 -0
  38. data/app/components/solidstats/previews/summary_card_component_preview/dashboard_layout.html.erb +9 -0
  39. data/app/components/solidstats/previews/summary_card_component_preview/statuses.html.erb +6 -0
  40. data/app/components/solidstats/previews/summary_card_component_preview/value_formats.html.erb +6 -0
  41. data/app/components/solidstats/previews/summary_card_component_preview.rb +67 -0
  42. data/app/components/solidstats/quick_navigation_component.html.erb +8 -0
  43. data/app/components/solidstats/quick_navigation_component.rb +21 -0
  44. data/app/components/solidstats/security/gem_impact_analysis_component.html.erb +44 -0
  45. data/app/components/solidstats/security/gem_impact_analysis_component.rb +45 -0
  46. data/app/components/solidstats/security/overview_component.html.erb +21 -0
  47. data/app/components/solidstats/security/overview_component.rb +104 -0
  48. data/app/components/solidstats/security/section_component.html.erb +26 -0
  49. data/app/components/solidstats/security/section_component.rb +52 -0
  50. data/app/components/solidstats/security/timeline_component.html.erb +39 -0
  51. data/app/components/solidstats/security/timeline_component.rb +43 -0
  52. data/app/components/solidstats/tasks_section_component.html.erb +17 -0
  53. data/app/components/solidstats/tasks_section_component.rb +22 -0
  54. data/app/components/solidstats/ui/action_button_component.html.erb +6 -0
  55. data/app/components/solidstats/ui/action_button_component.rb +71 -0
  56. data/app/components/solidstats/ui/dashboard_layout_component.html.erb +19 -0
  57. data/app/components/solidstats/ui/dashboard_layout_component.rb +85 -0
  58. data/app/components/solidstats/ui/navigation_component.html.erb +34 -0
  59. data/app/components/solidstats/ui/navigation_component.rb +72 -0
  60. data/app/components/solidstats/ui/stats_overview_component.html.erb +14 -0
  61. data/app/components/solidstats/ui/stats_overview_component.rb +78 -0
  62. data/app/components/solidstats/ui/status_badge_component.html.erb +6 -0
  63. data/app/components/solidstats/ui/status_badge_component.rb +42 -0
  64. data/app/components/solidstats/ui/summary_card_component.html.erb +12 -0
  65. data/app/components/solidstats/ui/summary_card_component.rb +63 -0
  66. data/app/components/solidstats/ui/tab_navigation_component.html.erb +22 -0
  67. data/app/components/solidstats/ui/tab_navigation_component.rb +79 -0
  68. data/app/controllers/solidstats/dashboard_controller.rb +8 -5
  69. data/app/controllers/solidstats/gem_metadata_controller.rb +12 -0
  70. data/app/helpers/solidstats/application_helper.rb +42 -0
  71. data/app/services/solidstats/gem_metadata/fetcher_service.rb +136 -0
  72. data/app/services/solidstats/log_size_monitor_service.rb +10 -10
  73. data/app/views/layouts/solidstats/application.html.erb +2 -1
  74. data/app/views/solidstats/dashboard/index.html.erb +67 -1337
  75. data/app/views/solidstats/gem_metadata/_panel.html.erb +419 -0
  76. data/config/routes.rb +5 -2
  77. data/lib/generators/solidstats/feature/feature_generator.rb +170 -0
  78. data/lib/generators/solidstats/feature/templates/component.html.erb +84 -0
  79. data/lib/generators/solidstats/feature/templates/component.rb.erb +103 -0
  80. data/lib/generators/solidstats/feature/templates/component.scss +243 -0
  81. data/lib/generators/solidstats/feature/templates/component_test.rb.erb +183 -0
  82. data/lib/generators/solidstats/feature/templates/controller.rb.erb +44 -0
  83. data/lib/generators/solidstats/feature/templates/controller_test.rb.erb +111 -0
  84. data/lib/generators/solidstats/feature/templates/detail_view.html.erb +755 -0
  85. data/lib/generators/solidstats/feature/templates/preview.rb.erb +107 -0
  86. data/lib/generators/solidstats/feature/templates/service.rb.erb +132 -0
  87. data/lib/generators/solidstats/feature/templates/service_test.rb.erb +109 -0
  88. data/lib/generators/solidstats/install_generator.rb +109 -0
  89. data/lib/generators/solidstats/templates/initializer.rb +112 -0
  90. data/lib/solidstats/asset_compatibility.rb +238 -0
  91. data/lib/solidstats/asset_manifest.rb +205 -0
  92. data/lib/solidstats/engine.rb +114 -9
  93. data/lib/solidstats/version.rb +1 -1
  94. data/lib/solidstats.rb +299 -2
  95. data/lib/tasks/solidstats_install.rake +122 -2
  96. metadata +97 -2
@@ -0,0 +1,151 @@
1
+ /* Main Dashboard Styles */
2
+ .solidstats-dashboard {
3
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
4
+ color: #333;
5
+ max-width: 1200px;
6
+ margin: 0 auto;
7
+ padding: 20px;
8
+ }
9
+
10
+ /* Section Styles */
11
+ .dashboard-section {
12
+ display: none;
13
+ margin-bottom: 3rem;
14
+ opacity: 0;
15
+ transform: translateY(10px);
16
+ transition: opacity 0.3s ease, transform 0.3s ease;
17
+ }
18
+
19
+ .dashboard-section.active {
20
+ display: block;
21
+ opacity: 1;
22
+ transform: translateY(0);
23
+ }
24
+
25
+ .section-title {
26
+ font-size: 1.5rem;
27
+ font-weight: 600;
28
+ margin-bottom: 1.5rem;
29
+ color: #2c3e50;
30
+ border-bottom: 2px solid #ecf0f1;
31
+ padding-bottom: 0.5rem;
32
+ }
33
+
34
+ /* Tab Styles */
35
+ .tabs-container {
36
+ margin-top: 2rem;
37
+ }
38
+
39
+ .tabs-header {
40
+ display: flex;
41
+ border-bottom: 2px solid #ecf0f1;
42
+ margin-bottom: 1.5rem;
43
+ gap: 0.5rem;
44
+ }
45
+
46
+ .tab-button {
47
+ padding: 0.75rem 1.5rem;
48
+ background: none;
49
+ border: none;
50
+ cursor: pointer;
51
+ border-radius: 6px 6px 0 0;
52
+ transition: all 0.2s ease;
53
+ font-weight: 500;
54
+ color: #666;
55
+ display: flex;
56
+ align-items: center;
57
+ gap: 0.5rem;
58
+ }
59
+
60
+ .tab-button:hover {
61
+ background-color: #f8f9fa;
62
+ color: #333;
63
+ }
64
+
65
+ .tab-button.active {
66
+ background-color: #007bff;
67
+ color: white;
68
+ border-bottom: 2px solid #007bff;
69
+ margin-bottom: -2px;
70
+ }
71
+
72
+ .tab-content {
73
+ display: none;
74
+ }
75
+
76
+ .tab-content.active {
77
+ display: block;
78
+ }
79
+
80
+ .tab-icon {
81
+ font-size: 1rem;
82
+ }
83
+
84
+ /* Card Styles */
85
+ .stat-card {
86
+ background: #fff;
87
+ border-radius: 8px;
88
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
89
+ padding: 1.5rem;
90
+ margin-bottom: 1rem;
91
+ border-left: 4px solid #007bff;
92
+ transition: transform 0.2s ease;
93
+ }
94
+
95
+ .stat-card:hover {
96
+ transform: translateY(-2px);
97
+ }
98
+
99
+ .stat-card.status-ok {
100
+ border-left-color: #28a745;
101
+ }
102
+
103
+ .stat-card.status-warning {
104
+ border-left-color: #ffc107;
105
+ }
106
+
107
+ .stat-card.status-danger {
108
+ border-left-color: #dc3545;
109
+ }
110
+
111
+ .card-content {
112
+ margin-top: 1rem;
113
+ }
114
+
115
+ /* Progress Bar */
116
+ .progress-container {
117
+ background-color: #e9ecef;
118
+ border-radius: 4px;
119
+ overflow: hidden;
120
+ height: 20px;
121
+ margin-bottom: 1rem;
122
+ }
123
+
124
+ .progress-bar {
125
+ height: 100%;
126
+ background-color: #28a745;
127
+ transition: width 0.3s ease;
128
+ }
129
+
130
+ /* Empty State */
131
+ .empty-state {
132
+ text-align: center;
133
+ padding: 3rem;
134
+ color: #6c757d;
135
+ }
136
+
137
+ .empty-icon {
138
+ font-size: 3rem;
139
+ margin-bottom: 1rem;
140
+ }
141
+
142
+ .empty-message {
143
+ font-size: 1.2rem;
144
+ font-weight: 600;
145
+ margin-bottom: 0.5rem;
146
+ }
147
+
148
+ .empty-description {
149
+ font-size: 0.9rem;
150
+ opacity: 0.8;
151
+ }
@@ -0,0 +1,93 @@
1
+ /* Dashboard Header Styles */
2
+ .dashboard-header {
3
+ margin-bottom: 2rem;
4
+ position: sticky;
5
+ top: 0;
6
+ z-index: 100;
7
+ background-color: #fff;
8
+ padding: 15px 0;
9
+ border-bottom: 1px solid #eaeaea;
10
+ }
11
+
12
+ .header-main {
13
+ display: flex;
14
+ justify-content: space-between;
15
+ align-items: baseline;
16
+ margin-bottom: 1rem;
17
+ }
18
+
19
+ .dashboard-header h1 {
20
+ font-size: 1.8rem;
21
+ font-weight: 600;
22
+ margin: 0;
23
+ }
24
+
25
+ .audit-date {
26
+ color: #666;
27
+ margin: 0;
28
+ font-size: 0.9rem;
29
+ }
30
+
31
+ .dashboard-nav {
32
+ display: flex;
33
+ justify-content: space-between;
34
+ align-items: center;
35
+ }
36
+
37
+ .dashboard-nav ul {
38
+ display: flex;
39
+ list-style-type: none;
40
+ margin: 0;
41
+ padding: 0;
42
+ gap: 1rem;
43
+ }
44
+
45
+ .nav-item {
46
+ padding: 0.5rem 1rem;
47
+ text-decoration: none;
48
+ color: #666;
49
+ border-radius: 6px;
50
+ transition: all 0.2s;
51
+ border: 1px solid transparent;
52
+ }
53
+
54
+ .nav-item:hover {
55
+ background-color: #f8f9fa;
56
+ color: #333;
57
+ }
58
+
59
+ .nav-item.active {
60
+ background-color: #007bff;
61
+ color: white;
62
+ border-color: #007bff;
63
+ }
64
+
65
+ .dashboard-actions {
66
+ display: flex;
67
+ gap: 0.5rem;
68
+ }
69
+
70
+ .header-content {
71
+ display: flex;
72
+ justify-content: space-between;
73
+ align-items: center;
74
+ margin-bottom: 1rem;
75
+ }
76
+
77
+ .header-title h1 {
78
+ margin: 0 0 0.5rem 0;
79
+ font-size: 1.875rem;
80
+ font-weight: 700;
81
+ color: #111827;
82
+ }
83
+
84
+ .last-updated {
85
+ color: #6b7280;
86
+ font-size: 0.875rem;
87
+ font-weight: 500;
88
+ }
89
+
90
+ .header-actions {
91
+ display: flex;
92
+ gap: 0.5rem;
93
+ }
@@ -0,0 +1,97 @@
1
+ /* DashboardLayoutComponent Styles */
2
+ .solidstats-dashboard {
3
+ min-height: 100vh;
4
+ background-color: #f9fafb;
5
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
6
+ }
7
+
8
+ .dashboard-header {
9
+ background-color: #ffffff;
10
+ border-bottom: 1px solid #e5e7eb;
11
+ padding: 1rem 2rem;
12
+ position: sticky;
13
+ top: 0;
14
+ z-index: 10;
15
+ }
16
+
17
+ .header-main {
18
+ margin-bottom: 1rem;
19
+ }
20
+
21
+ .header-main h1 {
22
+ margin: 0 0 0.5rem 0;
23
+ font-size: 1.875rem;
24
+ font-weight: 700;
25
+ color: #111827;
26
+ display: flex;
27
+ align-items: center;
28
+ gap: 0.5rem;
29
+ }
30
+
31
+ .audit-date {
32
+ display: inline-block;
33
+ color: #6b7280;
34
+ font-size: 0.875rem;
35
+ font-weight: 500;
36
+ }
37
+
38
+ /* Stats Summary Grid */
39
+ .stats-summary {
40
+ display: grid;
41
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
42
+ gap: 1.5rem;
43
+ margin-bottom: 2rem;
44
+ padding: 0 2rem;
45
+ }
46
+
47
+ /* Dashboard Sections */
48
+ .dashboard-section {
49
+ padding: 2rem;
50
+ margin-bottom: 2rem;
51
+ }
52
+
53
+ .dashboard-section:not(.active) {
54
+ display: none;
55
+ }
56
+
57
+ .tab-content {
58
+ display: none;
59
+ }
60
+
61
+ .tab-content.active {
62
+ display: block;
63
+ }
64
+
65
+ .section-title {
66
+ margin: 0 0 1.5rem 0;
67
+ font-size: 1.5rem;
68
+ font-weight: 600;
69
+ color: #111827;
70
+ }
71
+
72
+ /* Responsive Design */
73
+ @media (max-width: 768px) {
74
+ .dashboard-header {
75
+ padding: 1rem;
76
+ }
77
+
78
+ .dashboard-nav {
79
+ flex-direction: column;
80
+ gap: 1rem;
81
+ align-items: stretch;
82
+ }
83
+
84
+ .dashboard-nav ul {
85
+ justify-content: center;
86
+ flex-wrap: wrap;
87
+ }
88
+
89
+ .stats-summary {
90
+ grid-template-columns: 1fr;
91
+ padding: 0 1rem;
92
+ }
93
+
94
+ .dashboard-section {
95
+ padding: 1rem;
96
+ }
97
+ }