Class: ActiveStash::Assess

Inherits:
Object
  • Object
show all
Defined in:
lib/active_stash/assess.rb,
lib/active_stash/assess/column_name_rules.rb

Overview

Class for generating, writing, and reading Assess reports.

Currently only supports Rails applications.

Defined Under Namespace

Classes: ColumnNameRules

Constant Summary collapse

REPORT_FILE_NAME =
"active_stash_assessment.yml"
DOCS_BASE_URL =
"https://docs.cipherstash.com/assess/checks"

Instance Method Summary collapse

Constructor Details

#initialize(quiet: false, models: default_models, report_dir: Rails.root) ⇒ Assess

Returns a new instance of Assess.



14
15
16
17
18
# File 'lib/active_stash/assess.rb', line 14

def initialize(quiet: false, models: default_models, report_dir: Rails.root)
  @assessment_path = report_dir.join(REPORT_FILE_NAME)
  @models = models
  @quiet = quiet
end

Instance Method Details

#default_modelsObject



20
21
22
23
24
25
26
# File 'lib/active_stash/assess.rb', line 20

def default_models
  if defined?(ApplicationRecord)
    ApplicationRecord.descendants
  else
    []
  end
end

#read_reportHash

Read the report from active_stash_assessment.yml.

Returns:

  • (Hash)

    the report results.

Raises:



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/active_stash/assess.rb', line 45

def read_report
  begin
    YAML.load(@assessment_path.read)
  rescue Errno::ENOENT
    raise AssessmentNotFound, <<~STR
      Assessment not found at #{@assessment_path}.

      This probably means that the assessment hasn't been generated.

      Try running `rake active_stash:assess` first.
    STR
  end
end

#report_exists?Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/active_stash/assess.rb', line 59

def report_exists?
  File.exist?(@assessment_path)
end

#runObject

Run an assessment and generate a report. Results are printed to stdout and written to active_stash_assessment.yml.



29
30
31
32
33
34
35
36
37
38
# File 'lib/active_stash/assess.rb', line 29

def run
  assessment = @models.map { |model| [model.name, suspected_personal_data(model)] }

  write_report(assessment, @assessment_path)

  unless @quiet
    print_results(assessment)
    puts "Assessment written to: #{@assessment_path}"
  end
end