rubion 0.3.4 → 0.3.6
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 +31 -9
- 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: b0f29bc1b7cefe4b6e3373a74d9dddcaccf3f7ba0f2a49dc2562d18794bafc81
|
|
4
|
+
data.tar.gz: 78d89a5554c4a0b46eb4cae2ea3d5a33427cfc207a9d86c7c9f95893acc9890b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: df1205450315340e9d7f9361576ebe12a609a0e73a554155dfbc142e786b5f4dbd194ef5beffc8ca97f0bf622460b99a9c0a1470010c54f0bf122ca4934e35be
|
|
7
|
+
data.tar.gz: d860c50c98a819d75a54ae1a1d4bd8ed813bfa6968d900c90f915ae88321c7f4a09df7a5a0f937653193b6fdc20d2b7ba313d2c9669a591c5271cbeca6399e42
|
data/lib/rubion/reporter.rb
CHANGED
|
@@ -4,10 +4,11 @@ require 'terminal-table'
|
|
|
4
4
|
|
|
5
5
|
module Rubion
|
|
6
6
|
class Reporter
|
|
7
|
-
def initialize(scan_result, sort_by: 'Behind By(Time)', sort_desc: true)
|
|
7
|
+
def initialize(scan_result, sort_by: 'Behind By(Time)', sort_desc: true, exclude_dependencies: false)
|
|
8
8
|
@result = scan_result
|
|
9
9
|
@sort_by = sort_by
|
|
10
10
|
@sort_desc = sort_desc
|
|
11
|
+
@exclude_dependencies = exclude_dependencies
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def report
|
|
@@ -74,16 +75,24 @@ module Rubion
|
|
|
74
75
|
return
|
|
75
76
|
end
|
|
76
77
|
|
|
77
|
-
#
|
|
78
|
+
# Filter to only direct dependencies if flag is set
|
|
78
79
|
versions = @result.gem_versions.dup
|
|
80
|
+
versions = versions.select { |gem| gem[:direct] } if @exclude_dependencies
|
|
81
|
+
|
|
82
|
+
if versions.empty?
|
|
83
|
+
puts " ✅ No direct dependencies found!\n\n"
|
|
84
|
+
return
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Sort if sort_by is specified
|
|
79
88
|
versions = sort_versions(versions, :gem) if @sort_by
|
|
80
89
|
|
|
81
90
|
table = Terminal::Table.new do |t|
|
|
82
91
|
t.headings = ['Name', 'Current', 'Date', 'Latest', 'Date', 'Behind By(Time)', 'Behind By(Versions)']
|
|
83
92
|
|
|
84
93
|
versions.each do |gem|
|
|
85
|
-
#
|
|
86
|
-
gem_name = gem[:direct] ?
|
|
94
|
+
# Make direct dependencies bold
|
|
95
|
+
gem_name = gem[:direct] ? bold(gem[:gem]) : gem[:gem]
|
|
87
96
|
|
|
88
97
|
t.add_row [
|
|
89
98
|
gem_name,
|
|
@@ -134,16 +143,24 @@ module Rubion
|
|
|
134
143
|
return
|
|
135
144
|
end
|
|
136
145
|
|
|
137
|
-
#
|
|
146
|
+
# Filter to only direct dependencies if flag is set
|
|
138
147
|
versions = @result.package_versions.dup
|
|
148
|
+
versions = versions.select { |pkg| pkg[:direct] } if @exclude_dependencies
|
|
149
|
+
|
|
150
|
+
if versions.empty?
|
|
151
|
+
puts " ✅ No direct dependencies found!\n\n"
|
|
152
|
+
return
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
# Sort if sort_by is specified
|
|
139
156
|
versions = sort_versions(versions, :package) if @sort_by
|
|
140
157
|
|
|
141
158
|
table = Terminal::Table.new do |t|
|
|
142
159
|
t.headings = ['Name', 'Current', 'Date', 'Latest', 'Date', 'Behind By(Time)', 'Behind By(Versions)']
|
|
143
160
|
|
|
144
161
|
versions.each do |pkg|
|
|
145
|
-
#
|
|
146
|
-
package_name = pkg[:direct] ?
|
|
162
|
+
# Make direct dependencies bold
|
|
163
|
+
package_name = pkg[:direct] ? bold(pkg[:package]) : pkg[:package]
|
|
147
164
|
|
|
148
165
|
t.add_row [
|
|
149
166
|
package_name,
|
|
@@ -212,6 +229,11 @@ module Rubion
|
|
|
212
229
|
"#{text[0..(length - 3)]}..."
|
|
213
230
|
end
|
|
214
231
|
|
|
232
|
+
# Make text bold using ANSI escape codes
|
|
233
|
+
def bold(text)
|
|
234
|
+
"\033[1m#{text}\033[0m"
|
|
235
|
+
end
|
|
236
|
+
|
|
215
237
|
def version_difference(current, latest)
|
|
216
238
|
# Simple version difference calculation
|
|
217
239
|
current_parts = current.split('.').map(&:to_i)
|
|
@@ -254,9 +276,9 @@ module Rubion
|
|
|
254
276
|
sorted = versions.sort_by do |item|
|
|
255
277
|
case normalized_column
|
|
256
278
|
when 'name'
|
|
257
|
-
# Remove
|
|
279
|
+
# Remove ANSI codes for sorting
|
|
258
280
|
name = item[name_key_sym].to_s
|
|
259
|
-
name = name.
|
|
281
|
+
name = name.gsub(/\033\[[0-9;]*m/, '') # Remove ANSI escape codes
|
|
260
282
|
name.downcase
|
|
261
283
|
when 'current'
|
|
262
284
|
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
|
|