Return a PackageData for ``datasource_id`` built from a Gem `gem_data` mapping or None. The ``gem_data`` can come from a .gemspec or .gem/metadata. Optionally use the provided ``download_url`` and `package_url`` strings.
(gem_data, datasource_id, package_only=False)
| 423 | |
| 424 | |
| 425 | def build_rubygem_package_data(gem_data, datasource_id, package_only=False): |
| 426 | """ |
| 427 | Return a PackageData for ``datasource_id`` built from a Gem `gem_data` |
| 428 | mapping or None. The ``gem_data`` can come from a .gemspec or .gem/metadata. |
| 429 | Optionally use the provided ``download_url`` and `package_url`` strings. |
| 430 | """ |
| 431 | if not gem_data: |
| 432 | return |
| 433 | |
| 434 | metadata = gem_data.get('metadata') or {} |
| 435 | |
| 436 | name = gem_data.get('name') |
| 437 | # there are two levels of nesting for version: |
| 438 | version1 = gem_data.get('version') or {} |
| 439 | version = version1.get('version') or None |
| 440 | |
| 441 | platform = gem_data.get('platform') |
| 442 | if platform != 'ruby': |
| 443 | qualifiers = dict(platform=platform) |
| 444 | else: |
| 445 | qualifiers = {} |
| 446 | |
| 447 | description = build_description( |
| 448 | summary=gem_data.get('summary'), |
| 449 | description=gem_data.get('description'), |
| 450 | ) |
| 451 | |
| 452 | # Since the gem spec doc is not clear wrt. to the default being OR or AND |
| 453 | # we will treat a list of licenses and a conjunction for now (e.g. AND) |
| 454 | # See https://guides.rubygems.org/specification-reference/#licenseo |
| 455 | lic = gem_data.get('license') |
| 456 | licenses = gem_data.get('licenses') |
| 457 | extracted_license_statement = licenses_mapper(lic, licenses) |
| 458 | |
| 459 | # we may have tow homepages and one may be wrong. |
| 460 | # we prefer the one from the metadata |
| 461 | homepage_url = metadata.get('homepage_uri') |
| 462 | if not homepage_url: |
| 463 | homepage_url = gem_data.get('homepage') |
| 464 | |
| 465 | urls = get_urls(name, version, platform) |
| 466 | dependencies = get_dependencies(gem_data.get('dependencies')) |
| 467 | file_references = get_file_references(metadata.get('files')) |
| 468 | |
| 469 | package_mapping = dict( |
| 470 | datasource_id=datasource_id, |
| 471 | type=GemArchiveHandler.default_package_type, |
| 472 | primary_language=GemArchiveHandler.default_primary_language, |
| 473 | name=name, |
| 474 | version=version, |
| 475 | qualifiers=qualifiers, |
| 476 | description=description, |
| 477 | homepage_url=homepage_url, |
| 478 | extracted_license_statement=extracted_license_statement, |
| 479 | bug_tracking_url=metadata.get('bug_tracking_uri'), |
| 480 | code_view_url=metadata.get('source_code_uri'), |
| 481 | file_references=file_references, |
| 482 | dependencies=dependencies, |
no test coverage detected