rubion 0.3.4 → 0.3.5
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/lib/rubion/reporter.rb +29 -8
- data/lib/rubion/scanner.rb +4 -2
- data/lib/rubion/version.rb +1 -1
- data/lib/rubion.rb +10 -3
- 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: 2650a4a9cb6749a2d6e7a3c74f2917130aff97b5dc2c47dd8cf221ea5e1f5f23
|
|
4
|
+
data.tar.gz: 3b5f971c826e2e4a7e687fbd7565f78afe4977d0c6cc09e41ec8e0f83fde3069
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 13fc340260cd647ed4515419e2befa74e10fa00aa85ffa8c4d8a8c48822ad394b09d03c4ddc33f68f21d63052ed735354e743b2b219dd5c35b67e5d3748606c4
|
|
7
|
+
data.tar.gz: 5d807f967aba90df47307498229ea1f7e6b8d3dcb884cf18e4bd0d485a7cf0d31dc3d24539faed14e883f0b4c6114f384245d386dcb571951b86193078856d0e
|
data/lib/rubion/reporter.rb
CHANGED
|
@@ -74,16 +74,24 @@ module Rubion
|
|
|
74
74
|
return
|
|
75
75
|
end
|
|
76
76
|
|
|
77
|
-
#
|
|
77
|
+
# Filter to only direct dependencies if flag is set
|
|
78
78
|
versions = @result.gem_versions.dup
|
|
79
|
+
versions = versions.select { |gem| gem[:direct] } if @exclude_dependencies
|
|
80
|
+
|
|
81
|
+
if versions.empty?
|
|
82
|
+
puts " ✅ No direct dependencies found!\n\n"
|
|
83
|
+
return
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Sort if sort_by is specified
|
|
79
87
|
versions = sort_versions(versions, :gem) if @sort_by
|
|
80
88
|
|
|
81
89
|
table = Terminal::Table.new do |t|
|
|
82
90
|
t.headings = ['Name', 'Current', 'Date', 'Latest', 'Date', 'Behind By(Time)', 'Behind By(Versions)']
|
|
83
91
|
|
|
84
92
|
versions.each do |gem|
|
|
85
|
-
#
|
|
86
|
-
gem_name = gem[:direct] ?
|
|
93
|
+
# Make direct dependencies bold
|
|
94
|
+
gem_name = gem[:direct] ? bold(gem[:gem]) : gem[:gem]
|
|
87
95
|
|
|
88
96
|
t.add_row [
|
|
89
97
|
gem_name,
|
|
@@ -134,16 +142,24 @@ module Rubion
|
|
|
134
142
|
return
|
|
135
143
|
end
|
|
136
144
|
|
|
137
|
-
#
|
|
145
|
+
# Filter to only direct dependencies if flag is set
|
|
138
146
|
versions = @result.package_versions.dup
|
|
147
|
+
versions = versions.select { |pkg| pkg[:direct] } if @exclude_dependencies
|
|
148
|
+
|
|
149
|
+
if versions.empty?
|
|
150
|
+
puts " ✅ No direct dependencies found!\n\n"
|
|
151
|
+
return
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
# Sort if sort_by is specified
|
|
139
155
|
versions = sort_versions(versions, :package) if @sort_by
|
|
140
156
|
|
|
141
157
|
table = Terminal::Table.new do |t|
|
|
142
158
|
t.headings = ['Name', 'Current', 'Date', 'Latest', 'Date', 'Behind By(Time)', 'Behind By(Versions)']
|
|
143
159
|
|
|
144
160
|
versions.each do |pkg|
|
|
145
|
-
#
|
|
146
|
-
package_name = pkg[:direct] ?
|
|
161
|
+
# Make direct dependencies bold
|
|
162
|
+
package_name = pkg[:direct] ? bold(pkg[:package]) : pkg[:package]
|
|
147
163
|
|
|
148
164
|
t.add_row [
|
|
149
165
|
package_name,
|
|
@@ -212,6 +228,11 @@ module Rubion
|
|
|
212
228
|
"#{text[0..(length - 3)]}..."
|
|
213
229
|
end
|
|
214
230
|
|
|
231
|
+
# Make text bold using ANSI escape codes
|
|
232
|
+
def bold(text)
|
|
233
|
+
"\033[1m#{text}\033[0m"
|
|
234
|
+
end
|
|
235
|
+
|
|
215
236
|
def version_difference(current, latest)
|
|
216
237
|
# Simple version difference calculation
|
|
217
238
|
current_parts = current.split('.').map(&:to_i)
|
|
@@ -254,9 +275,9 @@ module Rubion
|
|
|
254
275
|
sorted = versions.sort_by do |item|
|
|
255
276
|
case normalized_column
|
|
256
277
|
when 'name'
|
|
257
|
-
# Remove
|
|
278
|
+
# Remove ANSI codes for sorting
|
|
258
279
|
name = item[name_key_sym].to_s
|
|
259
|
-
name = name.
|
|
280
|
+
name = name.gsub(/\033\[[0-9;]*m/, '') # Remove ANSI escape codes
|
|
260
281
|
name.downcase
|
|
261
282
|
when 'current'
|
|
262
283
|
parse_version_for_sort(item[:current])
|
data/lib/rubion/scanner.rb
CHANGED
|
@@ -38,7 +38,8 @@ module Rubion
|
|
|
38
38
|
@result
|
|
39
39
|
end
|
|
40
40
|
|
|
41
|
-
def scan_incremental(options = { gems: true, packages: true, sort_by: 'Behind By(Time)', sort_desc: true
|
|
41
|
+
def scan_incremental(options = { gems: true, packages: true, sort_by: 'Behind By(Time)', sort_desc: true,
|
|
42
|
+
exclude_dependencies: false })
|
|
42
43
|
puts "🔍 Scanning project at: #{@project_path}\n\n"
|
|
43
44
|
|
|
44
45
|
# Scan and display Ruby gems first (if enabled)
|
|
@@ -47,7 +48,8 @@ module Rubion
|
|
|
47
48
|
|
|
48
49
|
# Print gem results immediately
|
|
49
50
|
puts "\n"
|
|
50
|
-
reporter = Reporter.new(@result, sort_by: options[:sort_by], sort_desc: options[:sort_desc]
|
|
51
|
+
reporter = Reporter.new(@result, sort_by: options[:sort_by], sort_desc: options[:sort_desc],
|
|
52
|
+
exclude_dependencies: options[:exclude_dependencies])
|
|
51
53
|
reporter.print_gem_vulnerabilities
|
|
52
54
|
reporter.print_gem_versions
|
|
53
55
|
end
|
data/lib/rubion/version.rb
CHANGED
data/lib/rubion.rb
CHANGED
|
@@ -29,7 +29,7 @@ module Rubion
|
|
|
29
29
|
|
|
30
30
|
def self.parse_scan_options(args)
|
|
31
31
|
# Default to sorting by "Behind By(Time)" in descending order
|
|
32
|
-
options = { gems: true, packages: true, sort_by: "Behind By(Time)", sort_desc: true }
|
|
32
|
+
options = { gems: true, packages: true, sort_by: "Behind By(Time)", sort_desc: true, exclude_dependencies: false }
|
|
33
33
|
|
|
34
34
|
# Check for --gems-only or --packages-only flags
|
|
35
35
|
if args.include?('--gems-only') || args.include?('-g')
|
|
@@ -53,10 +53,13 @@ module Rubion
|
|
|
53
53
|
# Parse --asc or --ascending for ascending order (descending is default)
|
|
54
54
|
options[:sort_desc] = false if args.include?('--asc') || args.include?('--ascending')
|
|
55
55
|
|
|
56
|
+
# Parse --exclude-dependencies flag
|
|
57
|
+
options[:exclude_dependencies] = true if args.include?('--exclude-dependencies')
|
|
58
|
+
|
|
56
59
|
options
|
|
57
60
|
end
|
|
58
61
|
|
|
59
|
-
def self.scan(options = { gems: true, packages: true, sort_by: "Behind By(Time)", sort_desc: true })
|
|
62
|
+
def self.scan(options = { gems: true, packages: true, sort_by: "Behind By(Time)", sort_desc: true, exclude_dependencies: false })
|
|
60
63
|
project_path = Dir.pwd
|
|
61
64
|
|
|
62
65
|
scanner = Scanner.new(project_path: project_path)
|
|
@@ -68,7 +71,7 @@ module Rubion
|
|
|
68
71
|
# Actually, scan_incremental handles gem printing, but package printing
|
|
69
72
|
# happens here, so we need a reporter for packages
|
|
70
73
|
if options[:packages]
|
|
71
|
-
reporter = Reporter.new(result, sort_by: options[:sort_by], sort_desc: options[:sort_desc])
|
|
74
|
+
reporter = Reporter.new(result, sort_by: options[:sort_by], sort_desc: options[:sort_desc], exclude_dependencies: options[:exclude_dependencies])
|
|
72
75
|
reporter.print_package_vulnerabilities
|
|
73
76
|
reporter.print_package_versions
|
|
74
77
|
end
|
|
@@ -91,6 +94,7 @@ module Rubion
|
|
|
91
94
|
--sort-by COLUMN, -s COLUMN Sort results by column (Name, Current, Date, Latest, Behind By(Time), Behind By(Versions))
|
|
92
95
|
(default: "Behind By(Time)" in descending order)
|
|
93
96
|
--asc, --ascending Sort in ascending order (use with --sort-by)
|
|
97
|
+
--exclude-dependencies Show only direct dependencies (from Gemfile/package.json)
|
|
94
98
|
|
|
95
99
|
DESCRIPTION:
|
|
96
100
|
Rubion scans your project for:
|
|
@@ -128,6 +132,9 @@ module Rubion
|
|
|
128
132
|
# Sort by name in ascending order
|
|
129
133
|
rubion scan --sort-by Name --asc
|
|
130
134
|
|
|
135
|
+
# Show only direct dependencies
|
|
136
|
+
rubion scan --exclude-dependencies
|
|
137
|
+
|
|
131
138
|
# Get help
|
|
132
139
|
rubion help
|
|
133
140
|
|