Sha256: da9f8883c5ab5de6f8add57fe03b1875491b0c3424537e718f7ffcd2391bcb62

Contents?: true

Size: 1.3 KB

Versions: 7

Compression:

Stored size: 1.3 KB

Contents

# frozen_string_literal: true

module Spandx
  module Spdx
    class Catalogue
      include Enumerable

      def initialize(catalogue = {})
        @catalogue = catalogue
      end

      def [](id)
        identity_map[id]
      end

      def version
        catalogue[:licenseListVersion]
      end

      def each
        licenses.each do |license|
          yield license
        end
      end

      class << self
        def latest(gateway: ::Spandx::Spdx::Gateway.new)
          new(gateway.fetch)
        end

        def from_json(json)
          new(JSON.parse(json, symbolize_names: true))
        end

        def from_file(path)
          from_json(IO.read(path))
        end

        def from_git
          from_json(Spandx.spdx_db.read('json/licenses.json'))
        end

        def empty
          @empty ||= new(licenses: [])
        end
      end

      private

      attr_reader :catalogue

      def licenses
        @licenses ||= identity_map.values.sort
      end

      def present?(item)
        item && !item.empty?
      end

      def identity_map
        @identity_map ||=
          catalogue.fetch(:licenses, []).each_with_object({}) do |hash, memo|
            license = License.new(hash)
            memo[license.id] = license if present?(license.id)
          end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
spandx-0.11.0 lib/spandx/spdx/catalogue.rb
spandx-0.10.1 lib/spandx/spdx/catalogue.rb
spandx-0.10.0 lib/spandx/spdx/catalogue.rb
spandx-0.9.0 lib/spandx/spdx/catalogue.rb
spandx-0.8.0 lib/spandx/spdx/catalogue.rb
spandx-0.7.0 lib/spandx/spdx/catalogue.rb
spandx-0.6.0 lib/spandx/spdx/catalogue.rb