appydave-tools 0.43.0 → 0.45.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +14 -0
- data/lib/appydave/tools/dam/project_listing.rb +65 -8
- data/lib/appydave/tools/version.rb +1 -1
- data/package.json +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a12259907f7e3da7f0e18fc5f0f7aaff5744d412e1a42dc880c6c1170f4c674c
|
|
4
|
+
data.tar.gz: 4e58da3b9f3d2d06c7962aee6293bfb0dbecc88e6860bf43bd9eee16a02488fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2d270d23430edfdcfe7a657dd1079d659539094bfc4e0b09094ad45be035374def183bd939a6278aa426f387dc1597eed97cd87829fc6624f05ce04b2871dab2
|
|
7
|
+
data.tar.gz: d31d0447c59b16fc2722d86f42853f35df599a752e98397be3e9c25eb34d2e0b6858a5d0a5277aa8efaff41afe84c21087ec146997ac78b92627182a39e875c5
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [0.44.0](https://github.com/appydave/appydave-tools/compare/v0.43.0...v0.44.0) (2025-11-21)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* add AGE column to project listing with stale indicator ([31ab044](https://github.com/appydave/appydave-tools/commit/31ab044f750c9fc4472365252205a356ff607b7e))
|
|
7
|
+
|
|
8
|
+
# [0.43.0](https://github.com/appydave/appydave-tools/compare/v0.42.0...v0.43.0) (2025-11-21)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* improve DAM error messages with helpful hints and match counts ([bb4e71e](https://github.com/appydave/appydave-tools/commit/bb4e71ea064b131b7df05e61e98eefc858cbb610))
|
|
14
|
+
|
|
1
15
|
# [0.42.0](https://github.com/appydave/appydave-tools/compare/v0.41.0...v0.42.0) (2025-11-21)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -80,25 +80,35 @@ module Appydave
|
|
|
80
80
|
name: project,
|
|
81
81
|
path: project_path,
|
|
82
82
|
size: size,
|
|
83
|
-
modified: modified
|
|
83
|
+
modified: modified,
|
|
84
|
+
age: format_age(modified),
|
|
85
|
+
stale: stale?(modified)
|
|
84
86
|
}
|
|
85
87
|
end
|
|
86
88
|
|
|
87
89
|
# Print table header
|
|
88
90
|
puts "Projects in #{brand}:"
|
|
89
|
-
puts 'PROJECT SIZE
|
|
91
|
+
puts 'PROJECT SIZE AGE PATH'
|
|
90
92
|
puts '-' * 120
|
|
91
93
|
|
|
92
94
|
# Print table rows
|
|
93
95
|
project_data.each do |data|
|
|
96
|
+
age_display = data[:stale] ? "#{data[:age]} ⚠️" : data[:age]
|
|
94
97
|
puts format(
|
|
95
|
-
'%-45s %12s %
|
|
98
|
+
'%-45s %12s %15s %s',
|
|
96
99
|
data[:name],
|
|
97
100
|
format_size(data[:size]),
|
|
98
|
-
|
|
101
|
+
age_display,
|
|
99
102
|
shorten_path(data[:path])
|
|
100
103
|
)
|
|
101
104
|
end
|
|
105
|
+
|
|
106
|
+
# Print footer summary
|
|
107
|
+
total_size = project_data.sum { |d| d[:size] }
|
|
108
|
+
project_count = project_data.size
|
|
109
|
+
|
|
110
|
+
puts ''
|
|
111
|
+
puts "Total: #{project_count} project#{'s' if project_count != 1}, #{format_size(total_size)}"
|
|
102
112
|
end
|
|
103
113
|
|
|
104
114
|
# List with pattern matching (Mode 3b)
|
|
@@ -131,26 +141,39 @@ module Appydave
|
|
|
131
141
|
name: project,
|
|
132
142
|
path: project_path,
|
|
133
143
|
size: size,
|
|
134
|
-
modified: modified
|
|
144
|
+
modified: modified,
|
|
145
|
+
age: format_age(modified),
|
|
146
|
+
stale: stale?(modified)
|
|
135
147
|
}
|
|
136
148
|
end
|
|
137
149
|
|
|
138
150
|
# Print table header
|
|
139
151
|
match_count = matches.size
|
|
140
152
|
puts "#{match_count} project#{'s' if match_count != 1} matching '#{pattern}' in #{brand}:"
|
|
141
|
-
puts 'PROJECT SIZE
|
|
153
|
+
puts 'PROJECT SIZE AGE PATH'
|
|
142
154
|
puts '-' * 120
|
|
143
155
|
|
|
144
156
|
# Print table rows
|
|
145
157
|
project_data.each do |data|
|
|
158
|
+
age_display = data[:stale] ? "#{data[:age]} ⚠️" : data[:age]
|
|
146
159
|
puts format(
|
|
147
|
-
'%-45s %12s %
|
|
160
|
+
'%-45s %12s %15s %s',
|
|
148
161
|
data[:name],
|
|
149
162
|
format_size(data[:size]),
|
|
150
|
-
|
|
163
|
+
age_display,
|
|
151
164
|
shorten_path(data[:path])
|
|
152
165
|
)
|
|
153
166
|
end
|
|
167
|
+
|
|
168
|
+
# Print footer summary
|
|
169
|
+
total_size = project_data.sum { |d| d[:size] }
|
|
170
|
+
all_projects = ProjectResolver.list_projects(brand_arg)
|
|
171
|
+
brand_total_size = calculate_total_size(brand_arg, all_projects)
|
|
172
|
+
percentage = brand_total_size.positive? ? (total_size.to_f / brand_total_size * 100).round(1) : 0
|
|
173
|
+
|
|
174
|
+
puts ''
|
|
175
|
+
puts "Total: #{match_count} project#{'s' if match_count != 1}, #{format_size(total_size)} " \
|
|
176
|
+
"(#{percentage}% of #{brand})"
|
|
154
177
|
end
|
|
155
178
|
|
|
156
179
|
# Helper methods
|
|
@@ -183,6 +206,40 @@ module Appydave
|
|
|
183
206
|
time.strftime('%Y-%m-%d %H:%M')
|
|
184
207
|
end
|
|
185
208
|
|
|
209
|
+
# Format age as relative time (e.g., "3 days", "2 weeks")
|
|
210
|
+
def self.format_age(time)
|
|
211
|
+
return 'N/A' if time.nil?
|
|
212
|
+
|
|
213
|
+
seconds = Time.now - time
|
|
214
|
+
return 'just now' if seconds < 60
|
|
215
|
+
|
|
216
|
+
minutes = seconds / 60
|
|
217
|
+
return "#{minutes.round}m" if minutes < 60
|
|
218
|
+
|
|
219
|
+
hours = minutes / 60
|
|
220
|
+
return "#{hours.round}h" if hours < 24
|
|
221
|
+
|
|
222
|
+
days = hours / 24
|
|
223
|
+
return "#{days.round}d" if days < 7
|
|
224
|
+
|
|
225
|
+
weeks = days / 7
|
|
226
|
+
return "#{weeks.round}w" if weeks < 4
|
|
227
|
+
|
|
228
|
+
months = days / 30
|
|
229
|
+
return "#{months.round}mo" if months < 12
|
|
230
|
+
|
|
231
|
+
years = days / 365
|
|
232
|
+
"#{years.round}y"
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
# Check if project is stale (>90 days old)
|
|
236
|
+
def self.stale?(time)
|
|
237
|
+
return false if time.nil?
|
|
238
|
+
|
|
239
|
+
days = (Time.now - time) / 86_400 # seconds in a day
|
|
240
|
+
days > 90
|
|
241
|
+
end
|
|
242
|
+
|
|
186
243
|
# Shorten path by replacing home directory with ~
|
|
187
244
|
def self.shorten_path(path)
|
|
188
245
|
path.sub(Dir.home, '~')
|
data/package.json
CHANGED