Class: Necropsy::Evidence

Inherits:
Data
  • Object
show all
Defined in:
lib/necropsy/models.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(analyzer:, kind:, weight:, details:, metadata:, evidence_id: nil, producer: nil, producer_version: nil, grade: nil, relation: nil, source: nil, assumptions: [], scope: nil) ⇒ Evidence

Returns a new instance of Evidence.

Raises:

  • (ArgumentError)


443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
# File 'lib/necropsy/models.rb', line 443

def initialize(analyzer:, kind:, weight:, details:, metadata:, evidence_id: nil, producer: nil,
               producer_version: nil, grade: nil, relation: nil, source: nil, assumptions: [], scope: nil)
  raise ArgumentError, 'evidence analyzer must not be empty' if analyzer.to_s.empty?
  raise ArgumentError, 'evidence kind must not be empty' if kind.to_s.empty?

  weight = Float(weight)
  raise ArgumentError, 'evidence weight must be finite' unless weight.finite?

  valid_details = details.is_a?(String) && details.bytesize <= EVIDENCE_MAX_DETAILS_BYTES
  raise ArgumentError, 'evidence details must be a bounded string' unless valid_details
  raise ArgumentError, 'evidence metadata must be a mapping' unless .is_a?(Hash)

  grade = grade.to_sym if grade.respond_to?(:to_sym)
  raise ArgumentError, "invalid evidence grade: #{grade.inspect}" unless grade.nil? || EVIDENCE_GRADES.include?(grade)

  evidence_id = ModelNormalization.identifier(evidence_id, 'evidence_id') unless evidence_id.nil?
  assumptions = ModelNormalization.string_list(assumptions, 'assumption')
  if grade.nil? && provenance_present?(producer, producer_version, relation, source, assumptions, scope)
    raise ArgumentError, 'evidence grade may be nil only for legacy evidence'
  end
  if grade && [producer, producer_version, relation, source, scope].any?(&:nil?)
    raise ArgumentError, 'graded evidence requires producer, producer_version, relation, source, and scope'
  end

  validate_bounded_payload!(metadata: , source: source, scope: scope)

  super
end

Instance Attribute Details

#analyzerObject (readonly)

Returns the value of attribute analyzer

Returns:

  • (Object)

    the current value of analyzer



408
409
410
# File 'lib/necropsy/models.rb', line 408

def analyzer
  @analyzer
end

#assumptionsObject (readonly)

Returns the value of attribute assumptions

Returns:

  • (Object)

    the current value of assumptions



408
409
410
# File 'lib/necropsy/models.rb', line 408

def assumptions
  @assumptions
end

#detailsObject (readonly)

Returns the value of attribute details

Returns:

  • (Object)

    the current value of details



408
409
410
# File 'lib/necropsy/models.rb', line 408

def details
  @details
end

#evidence_idObject (readonly)

Returns the value of attribute evidence_id

Returns:

  • (Object)

    the current value of evidence_id



408
409
410
# File 'lib/necropsy/models.rb', line 408

def evidence_id
  @evidence_id
end

#gradeObject (readonly)

Returns the value of attribute grade

Returns:

  • (Object)

    the current value of grade



408
409
410
# File 'lib/necropsy/models.rb', line 408

def grade
  @grade
end

#kindObject (readonly)

Returns the value of attribute kind

Returns:

  • (Object)

    the current value of kind



408
409
410
# File 'lib/necropsy/models.rb', line 408

def kind
  @kind
end

#metadataObject (readonly)

Returns the value of attribute metadata

Returns:

  • (Object)

    the current value of metadata



408
409
410
# File 'lib/necropsy/models.rb', line 408

def 
  @metadata
end

#producerObject (readonly)

Returns the value of attribute producer

Returns:

  • (Object)

    the current value of producer



408
409
410
# File 'lib/necropsy/models.rb', line 408

def producer
  @producer
end

#producer_versionObject (readonly)

Returns the value of attribute producer_version

Returns:

  • (Object)

    the current value of producer_version



408
409
410
# File 'lib/necropsy/models.rb', line 408

def producer_version
  @producer_version
end

#relationObject (readonly)

Returns the value of attribute relation

Returns:

  • (Object)

    the current value of relation



408
409
410
# File 'lib/necropsy/models.rb', line 408

def relation
  @relation
end

#scopeObject (readonly)

Returns the value of attribute scope

Returns:

  • (Object)

    the current value of scope



408
409
410
# File 'lib/necropsy/models.rb', line 408

def scope
  @scope
end

#sourceObject (readonly)

Returns the value of attribute source

Returns:

  • (Object)

    the current value of source



408
409
410
# File 'lib/necropsy/models.rb', line 408

def source
  @source
end

#weightObject (readonly)

Returns the value of attribute weight

Returns:

  • (Object)

    the current value of weight



408
409
410
# File 'lib/necropsy/models.rb', line 408

def weight
  @weight
end

Class Method Details

.data_newObject



424
# File 'lib/necropsy/models.rb', line 424

alias_method :data_new, :new

.new(*values, **attributes) ⇒ Object Also known as: []



426
427
428
# File 'lib/necropsy/models.rb', line 426

def new(*values, **attributes)
  compatible_new(*values, **attributes)
end

Instance Method Details

#to_hObject



472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
# File 'lib/necropsy/models.rb', line 472

def to_h
  {
    'analyzer' => analyzer.to_s,
    'kind' => kind.to_s,
    'weight' => weight,
    'details' => details,
    'metadata' => ,
    'evidence_id' => evidence_id,
    'producer' => producer&.to_s,
    'producer_version' => producer_version&.to_s,
    'grade' => grade&.to_s,
    'relation' => relation&.to_s,
    'source' => source.respond_to?(:to_h) ? source.to_h : source,
    'assumptions' => assumptions,
    'scope' => scope.respond_to?(:to_h) ? scope.to_h : scope
  }
end