Class: Vkit::CLI::Commands::ScanCommand

Inherits:
BaseCommand show all
Defined in:
lib/vkit/cli/commands/scan_command.rb

Instance Method Summary collapse

Instance Method Details

#call(datasource_name, mode: "diff_only") ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/vkit/cli/commands/scan_command.rb', line 9

def call(datasource_name, mode: "diff_only")
  with_auth do
    user = credential_store.user
    org  = user["organization_slug"]

    puts "๐Ÿ” Scanning #{datasource_name}..."
    puts

    response = authenticated_client.post(
      "/api/v1/orgs/#{org}/datasources/#{datasource_name}/scan",
      body: { datasource: datasource_name, mode: mode }
    )

    diff     = response["diff"] || {}
    datasets = diff["datasets"] || []
    changed  = datasets.select { |d| d["changes"].values.any?(&:any?) }
    clean    = datasets.reject { |d| d["changes"].values.any?(&:any?) }

    if changed.empty?
      datasets.each { |d| puts "  #{d["name"].ljust(24)} โœ“" }
      puts
      puts "  No changes detected"
    else
      changed.each do |dataset|
        added    = dataset.dig("changes", "added_fields")   || []
        removed  = dataset.dig("changes", "removed_fields") || []
        modified = dataset.dig("changes", "changed_fields") || []

        puts "  #{dataset["name"]}"

        added.each do |f|
          name = f.is_a?(Hash) ? f["name"] : f
          type = f.is_a?(Hash) && f["type"] ? " (#{f["type"]})" : ""
          puts "    + #{name}#{type}  โš ๏ธ  unclassified"
        end

        removed.each do |f|
          name = f.is_a?(Hash) ? f["name"] : f
          puts "    - #{name}"
        end

        modified.each do |f|
          name = f.is_a?(Hash) ? f["name"] : f
          puts "    ~ #{name}"
        end

        puts
      end

      clean.each { |d| puts "  #{d["name"].ljust(24)} โœ“" }

      puts
      puts "  #{changed.size} changed ยท run with --apply to update baseline"
    end

    puts
    puts "  โœ… Applied" if response["applied"]
  end
end