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.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -0
  3. data/.gitlab-ci.yml +49 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +72 -0
  6. data/.vscode/settings.json +6 -0
  7. data/CHANGELOG.md +9 -0
  8. data/CODE_OF_CONDUCT.md +132 -0
  9. data/Gemfile +26 -0
  10. data/Gemfile.lock +179 -0
  11. data/LICENSE.txt +21 -0
  12. data/README.md +39 -0
  13. data/Rakefile +36 -0
  14. data/Steepfile +14 -0
  15. data/bin/console +11 -0
  16. data/bin/rbs_spec +9 -0
  17. data/bin/setup +8 -0
  18. data/bom-1.6.schema.json +7334 -0
  19. data/lib/email_address_extension.rb +26 -0
  20. data/lib/sbom/cyclone_dx/enum.rb +2178 -0
  21. data/lib/sbom/cyclone_dx/field.rb +404 -0
  22. data/lib/sbom/cyclone_dx/pattern.rb +43 -0
  23. data/lib/sbom/cyclone_dx/record/advisory.rb +17 -0
  24. data/lib/sbom/cyclone_dx/record/annotation.rb +46 -0
  25. data/lib/sbom/cyclone_dx/record/attachment.rb +21 -0
  26. data/lib/sbom/cyclone_dx/record/base.rb +244 -0
  27. data/lib/sbom/cyclone_dx/record/cipher_suite.rb +23 -0
  28. data/lib/sbom/cyclone_dx/record/co2_measure.rb +18 -0
  29. data/lib/sbom/cyclone_dx/record/command.rb +18 -0
  30. data/lib/sbom/cyclone_dx/record/commit.rb +25 -0
  31. data/lib/sbom/cyclone_dx/record/component.rb +126 -0
  32. data/lib/sbom/cyclone_dx/record/component_data.rb +46 -0
  33. data/lib/sbom/cyclone_dx/record/component_evidence.rb +68 -0
  34. data/lib/sbom/cyclone_dx/record/component_identity_evidence.rb +36 -0
  35. data/lib/sbom/cyclone_dx/record/composition.rb +33 -0
  36. data/lib/sbom/cyclone_dx/record/condition.rb +20 -0
  37. data/lib/sbom/cyclone_dx/record/copyright.rb +16 -0
  38. data/lib/sbom/cyclone_dx/record/crypto_properties.rb +137 -0
  39. data/lib/sbom/cyclone_dx/record/data_governance.rb +21 -0
  40. data/lib/sbom/cyclone_dx/record/data_governance_responsible_party.rb +22 -0
  41. data/lib/sbom/cyclone_dx/record/declarations.rb +193 -0
  42. data/lib/sbom/cyclone_dx/record/definitions.rb +17 -0
  43. data/lib/sbom/cyclone_dx/record/dependency.rb +21 -0
  44. data/lib/sbom/cyclone_dx/record/diff.rb +18 -0
  45. data/lib/sbom/cyclone_dx/record/energy_consumption.rb +31 -0
  46. data/lib/sbom/cyclone_dx/record/energy_measure.rb +18 -0
  47. data/lib/sbom/cyclone_dx/record/energy_provider.rb +31 -0
  48. data/lib/sbom/cyclone_dx/record/environmental_consideration.rb +20 -0
  49. data/lib/sbom/cyclone_dx/record/event.rb +31 -0
  50. data/lib/sbom/cyclone_dx/record/external_reference.rb +25 -0
  51. data/lib/sbom/cyclone_dx/record/fairness_assessment.rb +22 -0
  52. data/lib/sbom/cyclone_dx/record/formula.rb +29 -0
  53. data/lib/sbom/cyclone_dx/record/graphic.rb +19 -0
  54. data/lib/sbom/cyclone_dx/record/graphics_collection.rb +19 -0
  55. data/lib/sbom/cyclone_dx/record/hash_data.rb +18 -0
  56. data/lib/sbom/cyclone_dx/record/identifiable_action.rb +21 -0
  57. data/lib/sbom/cyclone_dx/record/input.rb +34 -0
  58. data/lib/sbom/cyclone_dx/record/input_output_ml_parameter.rb +17 -0
  59. data/lib/sbom/cyclone_dx/record/issue.rb +36 -0
  60. data/lib/sbom/cyclone_dx/record/license.rb +90 -0
  61. data/lib/sbom/cyclone_dx/record/license_choice.rb +35 -0
  62. data/lib/sbom/cyclone_dx/record/metadata.rb +55 -0
  63. data/lib/sbom/cyclone_dx/record/model_card.rb +89 -0
  64. data/lib/sbom/cyclone_dx/record/note.rb +20 -0
  65. data/lib/sbom/cyclone_dx/record/organizational_contact.rb +26 -0
  66. data/lib/sbom/cyclone_dx/record/organizational_entity.rb +28 -0
  67. data/lib/sbom/cyclone_dx/record/output.rb +34 -0
  68. data/lib/sbom/cyclone_dx/record/parameter.rb +20 -0
  69. data/lib/sbom/cyclone_dx/record/patch.rb +23 -0
  70. data/lib/sbom/cyclone_dx/record/performance_metric.rb +30 -0
  71. data/lib/sbom/cyclone_dx/record/postal_address.rb +34 -0
  72. data/lib/sbom/cyclone_dx/record/property.rb +18 -0
  73. data/lib/sbom/cyclone_dx/record/rating.rb +27 -0
  74. data/lib/sbom/cyclone_dx/record/release_notes.rb +44 -0
  75. data/lib/sbom/cyclone_dx/record/resource_reference_choice.rb +22 -0
  76. data/lib/sbom/cyclone_dx/record/risk.rb +18 -0
  77. data/lib/sbom/cyclone_dx/record/root.rb +63 -0
  78. data/lib/sbom/cyclone_dx/record/secured_by.rb +20 -0
  79. data/lib/sbom/cyclone_dx/record/service.rb +54 -0
  80. data/lib/sbom/cyclone_dx/record/service_data.rb +32 -0
  81. data/lib/sbom/cyclone_dx/record/signature.rb +85 -0
  82. data/lib/sbom/cyclone_dx/record/standard.rb +72 -0
  83. data/lib/sbom/cyclone_dx/record/step.rb +24 -0
  84. data/lib/sbom/cyclone_dx/record/swid.rb +29 -0
  85. data/lib/sbom/cyclone_dx/record/task.rb +56 -0
  86. data/lib/sbom/cyclone_dx/record/tools.rb +20 -0
  87. data/lib/sbom/cyclone_dx/record/trigger.rb +48 -0
  88. data/lib/sbom/cyclone_dx/record/version.rb +24 -0
  89. data/lib/sbom/cyclone_dx/record/volume.rb +33 -0
  90. data/lib/sbom/cyclone_dx/record/vulnerability.rb +119 -0
  91. data/lib/sbom/cyclone_dx/record/vulnerability_source.rb +20 -0
  92. data/lib/sbom/cyclone_dx/record/workflow.rb +59 -0
  93. data/lib/sbom/cyclone_dx/record/workspace.rb +45 -0
  94. data/lib/sbom/cyclone_dx/record.rb +12 -0
  95. data/lib/sbom/cyclone_dx/validator/array_validator.rb +66 -0
  96. data/lib/sbom/cyclone_dx/validator/base_validator.rb +43 -0
  97. data/lib/sbom/cyclone_dx/validator/boolean_validator.rb +16 -0
  98. data/lib/sbom/cyclone_dx/validator/date_time_validator.rb +29 -0
  99. data/lib/sbom/cyclone_dx/validator/email_address_validator.rb +31 -0
  100. data/lib/sbom/cyclone_dx/validator/float_validator.rb +30 -0
  101. data/lib/sbom/cyclone_dx/validator/integer_validator.rb +30 -0
  102. data/lib/sbom/cyclone_dx/validator/record_validator.rb +26 -0
  103. data/lib/sbom/cyclone_dx/validator/string_validator.rb +33 -0
  104. data/lib/sbom/cyclone_dx/validator/union_validator.rb +39 -0
  105. data/lib/sbom/cyclone_dx/validator/uri_validator.rb +32 -0
  106. data/lib/sbom/cyclone_dx/validator.rb +32 -0
  107. data/lib/sbom/cyclone_dx/version.rb +7 -0
  108. data/lib/sbom/cyclone_dx.rb +39 -0
  109. data/rbs_collection.lock.yaml +288 -0
  110. data/rbs_collection.yaml +31 -0
  111. data/sbom-cyclone_dx.gemspec +32 -0
  112. data/sig/email_address_extension.rbs +14 -0
  113. data/sig/sbom/cyclone_dx/enum.rbs +93 -0
  114. data/sig/sbom/cyclone_dx/field.rbs +434 -0
  115. data/sig/sbom/cyclone_dx/pattern.rbs +24 -0
  116. data/sig/sbom/cyclone_dx/record/advisory.rbs +19 -0
  117. data/sig/sbom/cyclone_dx/record/annotation.rbs +63 -0
  118. data/sig/sbom/cyclone_dx/record/attachment.rbs +24 -0
  119. data/sig/sbom/cyclone_dx/record/base.rbs +62 -0
  120. data/sig/sbom/cyclone_dx/record/cipher_suite.rbs +24 -0
  121. data/sig/sbom/cyclone_dx/record/co2_measure.rbs +14 -0
  122. data/sig/sbom/cyclone_dx/record/command.rbs +19 -0
  123. data/sig/sbom/cyclone_dx/record/commit.rbs +34 -0
  124. data/sig/sbom/cyclone_dx/record/component.rbs +203 -0
  125. data/sig/sbom/cyclone_dx/record/component_data.rbs +73 -0
  126. data/sig/sbom/cyclone_dx/record/component_evidence.rbs +115 -0
  127. data/sig/sbom/cyclone_dx/record/component_identity_evidence.rbs +53 -0
  128. data/sig/sbom/cyclone_dx/record/composition.rbs +39 -0
  129. data/sig/sbom/cyclone_dx/record/condition.rbs +24 -0
  130. data/sig/sbom/cyclone_dx/record/copyright.rbs +14 -0
  131. data/sig/sbom/cyclone_dx/record/crypto_properties.rbs +268 -0
  132. data/sig/sbom/cyclone_dx/record/data_governance.rbs +24 -0
  133. data/sig/sbom/cyclone_dx/record/data_governance_responsible_party.rbs +19 -0
  134. data/sig/sbom/cyclone_dx/record/declarations.rbs +352 -0
  135. data/sig/sbom/cyclone_dx/record/definitions.rbs +14 -0
  136. data/sig/sbom/cyclone_dx/record/dependency.rbs +24 -0
  137. data/sig/sbom/cyclone_dx/record/diff.rbs +19 -0
  138. data/sig/sbom/cyclone_dx/record/energy_consumption.rbs +39 -0
  139. data/sig/sbom/cyclone_dx/record/energy_measure.rbs +14 -0
  140. data/sig/sbom/cyclone_dx/record/energy_provider.rbs +39 -0
  141. data/sig/sbom/cyclone_dx/record/environmental_consideration.rbs +19 -0
  142. data/sig/sbom/cyclone_dx/record/event.rbs +44 -0
  143. data/sig/sbom/cyclone_dx/record/external_reference.rbs +29 -0
  144. data/sig/sbom/cyclone_dx/record/fairness_assessment.rbs +29 -0
  145. data/sig/sbom/cyclone_dx/record/formula.rbs +34 -0
  146. data/sig/sbom/cyclone_dx/record/graphic.rbs +19 -0
  147. data/sig/sbom/cyclone_dx/record/graphics_collection.rbs +19 -0
  148. data/sig/sbom/cyclone_dx/record/hash_data.rbs +19 -0
  149. data/sig/sbom/cyclone_dx/record/identifiable_action.rbs +24 -0
  150. data/sig/sbom/cyclone_dx/record/input.rbs +44 -0
  151. data/sig/sbom/cyclone_dx/record/input_output_ml_parameter.rbs +14 -0
  152. data/sig/sbom/cyclone_dx/record/issue.rbs +53 -0
  153. data/sig/sbom/cyclone_dx/record/license.rbs +134 -0
  154. data/sig/sbom/cyclone_dx/record/license_choice.rbs +39 -0
  155. data/sig/sbom/cyclone_dx/record/metadata.rbs +82 -0
  156. data/sig/sbom/cyclone_dx/record/model_card.rbs +143 -0
  157. data/sig/sbom/cyclone_dx/record/note.rbs +19 -0
  158. data/sig/sbom/cyclone_dx/record/organizational_contact.rbs +29 -0
  159. data/sig/sbom/cyclone_dx/record/organizational_entity.rbs +34 -0
  160. data/sig/sbom/cyclone_dx/record/output.rbs +44 -0
  161. data/sig/sbom/cyclone_dx/record/parameter.rbs +24 -0
  162. data/sig/sbom/cyclone_dx/record/patch.rbs +24 -0
  163. data/sig/sbom/cyclone_dx/record/performance_metric.rbs +43 -0
  164. data/sig/sbom/cyclone_dx/record/postal_address.rbs +44 -0
  165. data/sig/sbom/cyclone_dx/record/property.rbs +19 -0
  166. data/sig/sbom/cyclone_dx/record/rating.rbs +39 -0
  167. data/sig/sbom/cyclone_dx/record/release_notes.rbs +64 -0
  168. data/sig/sbom/cyclone_dx/record/resource_reference_choice.rbs +19 -0
  169. data/sig/sbom/cyclone_dx/record/risk.rbs +19 -0
  170. data/sig/sbom/cyclone_dx/record/root.rbs +84 -0
  171. data/sig/sbom/cyclone_dx/record/secured_by.rbs +19 -0
  172. data/sig/sbom/cyclone_dx/record/service.rbs +99 -0
  173. data/sig/sbom/cyclone_dx/record/service_data.rbs +44 -0
  174. data/sig/sbom/cyclone_dx/record/signature.rbs +130 -0
  175. data/sig/sbom/cyclone_dx/record/standard.rbs +132 -0
  176. data/sig/sbom/cyclone_dx/record/step.rbs +29 -0
  177. data/sig/sbom/cyclone_dx/record/swid.rbs +44 -0
  178. data/sig/sbom/cyclone_dx/record/task.rbs +84 -0
  179. data/sig/sbom/cyclone_dx/record/tools.rbs +19 -0
  180. data/sig/sbom/cyclone_dx/record/trigger.rbs +69 -0
  181. data/sig/sbom/cyclone_dx/record/version.rbs +24 -0
  182. data/sig/sbom/cyclone_dx/record/volume.rbs +49 -0
  183. data/sig/sbom/cyclone_dx/record/vulnerability.rbs +209 -0
  184. data/sig/sbom/cyclone_dx/record/vulnerability_source.rbs +19 -0
  185. data/sig/sbom/cyclone_dx/record/workflow.rbs +94 -0
  186. data/sig/sbom/cyclone_dx/record/workspace.rbs +69 -0
  187. data/sig/sbom/cyclone_dx/record.rbs +161 -0
  188. data/sig/sbom/cyclone_dx/type.rbs +16 -0
  189. data/sig/sbom/cyclone_dx/validator/array_validator.rbs +31 -0
  190. data/sig/sbom/cyclone_dx/validator/base_validator.rbs +21 -0
  191. data/sig/sbom/cyclone_dx/validator/boolean_validator.rbs +9 -0
  192. data/sig/sbom/cyclone_dx/validator/date_time_validator.rbs +10 -0
  193. data/sig/sbom/cyclone_dx/validator/email_address_validator.rbs +10 -0
  194. data/sig/sbom/cyclone_dx/validator/float_validator.rbs +12 -0
  195. data/sig/sbom/cyclone_dx/validator/integer_validator.rbs +12 -0
  196. data/sig/sbom/cyclone_dx/validator/record_validator.rbs +12 -0
  197. data/sig/sbom/cyclone_dx/validator/string_validator.rbs +14 -0
  198. data/sig/sbom/cyclone_dx/validator/union_validator.rbs +24 -0
  199. data/sig/sbom/cyclone_dx/validator/uri_validator.rbs +10 -0
  200. data/sig/sbom/cyclone_dx/validator.rbs +66 -0
  201. data/sig/sbom/cyclone_dx.rbs +13 -0
  202. data/sig/types.rbs +45 -0
  203. data/spec/email_address_extension_spec.rb +27 -0
  204. data/spec/factories/factory_helper.rb +78 -0
  205. data/spec/factories/record/advisory_factory.rb +11 -0
  206. data/spec/factories/record/annotation_factory.rb +63 -0
  207. data/spec/factories/record/attachment_factory.rb +9 -0
  208. data/spec/factories/record/cipher_suite_factory.rb +26 -0
  209. data/spec/factories/record/co2_measure_factory.rb +9 -0
  210. data/spec/factories/record/command_factory.rb +10 -0
  211. data/spec/factories/record/commit_factory.rb +13 -0
  212. data/spec/factories/record/component_data_factory.rb +28 -0
  213. data/spec/factories/record/component_evidence_factory.rb +44 -0
  214. data/spec/factories/record/component_factory.rb +102 -0
  215. data/spec/factories/record/component_identity_evidence_factory.rb +25 -0
  216. data/spec/factories/record/composition_factory.rb +20 -0
  217. data/spec/factories/record/condition_factory.rb +11 -0
  218. data/spec/factories/record/copyright_factory.rb +9 -0
  219. data/spec/factories/record/crypto_properties_factory.rb +191 -0
  220. data/spec/factories/record/data_governance_factory.rb +11 -0
  221. data/spec/factories/record/data_governance_responsible_party_factory.rb +31 -0
  222. data/spec/factories/record/declarations_factory.rb +145 -0
  223. data/spec/factories/record/definitions_factory.rb +9 -0
  224. data/spec/factories/record/dependency_factory.rb +12 -0
  225. data/spec/factories/record/diff_factory.rb +24 -0
  226. data/spec/factories/record/energy_consumption_factory.rb +15 -0
  227. data/spec/factories/record/energy_measure_factory.rb +9 -0
  228. data/spec/factories/record/energy_provider_factory.rb +15 -0
  229. data/spec/factories/record/environmental_consideration_factory.rb +10 -0
  230. data/spec/factories/record/event_factory.rb +15 -0
  231. data/spec/factories/record/external_reference_factory.rb +13 -0
  232. data/spec/factories/record/fairness_assessment_factory.rb +12 -0
  233. data/spec/factories/record/formula_factory.rb +13 -0
  234. data/spec/factories/record/graphic_factory.rb +10 -0
  235. data/spec/factories/record/graphics_collection_factory.rb +10 -0
  236. data/spec/factories/record/hash_data_factory.rb +10 -0
  237. data/spec/factories/record/identifiable_action_factory.rb +11 -0
  238. data/spec/factories/record/input_factory.rb +36 -0
  239. data/spec/factories/record/input_output_ml_parameter_factory.rb +9 -0
  240. data/spec/factories/record/issue_factory.rb +22 -0
  241. data/spec/factories/record/license_choice_factory.rb +23 -0
  242. data/spec/factories/record/license_factory.rb +99 -0
  243. data/spec/factories/record/metadata_factory.rb +38 -0
  244. data/spec/factories/record/model_card_factory.rb +59 -0
  245. data/spec/factories/record/note_factory.rb +11 -0
  246. data/spec/factories/record/organizational_contact_factory.rb +12 -0
  247. data/spec/factories/record/organizational_entity_factory.rb +13 -0
  248. data/spec/factories/record/output_factory.rb +32 -0
  249. data/spec/factories/record/parameter_factory.rb +11 -0
  250. data/spec/factories/record/patch_factory.rb +12 -0
  251. data/spec/factories/record/performance_metric_factory.rb +20 -0
  252. data/spec/factories/record/postal_address_factory.rb +14 -0
  253. data/spec/factories/record/property_factory.rb +11 -0
  254. data/spec/factories/record/rating_factory.rb +14 -0
  255. data/spec/factories/record/release_notes_factory.rb +20 -0
  256. data/spec/factories/record/resource_reference_choice_factory.rb +27 -0
  257. data/spec/factories/record/risk_factory.rb +10 -0
  258. data/spec/factories/record/root_factory.rb +23 -0
  259. data/spec/factories/record/secured_by_factory.rb +10 -0
  260. data/spec/factories/record/service_data_factory.rb +16 -0
  261. data/spec/factories/record/service_factory.rb +27 -0
  262. data/spec/factories/record/signature_factory.rb +50 -0
  263. data/spec/factories/record/standard_factory.rb +37 -0
  264. data/spec/factories/record/step_factory.rb +12 -0
  265. data/spec/factories/record/swid_factory.rb +16 -0
  266. data/spec/factories/record/task_factory.rb +24 -0
  267. data/spec/factories/record/tools_factory.rb +10 -0
  268. data/spec/factories/record/trigger_factory.rb +21 -0
  269. data/spec/factories/record/version_factory.rb +19 -0
  270. data/spec/factories/record/volume_factory.rb +16 -0
  271. data/spec/factories/record/vulnerability_factory.rb +70 -0
  272. data/spec/factories/record/vulnerability_source_factory.rb +10 -0
  273. data/spec/factories/record/workflow_factory.rb +26 -0
  274. data/spec/factories/record/workspace_factory.rb +21 -0
  275. data/spec/factories/record_factory.rb +159 -0
  276. data/spec/fixtures/cipher_info.yml +948 -0
  277. data/spec/fixtures/purl_data.yml +0 -0
  278. data/spec/sbom/cyclone_dx/enum_spec.rb +30 -0
  279. data/spec/sbom/cyclone_dx/field_spec.rb +104 -0
  280. data/spec/sbom/cyclone_dx/pattern_spec.rb +18 -0
  281. data/spec/sbom/cyclone_dx/record/advisory_spec.rb +14 -0
  282. data/spec/sbom/cyclone_dx/record/annotation_spec.rb +31 -0
  283. data/spec/sbom/cyclone_dx/record/attachment_spec.rb +14 -0
  284. data/spec/sbom/cyclone_dx/record/base_spec.rb +363 -0
  285. data/spec/sbom/cyclone_dx/record/cipher_suite_spec.rb +14 -0
  286. data/spec/sbom/cyclone_dx/record/co2_measure_spec.rb +14 -0
  287. data/spec/sbom/cyclone_dx/record/command_spec.rb +14 -0
  288. data/spec/sbom/cyclone_dx/record/commit_spec.rb +14 -0
  289. data/spec/sbom/cyclone_dx/record/component_data_spec.rb +14 -0
  290. data/spec/sbom/cyclone_dx/record/component_evidence_spec.rb +14 -0
  291. data/spec/sbom/cyclone_dx/record/component_identity_evidence_spec.rb +14 -0
  292. data/spec/sbom/cyclone_dx/record/component_spec.rb +14 -0
  293. data/spec/sbom/cyclone_dx/record/composition_spec.rb +14 -0
  294. data/spec/sbom/cyclone_dx/record/condition_spec.rb +14 -0
  295. data/spec/sbom/cyclone_dx/record/copyright_spec.rb +14 -0
  296. data/spec/sbom/cyclone_dx/record/crypto_properties_spec.rb +14 -0
  297. data/spec/sbom/cyclone_dx/record/data_governance_responsible_party_spec.rb +19 -0
  298. data/spec/sbom/cyclone_dx/record/data_governance_spec.rb +14 -0
  299. data/spec/sbom/cyclone_dx/record/declarations_spec.rb +14 -0
  300. data/spec/sbom/cyclone_dx/record/definitions_spec.rb +14 -0
  301. data/spec/sbom/cyclone_dx/record/dependency_spec.rb +14 -0
  302. data/spec/sbom/cyclone_dx/record/diff_spec.rb +14 -0
  303. data/spec/sbom/cyclone_dx/record/energy_consumption_spec.rb +14 -0
  304. data/spec/sbom/cyclone_dx/record/energy_measure_spec.rb +14 -0
  305. data/spec/sbom/cyclone_dx/record/energy_provider_spec.rb +14 -0
  306. data/spec/sbom/cyclone_dx/record/environmental_consideration_spec.rb +14 -0
  307. data/spec/sbom/cyclone_dx/record/event_spec.rb +14 -0
  308. data/spec/sbom/cyclone_dx/record/external_reference_spec.rb +14 -0
  309. data/spec/sbom/cyclone_dx/record/fairness_assessment_spec.rb +14 -0
  310. data/spec/sbom/cyclone_dx/record/formula_spec.rb +14 -0
  311. data/spec/sbom/cyclone_dx/record/graphic_spec.rb +14 -0
  312. data/spec/sbom/cyclone_dx/record/graphics_collection_spec.rb +14 -0
  313. data/spec/sbom/cyclone_dx/record/hash_data_spec.rb +14 -0
  314. data/spec/sbom/cyclone_dx/record/identifiable_action_spec.rb +14 -0
  315. data/spec/sbom/cyclone_dx/record/input_output_ml_parameter_spec.rb +14 -0
  316. data/spec/sbom/cyclone_dx/record/input_spec.rb +14 -0
  317. data/spec/sbom/cyclone_dx/record/issue_spec.rb +14 -0
  318. data/spec/sbom/cyclone_dx/record/license_choice_spec.rb +26 -0
  319. data/spec/sbom/cyclone_dx/record/license_spec.rb +14 -0
  320. data/spec/sbom/cyclone_dx/record/metadata_spec.rb +14 -0
  321. data/spec/sbom/cyclone_dx/record/model_card_spec.rb +14 -0
  322. data/spec/sbom/cyclone_dx/record/note_spec.rb +14 -0
  323. data/spec/sbom/cyclone_dx/record/organizational_contact_spec.rb +14 -0
  324. data/spec/sbom/cyclone_dx/record/organizational_entity_spec.rb +14 -0
  325. data/spec/sbom/cyclone_dx/record/output_spec.rb +14 -0
  326. data/spec/sbom/cyclone_dx/record/parameter_spec.rb +14 -0
  327. data/spec/sbom/cyclone_dx/record/patch_spec.rb +14 -0
  328. data/spec/sbom/cyclone_dx/record/performance_metric_spec.rb +14 -0
  329. data/spec/sbom/cyclone_dx/record/postal_address_spec.rb +14 -0
  330. data/spec/sbom/cyclone_dx/record/property_spec.rb +14 -0
  331. data/spec/sbom/cyclone_dx/record/rating_spec.rb +14 -0
  332. data/spec/sbom/cyclone_dx/record/release_notes_spec.rb +14 -0
  333. data/spec/sbom/cyclone_dx/record/resource_reference_choice_spec.rb +14 -0
  334. data/spec/sbom/cyclone_dx/record/risk_spec.rb +14 -0
  335. data/spec/sbom/cyclone_dx/record/root_spec.rb +14 -0
  336. data/spec/sbom/cyclone_dx/record/secured_by_spec.rb +14 -0
  337. data/spec/sbom/cyclone_dx/record/service_data_spec.rb +14 -0
  338. data/spec/sbom/cyclone_dx/record/service_spec.rb +14 -0
  339. data/spec/sbom/cyclone_dx/record/signature_spec.rb +26 -0
  340. data/spec/sbom/cyclone_dx/record/standard_spec.rb +14 -0
  341. data/spec/sbom/cyclone_dx/record/step_spec.rb +14 -0
  342. data/spec/sbom/cyclone_dx/record/swid_spec.rb +14 -0
  343. data/spec/sbom/cyclone_dx/record/task_spec.rb +14 -0
  344. data/spec/sbom/cyclone_dx/record/tools_spec.rb +14 -0
  345. data/spec/sbom/cyclone_dx/record/trigger_spec.rb +14 -0
  346. data/spec/sbom/cyclone_dx/record/version_spec.rb +14 -0
  347. data/spec/sbom/cyclone_dx/record/volume_spec.rb +14 -0
  348. data/spec/sbom/cyclone_dx/record/vulnerability_source_spec.rb +14 -0
  349. data/spec/sbom/cyclone_dx/record/vulnerability_spec.rb +14 -0
  350. data/spec/sbom/cyclone_dx/record/workflow_spec.rb +14 -0
  351. data/spec/sbom/cyclone_dx/record/workspace_spec.rb +14 -0
  352. data/spec/sbom/cyclone_dx/record_spec.rb +7 -0
  353. data/spec/sbom/cyclone_dx/validator/array_validator_spec.rb +184 -0
  354. data/spec/sbom/cyclone_dx/validator/base_validator_spec.rb +71 -0
  355. data/spec/sbom/cyclone_dx/validator/boolean_validator_spec.rb +26 -0
  356. data/spec/sbom/cyclone_dx/validator/date_time_validator_spec.rb +28 -0
  357. data/spec/sbom/cyclone_dx/validator/email_address_validator_spec.rb +23 -0
  358. data/spec/sbom/cyclone_dx/validator/float_validator_spec.rb +71 -0
  359. data/spec/sbom/cyclone_dx/validator/integer_validator_spec.rb +71 -0
  360. data/spec/sbom/cyclone_dx/validator/record_validator_spec.rb +35 -0
  361. data/spec/sbom/cyclone_dx/validator/string_validator_spec.rb +94 -0
  362. data/spec/sbom/cyclone_dx/validator/union_validator_spec.rb +65 -0
  363. data/spec/sbom/cyclone_dx/validator/uri_validator_spec.rb +21 -0
  364. data/spec/sbom/cyclone_dx/validator_spec.rb +38 -0
  365. data/spec/sbom/cyclone_dx/version_spec.rb +9 -0
  366. data/spec/sbom/cyclone_dx_spec.rb +7 -0
  367. data/spec/spec_helper.rb +39 -0
  368. metadata +377 -6
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+
5
+ module SBOM
6
+ module CycloneDX
7
+ # TODO: Add helpful errors
8
+ module Validator
9
+ class RecordValidator < BaseValidator
10
+ def initialize(type:, required: false)
11
+ super(type, required: required)
12
+
13
+ @record_type = type
14
+ end
15
+
16
+ def validate(value)
17
+ rv = super
18
+ return rv unless value.is_a?(@record_type)
19
+
20
+ rv += value.valid? ? [] : value.formatted_errors
21
+ rv.compact
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+ require_relative "../pattern"
5
+
6
+ module SBOM
7
+ module CycloneDX
8
+ # TODO: Add helpful errors
9
+ module Validator
10
+ class StringValidator < BaseValidator
11
+ # TODO: Validate max/min_length >= 0 and max_length >= min_length
12
+ def initialize(enum: nil, max_length: nil, min_length: nil, pattern: Pattern::DEFAULT, required: true)
13
+ super(String, required: required)
14
+
15
+ @enum = enum
16
+ @length_range = (min_length..max_length)
17
+ @pattern = pattern
18
+ end
19
+
20
+ def validate(value)
21
+ rv = super
22
+ return rv unless value.is_a?(String)
23
+
24
+ rv << "Value is not within enum" if @enum&.exclude?(value)
25
+ rv << "Value is not within length range" unless @length_range.cover?(value.length)
26
+ rv << "Value does not match pattern" unless Pattern.match_exactly?(@pattern, value)
27
+
28
+ rv
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "base_validator"
4
+ require_relative "../validator"
5
+
6
+ module SBOM
7
+ module CycloneDX
8
+ # TODO: Add helpful errors
9
+ module Validator
10
+ class UnionValidator < BaseValidator
11
+ def initialize(of:, required: false)
12
+ super(required: required)
13
+
14
+ @nested_validators = []
15
+
16
+ of.each do |union_item|
17
+ (klass, validator_params) = union_item.is_a?(Array) ? union_item : [union_item, {}]
18
+
19
+ @nested_validators << Validator.for(klass, required: required, **validator_params)
20
+ end
21
+ end
22
+
23
+ def validate(value)
24
+ # TODO: Build message based on type and params, e.g.
25
+ # "Expected one of: [String, Integer], got: Float"
26
+ # "Expected one of: [String with length <= 2, Integer with maximum 99], got: String with length 3"
27
+ rv = @nested_validators.map { |validator| validator.validate(value) }
28
+ return [] if rv.any?(&:empty?)
29
+
30
+ rv.flatten
31
+ end
32
+
33
+ def raw_types
34
+ @nested_validators.flat_map(&:raw_types)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "uri"
4
+ require_relative "base_validator"
5
+
6
+ module SBOM
7
+ module CycloneDX
8
+ # TODO: Add helpful errors
9
+ module Validator
10
+ class URIValidator < BaseValidator
11
+ def initialize(required: false)
12
+ super(::URI::Generic, String, required: required)
13
+ end
14
+
15
+ def validate(value)
16
+ rv = super
17
+ return rv unless value.is_a?(::URI::Generic) || value.is_a?(String)
18
+
19
+ begin
20
+ # Steep is, for some reason, looking at OpenURI's ::URI, and not ::URI from stdlib...
21
+ uri_value = value.is_a?(URI::Generic) ? value : URI.parse(value)
22
+ return rv if uri_value.scheme.present? && uri_value.host.present?
23
+ rescue NoMethodError, URI::Error
24
+ # Do nothing, all errors handled below
25
+ end
26
+
27
+ rv << "Invalid URI"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dir[File.join(".", "validator", "*.rb")].each { |file| require_relative file }
4
+
5
+ module SBOM
6
+ module CycloneDX
7
+ module Validator
8
+ SIMPLE_TYPES = %i[boolean date_time email_address float integer string uri].freeze
9
+
10
+ class << self
11
+ def for(type, **kwargs) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/MethodLength,Metrics/AbcSize
12
+ case type
13
+ when :array then ArrayValidator.new(items: kwargs.fetch(:items), **kwargs)
14
+ when :boolean then BooleanValidator.new(**kwargs)
15
+ when :date_time then DateTimeValidator.new(**kwargs)
16
+ when :email_address then EmailAddressValidator.new(**kwargs)
17
+ when :float then FloatValidator.new(**kwargs)
18
+ when :integer then IntegerValidator.new(**kwargs)
19
+ when :string then StringValidator.new(**kwargs)
20
+ when :union then UnionValidator.new(of: kwargs.fetch(:of), **kwargs)
21
+ when :uri then URIValidator.new(**kwargs)
22
+ when Class
23
+ raise ArgumentError, "Unsupported type: #{type.name}" unless type < Record::Base
24
+
25
+ RecordValidator.new(type: type, **kwargs)
26
+ else raise ArgumentError, "Unsupported type: #{type}"
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SBOM
4
+ module CycloneDX
5
+ VERSION = "0.2.0"
6
+ end
7
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "../email_address_extension"
4
+ require_relative "cyclone_dx/enum"
5
+ require_relative "cyclone_dx/field"
6
+ require_relative "cyclone_dx/pattern"
7
+ require_relative "cyclone_dx/record"
8
+ require_relative "cyclone_dx/validator"
9
+ require_relative "cyclone_dx/version"
10
+ require "json"
11
+
12
+ # Disable DNS lookup and host validation for the EmailAddress gem, so we don't accidentally hit the network.
13
+ # We also override this in the EmailAddressExtension module, but this is a good safety net.
14
+ (_ = EmailAddress::Config).configure({ dns_lookup: :off, host_validation: :syntax })
15
+
16
+ module SBOM
17
+ module CycloneDX
18
+ class Error < StandardError; end
19
+
20
+ class << self
21
+ def create(hash)
22
+ Record::Root.new(**hash)
23
+ end
24
+
25
+ def load(file)
26
+ parse(file.read)
27
+ end
28
+
29
+ def parse(string)
30
+ json_hash = JSON.parse(string, symbolize_names: true)
31
+ Record::Root.json_create(json_hash)
32
+ end
33
+
34
+ def json_create(hash)
35
+ Record::Root.json_create(hash)
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,288 @@
1
+ ---
2
+ path: ".gem_rbs_collection"
3
+ gems:
4
+ - name: activesupport
5
+ version: '7.0'
6
+ source:
7
+ type: git
8
+ name: ruby/gem_rbs_collection
9
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
10
+ remote: https://github.com/ruby/gem_rbs_collection.git
11
+ repo_dir: gems
12
+ - name: ast
13
+ version: '2.4'
14
+ source:
15
+ type: git
16
+ name: ruby/gem_rbs_collection
17
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
18
+ remote: https://github.com/ruby/gem_rbs_collection.git
19
+ repo_dir: gems
20
+ - name: base64
21
+ version: '0'
22
+ source:
23
+ type: git
24
+ name: ruby/rbs
25
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
26
+ remote: https://github.com/ruby/rbs.git
27
+ repo_dir: stdlib
28
+ - name: benchmark
29
+ version: '0'
30
+ source:
31
+ type: git
32
+ name: ruby/rbs
33
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
34
+ remote: https://github.com/ruby/rbs.git
35
+ repo_dir: stdlib
36
+ - name: bigdecimal
37
+ version: '0'
38
+ source:
39
+ type: git
40
+ name: ruby/rbs
41
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
42
+ remote: https://github.com/ruby/rbs.git
43
+ repo_dir: stdlib
44
+ - name: concurrent-ruby
45
+ version: '1.1'
46
+ source:
47
+ type: git
48
+ name: ruby/gem_rbs_collection
49
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
50
+ remote: https://github.com/ruby/gem_rbs_collection.git
51
+ repo_dir: gems
52
+ - name: connection_pool
53
+ version: '2.4'
54
+ source:
55
+ type: git
56
+ name: ruby/gem_rbs_collection
57
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
58
+ remote: https://github.com/ruby/gem_rbs_collection.git
59
+ repo_dir: gems
60
+ - name: date
61
+ version: '0'
62
+ source:
63
+ type: stdlib
64
+ - name: dbm
65
+ version: '0'
66
+ source:
67
+ type: stdlib
68
+ - name: diff-lcs
69
+ version: '1.5'
70
+ source:
71
+ type: git
72
+ name: ruby/gem_rbs_collection
73
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
74
+ remote: https://github.com/ruby/gem_rbs_collection.git
75
+ repo_dir: gems
76
+ - name: digest
77
+ version: '0'
78
+ source:
79
+ type: stdlib
80
+ - name: email_address
81
+ version: '0.2'
82
+ source:
83
+ type: git
84
+ name: ruby/gem_rbs_collection
85
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
86
+ remote: https://github.com/ruby/gem_rbs_collection.git
87
+ repo_dir: gems
88
+ - name: erb
89
+ version: '0'
90
+ source:
91
+ type: stdlib
92
+ - name: faker
93
+ version: '2.23'
94
+ source:
95
+ type: git
96
+ name: ruby/gem_rbs_collection
97
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
98
+ remote: https://github.com/ruby/gem_rbs_collection.git
99
+ repo_dir: gems
100
+ - name: fileutils
101
+ version: '0'
102
+ source:
103
+ type: stdlib
104
+ - name: i18n
105
+ version: '1.10'
106
+ source:
107
+ type: git
108
+ name: ruby/gem_rbs_collection
109
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
110
+ remote: https://github.com/ruby/gem_rbs_collection.git
111
+ repo_dir: gems
112
+ - name: io-console
113
+ version: '0'
114
+ source:
115
+ type: git
116
+ name: ruby/rbs
117
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
118
+ remote: https://github.com/ruby/rbs.git
119
+ repo_dir: stdlib
120
+ - name: json
121
+ version: '0'
122
+ source:
123
+ type: git
124
+ name: ruby/rbs
125
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
126
+ remote: https://github.com/ruby/rbs.git
127
+ repo_dir: stdlib
128
+ - name: logger
129
+ version: '0'
130
+ source:
131
+ type: stdlib
132
+ - name: minitest
133
+ version: '0'
134
+ source:
135
+ type: stdlib
136
+ - name: monitor
137
+ version: '0'
138
+ source:
139
+ type: stdlib
140
+ - name: mutex_m
141
+ version: '0'
142
+ source:
143
+ type: git
144
+ name: ruby/rbs
145
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
146
+ remote: https://github.com/ruby/rbs.git
147
+ repo_dir: stdlib
148
+ - name: openssl
149
+ version: '0'
150
+ source:
151
+ type: stdlib
152
+ - name: optparse
153
+ version: '0'
154
+ source:
155
+ type: stdlib
156
+ - name: parallel
157
+ version: '1.20'
158
+ source:
159
+ type: git
160
+ name: ruby/gem_rbs_collection
161
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
162
+ remote: https://github.com/ruby/gem_rbs_collection.git
163
+ repo_dir: gems
164
+ - name: parser
165
+ version: '3.2'
166
+ source:
167
+ type: git
168
+ name: ruby/gem_rbs_collection
169
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
170
+ remote: https://github.com/ruby/gem_rbs_collection.git
171
+ repo_dir: gems
172
+ - name: pathname
173
+ version: '0'
174
+ source:
175
+ type: stdlib
176
+ - name: pstore
177
+ version: '0'
178
+ source:
179
+ type: stdlib
180
+ - name: psych
181
+ version: '0'
182
+ source:
183
+ type: git
184
+ name: ruby/rbs
185
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
186
+ remote: https://github.com/ruby/rbs.git
187
+ repo_dir: stdlib
188
+ - name: rainbow
189
+ version: '3.0'
190
+ source:
191
+ type: git
192
+ name: ruby/gem_rbs_collection
193
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
194
+ remote: https://github.com/ruby/gem_rbs_collection.git
195
+ repo_dir: gems
196
+ - name: rake
197
+ version: '13.0'
198
+ source:
199
+ type: git
200
+ name: ruby/gem_rbs_collection
201
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
202
+ remote: https://github.com/ruby/gem_rbs_collection.git
203
+ repo_dir: gems
204
+ - name: rbs
205
+ version: 3.7.0
206
+ source:
207
+ type: rubygems
208
+ - name: rdoc
209
+ version: '0'
210
+ source:
211
+ type: git
212
+ name: ruby/rbs
213
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
214
+ remote: https://github.com/ruby/rbs.git
215
+ repo_dir: stdlib
216
+ - name: regexp_parser
217
+ version: '2.8'
218
+ source:
219
+ type: git
220
+ name: ruby/gem_rbs_collection
221
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
222
+ remote: https://github.com/ruby/gem_rbs_collection.git
223
+ repo_dir: gems
224
+ - name: rubocop
225
+ version: '1.57'
226
+ source:
227
+ type: git
228
+ name: ruby/gem_rbs_collection
229
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
230
+ remote: https://github.com/ruby/gem_rbs_collection.git
231
+ repo_dir: gems
232
+ - name: rubocop-ast
233
+ version: '1.30'
234
+ source:
235
+ type: git
236
+ name: ruby/gem_rbs_collection
237
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
238
+ remote: https://github.com/ruby/gem_rbs_collection.git
239
+ repo_dir: gems
240
+ - name: securerandom
241
+ version: '0'
242
+ source:
243
+ type: stdlib
244
+ - name: singleton
245
+ version: '0'
246
+ source:
247
+ type: stdlib
248
+ - name: socket
249
+ version: '0'
250
+ source:
251
+ type: stdlib
252
+ - name: stringio
253
+ version: '0'
254
+ source:
255
+ type: git
256
+ name: ruby/rbs
257
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
258
+ remote: https://github.com/ruby/rbs.git
259
+ repo_dir: stdlib
260
+ - name: time
261
+ version: '0'
262
+ source:
263
+ type: stdlib
264
+ - name: timeout
265
+ version: '0'
266
+ source:
267
+ type: stdlib
268
+ - name: tsort
269
+ version: '0'
270
+ source:
271
+ type: stdlib
272
+ - name: tzinfo
273
+ version: '2.0'
274
+ source:
275
+ type: git
276
+ name: ruby/gem_rbs_collection
277
+ revision: 56038c8a383c25bae14a891e3c0cc5c2e5a9c976
278
+ remote: https://github.com/ruby/gem_rbs_collection.git
279
+ repo_dir: gems
280
+ - name: uri
281
+ version: '0'
282
+ source:
283
+ type: git
284
+ name: ruby/rbs
285
+ revision: e1636a79d553715cbf40343c6d33b4dd0fe8c2f3
286
+ remote: https://github.com/ruby/rbs.git
287
+ repo_dir: stdlib
288
+ gemfile_lock_path: Gemfile.lock
@@ -0,0 +1,31 @@
1
+ # Download sources
2
+ sources:
3
+ - type: git
4
+ name: ruby/gem_rbs_collection
5
+ remote: https://github.com/ruby/gem_rbs_collection.git
6
+ revision: main
7
+ repo_dir: gems
8
+ - type: git
9
+ name: ruby/rbs
10
+ remote: https://github.com/ruby/rbs.git
11
+ revision: master
12
+ repo_dir: stdlib
13
+
14
+ # You can specify local directories as sources also.
15
+ # - type: local
16
+ # path: path/to/your/local/repository
17
+
18
+ # A directory to install the downloaded RBSs
19
+ path: .gem_rbs_collection
20
+
21
+ # gems:
22
+ # # If you want to avoid installing rbs files for gems, you can specify them here.
23
+ # - name: GEM_NAME
24
+ # ignore: true
25
+ gems:
26
+ - name: email_address
27
+ ignore: false
28
+ - name: uri
29
+ ignore: false
30
+ - name: json
31
+ ignore: false
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/sbom/cyclone_dx/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "sbom-cyclonedx"
7
+ spec.version = SBOM::CycloneDX::VERSION
8
+ spec.authors = ["Rob Trame"]
9
+ spec.email = ["rtrame@hackerone.com"]
10
+
11
+ spec.summary = "Gem for generating/parsing CycloneDX JSON SBOMs"
12
+ spec.description = "Gem for generating/parsing CycloneDX JSON SBOMs"
13
+ spec.homepage = "https://github.com/Hacker0x01/sbom-cyclonedx"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 3.0.0"
16
+
17
+ # spec.metadata["allowed_push_host"] = "TODO: Set to your gem server 'https://example.com'"
18
+
19
+ spec.metadata["homepage_uri"] = spec.homepage
20
+ spec.metadata["source_code_uri"] = "https://github.com/Hacker0x01/sbom-cyclonedx"
21
+ spec.metadata["changelog_uri"] = "https://github.com/Hacker0x01/sbom-cyclonedx/blob/main/CHANGELOG.md"
22
+
23
+ spec.files = `git ls-files`.split("\n")
24
+ spec.bindir = "bin"
25
+ spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
26
+
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_dependency "activesupport", ">= 6.1", "< 8"
30
+ spec.add_dependency "email_address", "~> 0.2", ">= 0.2.4"
31
+ spec.metadata["rubygems_mfa_required"] = "true"
32
+ end
@@ -0,0 +1,14 @@
1
+ interface _EmailAddress
2
+ def initialize: (String, ?Hash[Symbol, untyped], ?String) -> void
3
+ end
4
+
5
+ module EmailAddressExtension
6
+ include _EmailAddress
7
+
8
+ def to_json: (*untyped) -> ::String
9
+ def as_json: (*untyped) -> ::String
10
+ end
11
+
12
+ class EmailAddress::Address
13
+ prepend EmailAddressExtension
14
+ end
@@ -0,0 +1,93 @@
1
+ module SBOM
2
+ module CycloneDX
3
+ module Enum
4
+ ACCESS_MODE: ::Array[String]
5
+
6
+ ACTIVITY: ::Array[String]
7
+
8
+ AFFECTED_STATUS: ::Array[String]
9
+
10
+ AGGREGATE_TYPE: ::Array[String]
11
+
12
+ ALGORITHM_MODE: ::Array[String]
13
+
14
+ ASSET_TYPE: ::Array[String]
15
+
16
+ CERTIFICATION_LEVEL: ::Array[String]
17
+
18
+ COMPONENT_DATA_TYPE: ::Array[String]
19
+
20
+ COMPONENT_TYPE: ::Array[String]
21
+
22
+ CRYPTO_FUNCTION: ::Array[String]
23
+
24
+ DATA_FLOW_DIRECTION: ::Array[String]
25
+
26
+ ENERGY_SOURCE: ::Array[String]
27
+
28
+ EXECUTION_ENVIRONMENT: ::Array[String]
29
+
30
+ EXTERNAL_REFERENCE_TYPE: ::Array[String]
31
+
32
+ FIELD: ::Array[String]
33
+
34
+ HASH_ALG: ::Array[String]
35
+
36
+ IMPACT_ANALYSIS_JUSTIFICATION: ::Array[String]
37
+
38
+ IMPACT_ANALYSIS_STATE: ::Array[String]
39
+
40
+ IMPLEMENTATION_PLATFORM: ::Array[String]
41
+
42
+ ISSUE_TYPE: ::Array[String]
43
+
44
+ LEARNING_TYPE: ::Array[String]
45
+
46
+ LICENSE_ACKNOWLEDGEMENT: ::Array[String]
47
+
48
+ LICENSE_ID: ::Array[String]
49
+
50
+ LICENSE_TYPE: ::Array[String]
51
+
52
+ OUTPUT_TYPE: ::Array[String]
53
+
54
+ PADDING: ::Array[String]
55
+
56
+ PATCH_TYPE: ::Array[String]
57
+
58
+ PHASE: ::Array[String]
59
+
60
+ PRIMITIVE: ::Array[String]
61
+
62
+ PROTOCOL_TYPE: ::Array[String]
63
+
64
+ RELATED_CRYPTO_MATERIAL_STATE: ::Array[String]
65
+
66
+ RELATED_CRYPTO_MATERIAL_TYPE: ::Array[String]
67
+
68
+ RESPONSE: ::Array[String]
69
+
70
+ SCOPE: ::Array[String]
71
+
72
+ SCORE_METHOD: ::Array[String]
73
+
74
+ SEVERITY: ::Array[String]
75
+
76
+ SIGNATURE_ALGORITHM: ::Array[String]
77
+
78
+ SIGNATURE_KEY_TYPE: ::Array[String]
79
+
80
+ SIGNATURE_EC_CRV: ::Array[String]
81
+
82
+ SIGNATURE_OKP_CRV: ::Array[String]
83
+
84
+ TASK_TYPE: ::Array[String]
85
+
86
+ TECHNIQUE: ::Array[String]
87
+
88
+ TRIGGER_TYPE: ::Array[String]
89
+
90
+ VOLUME_MODE: ::Array[String]
91
+ end
92
+ end
93
+ end