sbom-cyclonedx 0.1.0 → 0.2.0
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/.gitignore +15 -0
- data/.gitlab-ci.yml +49 -0
- data/.rspec +3 -0
- data/.rubocop.yml +72 -0
- data/.vscode/settings.json +6 -0
- data/CHANGELOG.md +9 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +179 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +36 -0
- data/Steepfile +14 -0
- data/bin/console +11 -0
- data/bin/rbs_spec +9 -0
- data/bin/setup +8 -0
- data/bom-1.6.schema.json +7334 -0
- data/lib/email_address_extension.rb +26 -0
- data/lib/sbom/cyclone_dx/enum.rb +2178 -0
- data/lib/sbom/cyclone_dx/field.rb +404 -0
- data/lib/sbom/cyclone_dx/pattern.rb +43 -0
- data/lib/sbom/cyclone_dx/record/advisory.rb +17 -0
- data/lib/sbom/cyclone_dx/record/annotation.rb +46 -0
- data/lib/sbom/cyclone_dx/record/attachment.rb +21 -0
- data/lib/sbom/cyclone_dx/record/base.rb +244 -0
- data/lib/sbom/cyclone_dx/record/cipher_suite.rb +23 -0
- data/lib/sbom/cyclone_dx/record/co2_measure.rb +18 -0
- data/lib/sbom/cyclone_dx/record/command.rb +18 -0
- data/lib/sbom/cyclone_dx/record/commit.rb +25 -0
- data/lib/sbom/cyclone_dx/record/component.rb +126 -0
- data/lib/sbom/cyclone_dx/record/component_data.rb +46 -0
- data/lib/sbom/cyclone_dx/record/component_evidence.rb +68 -0
- data/lib/sbom/cyclone_dx/record/component_identity_evidence.rb +36 -0
- data/lib/sbom/cyclone_dx/record/composition.rb +33 -0
- data/lib/sbom/cyclone_dx/record/condition.rb +20 -0
- data/lib/sbom/cyclone_dx/record/copyright.rb +16 -0
- data/lib/sbom/cyclone_dx/record/crypto_properties.rb +137 -0
- data/lib/sbom/cyclone_dx/record/data_governance.rb +21 -0
- data/lib/sbom/cyclone_dx/record/data_governance_responsible_party.rb +22 -0
- data/lib/sbom/cyclone_dx/record/declarations.rb +193 -0
- data/lib/sbom/cyclone_dx/record/definitions.rb +17 -0
- data/lib/sbom/cyclone_dx/record/dependency.rb +21 -0
- data/lib/sbom/cyclone_dx/record/diff.rb +18 -0
- data/lib/sbom/cyclone_dx/record/energy_consumption.rb +31 -0
- data/lib/sbom/cyclone_dx/record/energy_measure.rb +18 -0
- data/lib/sbom/cyclone_dx/record/energy_provider.rb +31 -0
- data/lib/sbom/cyclone_dx/record/environmental_consideration.rb +20 -0
- data/lib/sbom/cyclone_dx/record/event.rb +31 -0
- data/lib/sbom/cyclone_dx/record/external_reference.rb +25 -0
- data/lib/sbom/cyclone_dx/record/fairness_assessment.rb +22 -0
- data/lib/sbom/cyclone_dx/record/formula.rb +29 -0
- data/lib/sbom/cyclone_dx/record/graphic.rb +19 -0
- data/lib/sbom/cyclone_dx/record/graphics_collection.rb +19 -0
- data/lib/sbom/cyclone_dx/record/hash_data.rb +18 -0
- data/lib/sbom/cyclone_dx/record/identifiable_action.rb +21 -0
- data/lib/sbom/cyclone_dx/record/input.rb +34 -0
- data/lib/sbom/cyclone_dx/record/input_output_ml_parameter.rb +17 -0
- data/lib/sbom/cyclone_dx/record/issue.rb +36 -0
- data/lib/sbom/cyclone_dx/record/license.rb +90 -0
- data/lib/sbom/cyclone_dx/record/license_choice.rb +35 -0
- data/lib/sbom/cyclone_dx/record/metadata.rb +55 -0
- data/lib/sbom/cyclone_dx/record/model_card.rb +89 -0
- data/lib/sbom/cyclone_dx/record/note.rb +20 -0
- data/lib/sbom/cyclone_dx/record/organizational_contact.rb +26 -0
- data/lib/sbom/cyclone_dx/record/organizational_entity.rb +28 -0
- data/lib/sbom/cyclone_dx/record/output.rb +34 -0
- data/lib/sbom/cyclone_dx/record/parameter.rb +20 -0
- data/lib/sbom/cyclone_dx/record/patch.rb +23 -0
- data/lib/sbom/cyclone_dx/record/performance_metric.rb +30 -0
- data/lib/sbom/cyclone_dx/record/postal_address.rb +34 -0
- data/lib/sbom/cyclone_dx/record/property.rb +18 -0
- data/lib/sbom/cyclone_dx/record/rating.rb +27 -0
- data/lib/sbom/cyclone_dx/record/release_notes.rb +44 -0
- data/lib/sbom/cyclone_dx/record/resource_reference_choice.rb +22 -0
- data/lib/sbom/cyclone_dx/record/risk.rb +18 -0
- data/lib/sbom/cyclone_dx/record/root.rb +63 -0
- data/lib/sbom/cyclone_dx/record/secured_by.rb +20 -0
- data/lib/sbom/cyclone_dx/record/service.rb +54 -0
- data/lib/sbom/cyclone_dx/record/service_data.rb +32 -0
- data/lib/sbom/cyclone_dx/record/signature.rb +85 -0
- data/lib/sbom/cyclone_dx/record/standard.rb +72 -0
- data/lib/sbom/cyclone_dx/record/step.rb +24 -0
- data/lib/sbom/cyclone_dx/record/swid.rb +29 -0
- data/lib/sbom/cyclone_dx/record/task.rb +56 -0
- data/lib/sbom/cyclone_dx/record/tools.rb +20 -0
- data/lib/sbom/cyclone_dx/record/trigger.rb +48 -0
- data/lib/sbom/cyclone_dx/record/version.rb +24 -0
- data/lib/sbom/cyclone_dx/record/volume.rb +33 -0
- data/lib/sbom/cyclone_dx/record/vulnerability.rb +119 -0
- data/lib/sbom/cyclone_dx/record/vulnerability_source.rb +20 -0
- data/lib/sbom/cyclone_dx/record/workflow.rb +59 -0
- data/lib/sbom/cyclone_dx/record/workspace.rb +45 -0
- data/lib/sbom/cyclone_dx/record.rb +12 -0
- data/lib/sbom/cyclone_dx/validator/array_validator.rb +66 -0
- data/lib/sbom/cyclone_dx/validator/base_validator.rb +43 -0
- data/lib/sbom/cyclone_dx/validator/boolean_validator.rb +16 -0
- data/lib/sbom/cyclone_dx/validator/date_time_validator.rb +29 -0
- data/lib/sbom/cyclone_dx/validator/email_address_validator.rb +31 -0
- data/lib/sbom/cyclone_dx/validator/float_validator.rb +30 -0
- data/lib/sbom/cyclone_dx/validator/integer_validator.rb +30 -0
- data/lib/sbom/cyclone_dx/validator/record_validator.rb +26 -0
- data/lib/sbom/cyclone_dx/validator/string_validator.rb +33 -0
- data/lib/sbom/cyclone_dx/validator/union_validator.rb +39 -0
- data/lib/sbom/cyclone_dx/validator/uri_validator.rb +32 -0
- data/lib/sbom/cyclone_dx/validator.rb +32 -0
- data/lib/sbom/cyclone_dx/version.rb +7 -0
- data/lib/sbom/cyclone_dx.rb +39 -0
- data/rbs_collection.lock.yaml +288 -0
- data/rbs_collection.yaml +31 -0
- data/sbom-cyclone_dx.gemspec +32 -0
- data/sig/email_address_extension.rbs +14 -0
- data/sig/sbom/cyclone_dx/enum.rbs +93 -0
- data/sig/sbom/cyclone_dx/field.rbs +434 -0
- data/sig/sbom/cyclone_dx/pattern.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/advisory.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/annotation.rbs +63 -0
- data/sig/sbom/cyclone_dx/record/attachment.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/base.rbs +62 -0
- data/sig/sbom/cyclone_dx/record/cipher_suite.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/co2_measure.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/command.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/commit.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/component.rbs +203 -0
- data/sig/sbom/cyclone_dx/record/component_data.rbs +73 -0
- data/sig/sbom/cyclone_dx/record/component_evidence.rbs +115 -0
- data/sig/sbom/cyclone_dx/record/component_identity_evidence.rbs +53 -0
- data/sig/sbom/cyclone_dx/record/composition.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/condition.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/copyright.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/crypto_properties.rbs +268 -0
- data/sig/sbom/cyclone_dx/record/data_governance.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/data_governance_responsible_party.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/declarations.rbs +352 -0
- data/sig/sbom/cyclone_dx/record/definitions.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/dependency.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/diff.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/energy_consumption.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/energy_measure.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/energy_provider.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/environmental_consideration.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/event.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/external_reference.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/fairness_assessment.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/formula.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/graphic.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/graphics_collection.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/hash_data.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/identifiable_action.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/input.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/input_output_ml_parameter.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/issue.rbs +53 -0
- data/sig/sbom/cyclone_dx/record/license.rbs +134 -0
- data/sig/sbom/cyclone_dx/record/license_choice.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/metadata.rbs +82 -0
- data/sig/sbom/cyclone_dx/record/model_card.rbs +143 -0
- data/sig/sbom/cyclone_dx/record/note.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/organizational_contact.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/organizational_entity.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/output.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/parameter.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/patch.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/performance_metric.rbs +43 -0
- data/sig/sbom/cyclone_dx/record/postal_address.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/property.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/rating.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/release_notes.rbs +64 -0
- data/sig/sbom/cyclone_dx/record/resource_reference_choice.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/risk.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/root.rbs +84 -0
- data/sig/sbom/cyclone_dx/record/secured_by.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/service.rbs +99 -0
- data/sig/sbom/cyclone_dx/record/service_data.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/signature.rbs +130 -0
- data/sig/sbom/cyclone_dx/record/standard.rbs +132 -0
- data/sig/sbom/cyclone_dx/record/step.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/swid.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/task.rbs +84 -0
- data/sig/sbom/cyclone_dx/record/tools.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/trigger.rbs +69 -0
- data/sig/sbom/cyclone_dx/record/version.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/volume.rbs +49 -0
- data/sig/sbom/cyclone_dx/record/vulnerability.rbs +209 -0
- data/sig/sbom/cyclone_dx/record/vulnerability_source.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/workflow.rbs +94 -0
- data/sig/sbom/cyclone_dx/record/workspace.rbs +69 -0
- data/sig/sbom/cyclone_dx/record.rbs +161 -0
- data/sig/sbom/cyclone_dx/type.rbs +16 -0
- data/sig/sbom/cyclone_dx/validator/array_validator.rbs +31 -0
- data/sig/sbom/cyclone_dx/validator/base_validator.rbs +21 -0
- data/sig/sbom/cyclone_dx/validator/boolean_validator.rbs +9 -0
- data/sig/sbom/cyclone_dx/validator/date_time_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator/email_address_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator/float_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/integer_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/record_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/string_validator.rbs +14 -0
- data/sig/sbom/cyclone_dx/validator/union_validator.rbs +24 -0
- data/sig/sbom/cyclone_dx/validator/uri_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator.rbs +66 -0
- data/sig/sbom/cyclone_dx.rbs +13 -0
- data/sig/types.rbs +45 -0
- data/spec/email_address_extension_spec.rb +27 -0
- data/spec/factories/factory_helper.rb +78 -0
- data/spec/factories/record/advisory_factory.rb +11 -0
- data/spec/factories/record/annotation_factory.rb +63 -0
- data/spec/factories/record/attachment_factory.rb +9 -0
- data/spec/factories/record/cipher_suite_factory.rb +26 -0
- data/spec/factories/record/co2_measure_factory.rb +9 -0
- data/spec/factories/record/command_factory.rb +10 -0
- data/spec/factories/record/commit_factory.rb +13 -0
- data/spec/factories/record/component_data_factory.rb +28 -0
- data/spec/factories/record/component_evidence_factory.rb +44 -0
- data/spec/factories/record/component_factory.rb +102 -0
- data/spec/factories/record/component_identity_evidence_factory.rb +25 -0
- data/spec/factories/record/composition_factory.rb +20 -0
- data/spec/factories/record/condition_factory.rb +11 -0
- data/spec/factories/record/copyright_factory.rb +9 -0
- data/spec/factories/record/crypto_properties_factory.rb +191 -0
- data/spec/factories/record/data_governance_factory.rb +11 -0
- data/spec/factories/record/data_governance_responsible_party_factory.rb +31 -0
- data/spec/factories/record/declarations_factory.rb +145 -0
- data/spec/factories/record/definitions_factory.rb +9 -0
- data/spec/factories/record/dependency_factory.rb +12 -0
- data/spec/factories/record/diff_factory.rb +24 -0
- data/spec/factories/record/energy_consumption_factory.rb +15 -0
- data/spec/factories/record/energy_measure_factory.rb +9 -0
- data/spec/factories/record/energy_provider_factory.rb +15 -0
- data/spec/factories/record/environmental_consideration_factory.rb +10 -0
- data/spec/factories/record/event_factory.rb +15 -0
- data/spec/factories/record/external_reference_factory.rb +13 -0
- data/spec/factories/record/fairness_assessment_factory.rb +12 -0
- data/spec/factories/record/formula_factory.rb +13 -0
- data/spec/factories/record/graphic_factory.rb +10 -0
- data/spec/factories/record/graphics_collection_factory.rb +10 -0
- data/spec/factories/record/hash_data_factory.rb +10 -0
- data/spec/factories/record/identifiable_action_factory.rb +11 -0
- data/spec/factories/record/input_factory.rb +36 -0
- data/spec/factories/record/input_output_ml_parameter_factory.rb +9 -0
- data/spec/factories/record/issue_factory.rb +22 -0
- data/spec/factories/record/license_choice_factory.rb +23 -0
- data/spec/factories/record/license_factory.rb +99 -0
- data/spec/factories/record/metadata_factory.rb +38 -0
- data/spec/factories/record/model_card_factory.rb +59 -0
- data/spec/factories/record/note_factory.rb +11 -0
- data/spec/factories/record/organizational_contact_factory.rb +12 -0
- data/spec/factories/record/organizational_entity_factory.rb +13 -0
- data/spec/factories/record/output_factory.rb +32 -0
- data/spec/factories/record/parameter_factory.rb +11 -0
- data/spec/factories/record/patch_factory.rb +12 -0
- data/spec/factories/record/performance_metric_factory.rb +20 -0
- data/spec/factories/record/postal_address_factory.rb +14 -0
- data/spec/factories/record/property_factory.rb +11 -0
- data/spec/factories/record/rating_factory.rb +14 -0
- data/spec/factories/record/release_notes_factory.rb +20 -0
- data/spec/factories/record/resource_reference_choice_factory.rb +27 -0
- data/spec/factories/record/risk_factory.rb +10 -0
- data/spec/factories/record/root_factory.rb +23 -0
- data/spec/factories/record/secured_by_factory.rb +10 -0
- data/spec/factories/record/service_data_factory.rb +16 -0
- data/spec/factories/record/service_factory.rb +27 -0
- data/spec/factories/record/signature_factory.rb +50 -0
- data/spec/factories/record/standard_factory.rb +37 -0
- data/spec/factories/record/step_factory.rb +12 -0
- data/spec/factories/record/swid_factory.rb +16 -0
- data/spec/factories/record/task_factory.rb +24 -0
- data/spec/factories/record/tools_factory.rb +10 -0
- data/spec/factories/record/trigger_factory.rb +21 -0
- data/spec/factories/record/version_factory.rb +19 -0
- data/spec/factories/record/volume_factory.rb +16 -0
- data/spec/factories/record/vulnerability_factory.rb +70 -0
- data/spec/factories/record/vulnerability_source_factory.rb +10 -0
- data/spec/factories/record/workflow_factory.rb +26 -0
- data/spec/factories/record/workspace_factory.rb +21 -0
- data/spec/factories/record_factory.rb +159 -0
- data/spec/fixtures/cipher_info.yml +948 -0
- data/spec/fixtures/purl_data.yml +0 -0
- data/spec/sbom/cyclone_dx/enum_spec.rb +30 -0
- data/spec/sbom/cyclone_dx/field_spec.rb +104 -0
- data/spec/sbom/cyclone_dx/pattern_spec.rb +18 -0
- data/spec/sbom/cyclone_dx/record/advisory_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/annotation_spec.rb +31 -0
- data/spec/sbom/cyclone_dx/record/attachment_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/base_spec.rb +363 -0
- data/spec/sbom/cyclone_dx/record/cipher_suite_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/co2_measure_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/command_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/commit_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_evidence_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_identity_evidence_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/composition_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/condition_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/copyright_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/crypto_properties_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/data_governance_responsible_party_spec.rb +19 -0
- data/spec/sbom/cyclone_dx/record/data_governance_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/declarations_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/definitions_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/dependency_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/diff_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_consumption_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_measure_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_provider_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/environmental_consideration_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/event_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/external_reference_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/fairness_assessment_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/formula_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/graphic_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/graphics_collection_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/hash_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/identifiable_action_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/input_output_ml_parameter_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/input_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/issue_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/license_choice_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/record/license_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/metadata_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/model_card_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/note_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/organizational_contact_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/organizational_entity_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/output_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/parameter_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/patch_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/performance_metric_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/postal_address_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/property_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/rating_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/release_notes_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/resource_reference_choice_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/risk_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/root_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/secured_by_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/service_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/service_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/signature_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/record/standard_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/step_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/swid_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/task_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/tools_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/trigger_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/version_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/volume_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/vulnerability_source_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/vulnerability_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/workflow_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/workspace_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record_spec.rb +7 -0
- data/spec/sbom/cyclone_dx/validator/array_validator_spec.rb +184 -0
- data/spec/sbom/cyclone_dx/validator/base_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/boolean_validator_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/validator/date_time_validator_spec.rb +28 -0
- data/spec/sbom/cyclone_dx/validator/email_address_validator_spec.rb +23 -0
- data/spec/sbom/cyclone_dx/validator/float_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/integer_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/record_validator_spec.rb +35 -0
- data/spec/sbom/cyclone_dx/validator/string_validator_spec.rb +94 -0
- data/spec/sbom/cyclone_dx/validator/union_validator_spec.rb +65 -0
- data/spec/sbom/cyclone_dx/validator/uri_validator_spec.rb +21 -0
- data/spec/sbom/cyclone_dx/validator_spec.rb +38 -0
- data/spec/sbom/cyclone_dx/version_spec.rb +9 -0
- data/spec/sbom/cyclone_dx_spec.rb +7 -0
- data/spec/spec_helper.rb +39 -0
- metadata +377 -6
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :external_reference, parent: :record, class: "SBOM::CycloneDX::Record::ExternalReference" do
|
5
|
+
url { generate(:url) }
|
6
|
+
type { SBOM::CycloneDX::Enum::EXTERNAL_REFERENCE_TYPE.sample }
|
7
|
+
|
8
|
+
trait :all_fields do
|
9
|
+
comment { Faker::Lorem.sentence }
|
10
|
+
hashes { association_list(:hash_data) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :fairness_assessment, parent: :record, class: "SBOM::CycloneDX::Record::FairnessAssessment" do
|
5
|
+
trait :all_fields do
|
6
|
+
group_at_risk { Faker::Lorem.word }
|
7
|
+
benefits { Faker::Lorem.words(number: rand(0..4)).join(", ") }
|
8
|
+
harms { Faker::Lorem.words(number: rand(0..4)).join(", ") }
|
9
|
+
mitigation_strategy { Faker::Lorem.sentence }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :formula, parent: :record, class: "SBOM::CycloneDX::Record::Formula" do
|
5
|
+
trait :all_fields do
|
6
|
+
bom_ref { generate(:ref_link) }
|
7
|
+
components { association_list(:component) }
|
8
|
+
services { association_list(:service) }
|
9
|
+
workflows { association_list(:workflow) }
|
10
|
+
properties { association_list(:property) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :graphics_collection, parent: :record, class: "SBOM::CycloneDX::Record::GraphicsCollection" do
|
5
|
+
trait :all_fields do
|
6
|
+
description { Faker::Lorem.sentence }
|
7
|
+
collection { association_list(:graphic) }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :identifiable_action, parent: :record, class: "SBOM::CycloneDX::Record::IdentifiableAction" do
|
5
|
+
trait :all_fields do
|
6
|
+
timestamp { Faker::Time.backward(days: 367) }
|
7
|
+
name { Faker::Lorem.word }
|
8
|
+
email { generate(:email) }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :input, parent: :record, class: "SBOM::CycloneDX::Record::Input" do
|
5
|
+
transient do
|
6
|
+
input_type { %i[resource parameters environment_vars data].sample }
|
7
|
+
end
|
8
|
+
|
9
|
+
trait :resource do
|
10
|
+
input_type { :resource }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :parameters do
|
14
|
+
input_type { :parameters }
|
15
|
+
end
|
16
|
+
|
17
|
+
trait :environment_vars do
|
18
|
+
input_type { :environment_vars }
|
19
|
+
end
|
20
|
+
|
21
|
+
trait :data do
|
22
|
+
input_type { :data }
|
23
|
+
end
|
24
|
+
|
25
|
+
resource { input_type == :resource ? association(:resource_reference_choice) : nil }
|
26
|
+
parameters { input_type == :parameters ? association_list(:parameter) : nil }
|
27
|
+
environment_vars { input_type == :environment_vars ? association_list(:property) : nil }
|
28
|
+
data { input_type == :data ? association(:attachment) : nil }
|
29
|
+
|
30
|
+
trait :all_fields do
|
31
|
+
source { association(:resource_reference_choice) }
|
32
|
+
target { association(:resource_reference_choice) }
|
33
|
+
properties { association_list(:property) }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :issue, parent: :record, class: "SBOM::CycloneDX::Record::Issue" do
|
5
|
+
type { SBOM::CycloneDX::Enum::ISSUE_TYPE.sample }
|
6
|
+
|
7
|
+
trait :all_fields do
|
8
|
+
id { SecureRandom.uuid }
|
9
|
+
name { Faker::Lorem.word }
|
10
|
+
description { Faker::Lorem.sentence }
|
11
|
+
source { association(:source) }
|
12
|
+
references { Array.new(rand(1..3)) { generate(:url) } }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
factory :source, parent: :record, class: "SBOM::CycloneDX::Record::Issue::Source" do
|
17
|
+
trait :all_fields do
|
18
|
+
name { Faker::Lorem.word }
|
19
|
+
url { generate(:url) }
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :license_expression, parent: :record, class: "SBOM::CycloneDX::Record::LicenseChoice::LicenseExpression" do
|
5
|
+
expression do
|
6
|
+
first_license = SBOM::CycloneDX::Enum::LICENSE_ID.sample
|
7
|
+
next first_license if Faker::Boolean.boolean
|
8
|
+
|
9
|
+
"#{first_license} #{%w[WITH AND OR].sample} #{SBOM::CycloneDX::Enum::LICENSE_ID.sample}"
|
10
|
+
end
|
11
|
+
|
12
|
+
trait :all_fields do
|
13
|
+
acknowledgement { SBOM::CycloneDX::Enum::LICENSE_ACKNOWLEDGEMENT.sample }
|
14
|
+
bom_ref { generate(:ref_link) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
factory :wrapped_license, parent: :record, class: "SBOM::CycloneDX::Record::LicenseChoice::WrappedLicense" do
|
19
|
+
license
|
20
|
+
|
21
|
+
trait :all_fields
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :license, parent: :record, class: "SBOM::CycloneDX::Record::License" do
|
5
|
+
transient do
|
6
|
+
license_specifier { %i[id name].sample }
|
7
|
+
end
|
8
|
+
|
9
|
+
trait :id do
|
10
|
+
license_specifier { :id }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :name do
|
14
|
+
license_specifier { :name }
|
15
|
+
end
|
16
|
+
|
17
|
+
id { license_specifier == :id ? SBOM::CycloneDX::Enum::LICENSE_ID.sample : nil }
|
18
|
+
name { license_specifier == :name ? Faker::Lorem.word : nil }
|
19
|
+
|
20
|
+
trait :all_fields do
|
21
|
+
bom_ref { generate(:ref_link) }
|
22
|
+
acknowledgement { SBOM::CycloneDX::Enum::LICENSE_ACKNOWLEDGEMENT.sample }
|
23
|
+
text { association(:attachment) }
|
24
|
+
url { generate(:url) }
|
25
|
+
licensing { association(:licensing) }
|
26
|
+
properties { association_list(:property) }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
factory :licensing, parent: :record, class: "SBOM::CycloneDX::Record::License::Licensing" do
|
31
|
+
trait :all_fields do
|
32
|
+
alt_ids { Array.new(rand(1..3)) { Faker::Lorem.word } }
|
33
|
+
licensor { association(:licensor) }
|
34
|
+
licensee { association(:licensee) }
|
35
|
+
purchaser { association(:purchaser) }
|
36
|
+
purchase_order { Faker::Lorem.word }
|
37
|
+
license_types { Array.new(rand(1..3)) { SBOM::CycloneDX::Enum::LICENSE_TYPE.sample } }
|
38
|
+
last_renewal { Faker::Time.backward(days: 367) }
|
39
|
+
expiration { last_renewal + rand(1..730).days }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
factory :licensor, parent: :record, class: "SBOM::CycloneDX::Record::License::Licensing::Licensor" do
|
44
|
+
transient do
|
45
|
+
licensor_type { %i[organization individual] }
|
46
|
+
end
|
47
|
+
|
48
|
+
trait :organization do
|
49
|
+
licensor_type { :organization }
|
50
|
+
end
|
51
|
+
|
52
|
+
trait :individual do
|
53
|
+
licensor_type { :individual }
|
54
|
+
end
|
55
|
+
|
56
|
+
organization { licensor_type == :organization ? association(:organizational_entity) : nil }
|
57
|
+
individual { licensor_type == :individual ? association(:organizational_contact) : nil }
|
58
|
+
|
59
|
+
trait :all_fields
|
60
|
+
end
|
61
|
+
|
62
|
+
factory :licensee, parent: :record, class: "SBOM::CycloneDX::Record::License::Licensing::Licensee" do
|
63
|
+
transient do
|
64
|
+
licensee_type { %i[organization individual] }
|
65
|
+
end
|
66
|
+
|
67
|
+
trait :organization do
|
68
|
+
licensee_type { :organization }
|
69
|
+
end
|
70
|
+
|
71
|
+
trait :individual do
|
72
|
+
licensee_type { :individual }
|
73
|
+
end
|
74
|
+
|
75
|
+
organization { licensee_type == :organization ? association(:organizational_entity) : nil }
|
76
|
+
individual { licensee_type == :individual ? association(:organizational_contact) : nil }
|
77
|
+
|
78
|
+
trait :all_fields
|
79
|
+
end
|
80
|
+
|
81
|
+
factory :purchaser, parent: :record, class: "SBOM::CycloneDX::Record::License::Licensing::Purchaser" do
|
82
|
+
transient do
|
83
|
+
purchaser_type { %i[organization individual] }
|
84
|
+
end
|
85
|
+
|
86
|
+
trait :organization do
|
87
|
+
purchaser_type { :organization }
|
88
|
+
end
|
89
|
+
|
90
|
+
trait :individual do
|
91
|
+
purchaser_type { :individual }
|
92
|
+
end
|
93
|
+
|
94
|
+
organization { purchaser_type == :organization ? association(:organizational_entity) : nil }
|
95
|
+
individual { purchaser_type == :individual ? association(:organizational_contact) : nil }
|
96
|
+
|
97
|
+
trait :all_fields
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :metadata, parent: :record, class: "SBOM::CycloneDX::Record::Metadata" do
|
5
|
+
trait :all_fields do
|
6
|
+
timestamp { Faker::Time.backward(days: 4) }
|
7
|
+
lifecycles do
|
8
|
+
Array.new(rand(1..3)) do
|
9
|
+
next association(:pre_defined_phase) if Faker::Boolean.boolean
|
10
|
+
|
11
|
+
association(:custom_phase)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
tools { association(:tools) }
|
15
|
+
manufacturer { association(:organizational_entity) }
|
16
|
+
authors { association_list(:organizational_contact) }
|
17
|
+
component { association(:component) }
|
18
|
+
manufacture { association(:organizational_entity) }
|
19
|
+
supplier { association(:organizational_entity) }
|
20
|
+
licenses { license_choice_list }
|
21
|
+
properties { association_list(:property) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
factory :custom_phase, parent: :record, class: "SBOM::CycloneDX::Record::Metadata::CustomPhase" do
|
26
|
+
name { Faker::Lorem.word }
|
27
|
+
|
28
|
+
trait :all_fields do
|
29
|
+
description { Faker::Lorem.sentence }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
factory :pre_defined_phase, parent: :record, class: "SBOM::CycloneDX::Record::Metadata::PreDefinedPhase" do
|
34
|
+
phase { SBOM::CycloneDX::Enum::PHASE.sample }
|
35
|
+
|
36
|
+
trait :all_fields
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :model_card, parent: :record, class: "SBOM::CycloneDX::Record::ModelCard" do
|
5
|
+
trait :all_fields do
|
6
|
+
bom_ref { generate(:ref_link) }
|
7
|
+
model_parameters { association(:model_parameters) }
|
8
|
+
quantitative_analysis { association(:quantitative_analysis) }
|
9
|
+
considerations { association(:considerations) }
|
10
|
+
properties { association_list(:property) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
factory :considerations, parent: :record, class: "SBOM::CycloneDX::Record::ModelCard::Considerations" do
|
15
|
+
trait :all_fields do
|
16
|
+
users { Array.new(rand(1..3)) { Faker::Lorem.word } }
|
17
|
+
use_cases { Array.new(rand(1..3)) { Faker::Lorem.word } }
|
18
|
+
technical_limitations { Array.new(rand(1..3)) { Faker::Lorem.word } }
|
19
|
+
performance_tradeoffs { Array.new(rand(1..3)) { Faker::Lorem.word } }
|
20
|
+
ethical_considerations { association_list(:risk) }
|
21
|
+
environmental_considerations { association(:environmental_consideration) }
|
22
|
+
fairness_assessments { association_list(:fairness_assessment) }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
factory :model_parameters, parent: :record, class: "SBOM::CycloneDX::Record::ModelCard::ModelParameters" do
|
27
|
+
trait :all_fields do
|
28
|
+
approach { association(:approach) }
|
29
|
+
task { Faker::Lorem.word }
|
30
|
+
architecture_family { Faker::Lorem.word }
|
31
|
+
model_architecture { Faker::Lorem.word }
|
32
|
+
datasets do
|
33
|
+
Array.new(1..3) { Faker::Boolean.boolean ? association(:component_data) : association(:data_reference) }
|
34
|
+
end
|
35
|
+
inputs { association_list(:input_output_ml_parameter) }
|
36
|
+
outputs { association_list(:input_output_ml_parameter) }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
factory :approach, parent: :record, class: "SBOM::CycloneDX::Record::ModelCard::ModelParameters::Approach" do
|
41
|
+
trait :all_fields do
|
42
|
+
type { SBOM::CycloneDX::Enum::LEARNING_TYPE.sample }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
factory :data_reference, parent: :record,
|
47
|
+
class: "SBOM::CycloneDX::Record::ModelCard::ModelParameters::DataReference" do
|
48
|
+
trait :all_fields do
|
49
|
+
ref { generate(:ref_or_cdx_urn) }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
factory :quantitative_analysis, parent: :record, class: "SBOM::CycloneDX::Record::ModelCard::QuantitativeAnalysis" do
|
54
|
+
trait :all_fields do
|
55
|
+
performance_metrics { association_list(:performance_metric) }
|
56
|
+
graphics { association(:graphics_collection) }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :organizational_contact, parent: :record, class: "SBOM::CycloneDX::Record::OrganizationalContact" do
|
5
|
+
trait :all_fields do
|
6
|
+
bom_ref { generate(:ref_link) }
|
7
|
+
name { Faker::Name.name }
|
8
|
+
email { generate(:email) }
|
9
|
+
phone { Faker::PhoneNumber.phone_number }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :organizational_entity, parent: :record, class: "SBOM::CycloneDX::Record::OrganizationalEntity" do
|
5
|
+
trait :all_fields do
|
6
|
+
bom_ref { generate(:ref_link) }
|
7
|
+
name { Faker::Company.name }
|
8
|
+
address { association(:postal_address) }
|
9
|
+
url { [Faker::Internet.url] }
|
10
|
+
contact { association_list(:organizational_contact) }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :output, parent: :record, class: "SBOM::CycloneDX::Record::Output" do
|
5
|
+
transient do
|
6
|
+
reference_type { %i[resource data environment_vars].sample }
|
7
|
+
end
|
8
|
+
|
9
|
+
trait :resource do
|
10
|
+
reference_type { :resource }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :data do
|
14
|
+
reference_type { :data }
|
15
|
+
end
|
16
|
+
|
17
|
+
trait :environment_vars do
|
18
|
+
reference_type { :environment_vars }
|
19
|
+
end
|
20
|
+
|
21
|
+
type { SBOM::CycloneDX::Enum::OUTPUT_TYPE.sample }
|
22
|
+
resource { association(:resource_reference_choice) if reference_type == :resource }
|
23
|
+
data { association(:attachment) if reference_type == :data }
|
24
|
+
environment_vars { association_list(:property) if reference_type == :environment_vars }
|
25
|
+
|
26
|
+
trait :all_fields do
|
27
|
+
source { association(:resource_reference_choice) }
|
28
|
+
target { association(:resource_reference_choice) }
|
29
|
+
properties { association_list(:property) }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :parameter, parent: :record, class: "SBOM::CycloneDX::Record::Parameter" do
|
5
|
+
trait :all_fields do
|
6
|
+
name { Faker::Lorem.word }
|
7
|
+
value { Faker::Lorem.word }
|
8
|
+
data_type { Faker::Lorem.word }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :patch, parent: :record, class: "SBOM::CycloneDX::Record::Patch" do
|
5
|
+
type { SBOM::CycloneDX::Enum::PATCH_TYPE.sample }
|
6
|
+
|
7
|
+
trait :all_fields do
|
8
|
+
diff { association(:diff) }
|
9
|
+
resolves { association_list(:issue) }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :performance_metric, parent: :record, class: "SBOM::CycloneDX::Record::PerformanceMetric" do
|
5
|
+
trait :all_fields do
|
6
|
+
type { Faker::Lorem.word }
|
7
|
+
value { Faker::Lorem.word }
|
8
|
+
slice { Faker::Lorem.word }
|
9
|
+
confidence_interval { association(:confidence_interval) }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
factory :confidence_interval, parent: :record,
|
14
|
+
class: "SBOM::CycloneDX::Record::PerformanceMetric::ConfidenceInterval" do
|
15
|
+
trait :all_fields do
|
16
|
+
lower_bound { Faker::Lorem.word }
|
17
|
+
upper_bound { Faker::Lorem.word }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :postal_address, parent: :record, class: "SBOM::CycloneDX::Record::PostalAddress" do
|
5
|
+
trait :all_fields do
|
6
|
+
country { Faker::Address.country }
|
7
|
+
region { Faker::Address.state }
|
8
|
+
locality { Faker::Address.city }
|
9
|
+
post_office_box_number { Faker::Address.building_number }
|
10
|
+
postal_code { Faker::Address.zip_code }
|
11
|
+
street_address { Faker::Address.street_address }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :rating, parent: :record, class: "SBOM::CycloneDX::Record::Rating" do
|
5
|
+
trait :all_fields do
|
6
|
+
source { association(:vulnerability_source) }
|
7
|
+
score { rand(0.0..10.0) }
|
8
|
+
severity { SBOM::CycloneDX::Enum::SEVERITY.sample }
|
9
|
+
score_method { SBOM::CycloneDX::Enum::SCORE_METHOD.sample }
|
10
|
+
vector { Faker::Lorem.sentence }
|
11
|
+
justification { Faker::Lorem.sentence }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :release_notes, parent: :record, class: "SBOM::CycloneDX::Record::ReleaseNotes" do
|
5
|
+
type { Faker::Lorem.word }
|
6
|
+
|
7
|
+
trait :all_fields do
|
8
|
+
title { Faker::Lorem.sentence }
|
9
|
+
featured_image { Faker::LoremFlickr.image }
|
10
|
+
social_image { Faker::LoremFlickr.image }
|
11
|
+
description { Faker::Lorem.paragraph }
|
12
|
+
timestamp { Faker::Time.backward }
|
13
|
+
aliases { Array.new(rand(0..3)) { Faker::Lorem.word } }
|
14
|
+
tags { Array.new(rand(0..3)) { Faker::Lorem.word } }
|
15
|
+
resolves { association_list(:issue) }
|
16
|
+
notes { association_list(:note) }
|
17
|
+
properties { association_list(:property) }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :resource_reference_choice, parent: :record, class: "SBOM::CycloneDX::Record::ResourceReferenceChoice" do
|
5
|
+
transient do
|
6
|
+
reference_type { %i[ref external_reference].sample }
|
7
|
+
end
|
8
|
+
|
9
|
+
trait :ref do
|
10
|
+
transient { reference_type { :ref } }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :external_reference do
|
14
|
+
transient { reference_type { :external_reference } }
|
15
|
+
end
|
16
|
+
|
17
|
+
ref do
|
18
|
+
reference_type == :ref ? generate(:ref_or_cdx_urn) : nil
|
19
|
+
end
|
20
|
+
|
21
|
+
external_reference do
|
22
|
+
reference_type == :external_reference ? association(:external_reference) : nil
|
23
|
+
end
|
24
|
+
|
25
|
+
trait :all_fields
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :root, parent: :record, class: "SBOM::CycloneDX::Record::Root" do
|
5
|
+
trait :all_fields do
|
6
|
+
serial_number { generate(:bom_serial_number) }
|
7
|
+
version { rand(1..10_000) }
|
8
|
+
metadata { association(:metadata) }
|
9
|
+
components { association_list(:component) }
|
10
|
+
services { association_list(:service) }
|
11
|
+
external_references { association_list(:external_reference) }
|
12
|
+
dependencies { association_list(:dependency) }
|
13
|
+
compositions { association_list(:composition) }
|
14
|
+
vulnerabilities { association_list(:vulnerability) }
|
15
|
+
annotations { association_list(:annotation) }
|
16
|
+
formulation { association_list(:formula) }
|
17
|
+
declarations { association(:declarations) }
|
18
|
+
definitions { association(:definitions) }
|
19
|
+
properties { association_list(:property) }
|
20
|
+
signature { generate_signature }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :service_data, parent: :record, class: "SBOM::CycloneDX::Record::ServiceData" do
|
5
|
+
flow { SBOM::CycloneDX::Enum::DATA_FLOW_DIRECTION.sample }
|
6
|
+
classification { Faker::Lorem.word }
|
7
|
+
source { Faker::Boolean.boolean ? generate(:url) : generate(:cdx_urn) }
|
8
|
+
destination { Faker::Boolean.boolean ? generate(:url) : generate(:cdx_urn) }
|
9
|
+
|
10
|
+
trait :all_fields do
|
11
|
+
name { Faker::Lorem.word }
|
12
|
+
description { Faker::Lorem.sentence }
|
13
|
+
governance { association(:data_governance) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|