def parse(location): """ Return a Package object from a .podspec file or None. """ if not is_podspec(location): return podspec_object = Spec() podspec_data = podspec_object.parse_spec(location) return build_package(podspec_data)
def build_packages_from_gemspec(location): """ Return RubyGem Package from gemspec file. """ gemspec_object = Spec() gemspec_data = gemspec_object.parse_spec(location) name = gemspec_data.get('name') version = gemspec_data.get('version') homepage_url = gemspec_data.get('homepage_url') summary = gemspec_data.get('summary') description = gemspec_data.get('description') if len(summary) > len(description): description = summary declared_license = gemspec_data.get('license') if declared_license: declared_license = declared_license.split(',') author = gemspec_data.get('author') or [] email = gemspec_data.get('email') or [] parties = list(party_mapper(author, email)) package = RubyGem( name=name, version=version, parties=parties, homepage_url=homepage_url, description=description, declared_license=declared_license ) dependencies = gemspec_data.get('dependencies', {}) or {} package_dependencies = [] for name, version in dependencies.items(): package_dependencies.append( models.DependentPackage( purl=PackageURL( type='gem', name=name ).to_string(), requirement=', '.join(version), scope='dependencies', is_runtime=True, is_optional=False, is_resolved=False, ) ) package.dependencies = package_dependencies return package
def recognize(cls, location): """ Yield one or more Package manifest objects given a file ``location`` pointing to a package archive, manifest or similar. """ gemspec_object = Spec() gemspec_data = gemspec_object.parse_spec(location) name = gemspec_data.get('name') version = gemspec_data.get('version') homepage_url = gemspec_data.get('homepage_url') summary = gemspec_data.get('summary') description = gemspec_data.get('description') if len(summary) > len(description): description = summary declared_license = gemspec_data.get('license') if declared_license: declared_license = declared_license.split(',') author = gemspec_data.get('author') or [] email = gemspec_data.get('email') or [] parties = list(party_mapper(author, email)) package_manifest = cls(name=name, version=version, parties=parties, homepage_url=homepage_url, description=description, declared_license=declared_license) dependencies = gemspec_data.get('dependencies', {}) or {} package_dependencies = [] for name, version in dependencies.items(): package_dependencies.append( models.DependentPackage( purl=PackageURL(type='gem', name=name).to_string(), requirement=', '.join(version), scope='dependencies', is_runtime=True, is_optional=False, is_resolved=False, )) package_manifest.dependencies = package_dependencies yield package_manifest
def recognize(cls, location): """ Yield one or more Package manifest objects given a file ``location`` pointing to a package archive, manifest or similar. """ podspec_object = Spec() data = podspec_object.parse_spec(location) name = data.get('name') version = data.get('version') declared_license = data.get('license') summary = data.get('summary', '') description = data.get('description', '') homepage_url = data.get('homepage_url') source = data.get('source') authors = data.get('author') or [] if summary and not description.startswith(summary): desc = [summary] if description: desc += [description] description = '\n'.join(desc) author_names = [] author_email = [] if authors: for split_author in authors: split_author = split_author.strip() author, email = parse_person(split_author) author_names.append(author) author_email.append(email) parties = list(party_mapper(author_names, author_email)) yield cls( name=name, version=version, vcs_url=source, source_packages=list(source.split('\n')), description=description, declared_license=declared_license, homepage_url=homepage_url, parties=parties )
def parse(location): """ Return a Package object from: 1. `.podspec` files 2. `.podspec.json` files 3. `podfile.lock` files or returns None otherwise. """ if is_podspec(location): podspec_object = Spec() podspec_data = podspec_object.parse_spec(location) return build_package(podspec_data) if is_podspec_json(location): podspec_json_data = read_podspec_json(location) return build_xcode_package(podspec_json_data) if is_podfile_lock(location): podfile_lock_data = read_podfile_lock(location) return build_xcode_package_from_lockfile(podfile_lock_data)