Module: Sarif

Defined in:
lib/sarif.rb,
lib/sarif/fix.rb,
lib/sarif/log.rb,
lib/sarif/run.rb,
lib/sarif/edge.rb,
lib/sarif/node.rb,
lib/sarif/tool.rb,
lib/sarif/graph.rb,
lib/sarif/stack.rb,
lib/sarif/region.rb,
lib/sarif/result.rb,
lib/sarif/address.rb,
lib/sarif/message.rb,
lib/sarif/version.rb,
lib/sarif/artifact.rb,
lib/sarif/location.rb,
lib/sarif/code_flow.rb,
lib/sarif/exception.rb,
lib/sarif/rectangle.rb,
lib/sarif/attachment.rb,
lib/sarif/conversion.rb,
lib/sarif/invocation.rb,
lib/sarif/replacement.rb,
lib/sarif/stack_frame.rb,
lib/sarif/suppression.rb,
lib/sarif/thread_flow.rb,
lib/sarif/web_request.rb,
lib/sarif/notification.rb,
lib/sarif/property_bag.rb,
lib/sarif/web_response.rb,
lib/sarif/edge_traversal.rb,
lib/sarif/tool_component.rb,
lib/sarif/artifact_change.rb,
lib/sarif/graph_traversal.rb,
lib/sarif/artifact_content.rb,
lib/sarif/logical_location.rb,
lib/sarif/artifact_location.rb,
lib/sarif/physical_location.rb,
lib/sarif/result_provenance.rb,
lib/sarif/special_locations.rb,
lib/sarif/external_properties.rb,
lib/sarif/reporting_descriptor.rb,
lib/sarif/thread_flow_location.rb,
lib/sarif/translation_metadata.rb,
lib/sarif/location_relationship.rb,
lib/sarif/configuration_override.rb,
lib/sarif/run_automation_details.rb,
lib/sarif/reporting_configuration.rb,
lib/sarif/version_control_details.rb,
lib/sarif/tool_component_reference.rb,
lib/sarif/multiformat_message_string.rb,
lib/sarif/reporting_descriptor_reference.rb,
lib/sarif/external_property_file_reference.rb,
lib/sarif/external_property_file_references.rb,
lib/sarif/reporting_descriptor_relationship.rb

Defined Under Namespace

Classes: Address, Artifact, ArtifactChange, ArtifactContent, ArtifactLocation, Attachment, CodeFlow, ConfigurationOverride, Conversion, Edge, EdgeTraversal, Error, Exception, ExternalProperties, ExternalPropertyFileReference, ExternalPropertyFileReferences, Fix, Graph, GraphTraversal, Invocation, Location, LocationRelationship, Log, LogicalLocation, Message, MultiformatMessageString, Node, Notification, ParseError, PhysicalLocation, PropertyBag, Rectangle, Region, Replacement, ReportingConfiguration, ReportingDescriptor, ReportingDescriptorReference, ReportingDescriptorRelationship, Result, ResultProvenance, Run, RunAutomationDetails, SpecialLocations, Stack, StackFrame, Suppression, ThreadFlow, ThreadFlowLocation, Tool, ToolComponent, ToolComponentReference, TranslationMetadata, ValidationError, VersionControlDetails, WebRequest, WebResponse

Constant Summary collapse

SCHEMA_PATH =
File.expand_path("sarif/schema/sarif-schema-2.1.0.json", __dir__)
VERSION =
"0.1.1"

Class Method Summary collapse

Class Method Details

.dump(log, path_or_io, pretty: false) ⇒ Object



91
92
93
94
95
96
97
98
99
# File 'lib/sarif.rb', line 91

def self.dump(log, path_or_io, pretty: false)
  json = log.to_json(pretty: pretty)
  if path_or_io.respond_to?(:write)
    path_or_io.write(json)
  else
    File.write(path_or_io, json)
  end
  json
end

.load(path) ⇒ Object



76
77
78
79
80
# File 'lib/sarif.rb', line 76

def self.load(path)
  parse(File.read(path))
rescue Errno::ENOENT
  raise Error, "File not found: #{path}"
end

.parse(json_string) ⇒ Object



82
83
84
85
86
87
88
89
# File 'lib/sarif.rb', line 82

def self.parse(json_string)
  data = JSON.parse(json_string)
  Log.from_hash(data)
rescue JSON::ParserError => e
  raise ParseError, "Invalid JSON: #{e.message}"
rescue ArgumentError => e
  raise ParseError, "Invalid SARIF structure: #{e.message}"
end

.schemaObject



101
102
103
104
105
106
# File 'lib/sarif.rb', line 101

def self.schema
  @schema ||= begin
    require "json_schemer"
    JSONSchemer.schema(Pathname.new(SCHEMA_PATH))
  end
end

.valid?(log) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/sarif.rb', line 112

def self.valid?(log)
  validate(log).empty?
end

.validate(log) ⇒ Object



108
109
110
# File 'lib/sarif.rb', line 108

def self.validate(log)
  schema.validate(log.to_h).to_a
end

.validate!(log) ⇒ Object

Raises:



116
117
118
119
120
# File 'lib/sarif.rb', line 116

def self.validate!(log)
  errors = validate(log)
  raise ValidationError, errors unless errors.empty?
  true
end