Sha256: 0133987f805dc8c462f36ca9f84a28189ec94686fe3f8d7d8efcb7d1d8f97b56

Contents?: true

Size: 1.88 KB

Versions: 41

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

module Licensed
  module Sources
    class Source
      class DependencyEnumerationNotImplementedError < StandardError
        def initialize(message = "Source classes must implemented `enumerate_dependencies`")
          super
        end
      end

      class Error < StandardError; end

      class << self
        attr_reader :sources
        def inherited(klass)
          # add child source classes are defined,
          # add them to the known sources list
          (@sources ||= []) << klass
        end

        # Returns the source name as the snake cased class name
        def type
          self.name.split(/::/)
                   .last
                   .gsub(/([A-Z\d]+)([A-Z][a-z])/, "\\1_\\2".freeze)
                   .gsub(/([a-z\d])([A-Z])/, "\\1_\\2".freeze)
                   .downcase
        end
      end

      # all sources have a configuration
      attr_accessor :config

      def initialize(configuration)
        @config = configuration
      end

      # Returns whether a source is enabled based on the environment in which licensed is run
      # Defaults to false.
      def enabled?
        false
      end

      # Returns all dependencies that should be evaluated.
      # Excludes ignored dependencies.
      def dependencies
        cached_dependencies.reject { |d| ignored?(d) }
      end

      # Enumerate all source dependencies.  Must be implemented by each source class.
      def enumerate_dependencies
        raise DependencyEnumerationNotImplementedError
      end

      # Returns whether a dependency is ignored in the configuration.
      def ignored?(dependency)
        config.ignored?("type" => self.class.type, "name" => dependency.name)
      end

      private

      # Returns a cached list of dependencies
      def cached_dependencies
        @dependencies ||= enumerate_dependencies.compact
      end
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
licensed-3.3.1 lib/licensed/sources/source.rb
licensed-3.3.0 lib/licensed/sources/source.rb
licensed-3.2.3 lib/licensed/sources/source.rb
licensed-3.2.2 lib/licensed/sources/source.rb
licensed-3.2.1 lib/licensed/sources/source.rb
licensed-3.2.0 lib/licensed/sources/source.rb
licensed-3.1.0 lib/licensed/sources/source.rb
licensed-3.0.1 lib/licensed/sources/source.rb
licensed-3.0.0 lib/licensed/sources/source.rb
licensed-2.15.2 lib/licensed/sources/source.rb
licensed-2.15.1 lib/licensed/sources/source.rb
licensed-2.15.0 lib/licensed/sources/source.rb
licensed-2.14.4 lib/licensed/sources/source.rb
licensed-2.14.3 lib/licensed/sources/source.rb
licensed-2.14.2 lib/licensed/sources/source.rb
licensed-2.14.1 lib/licensed/sources/source.rb
licensed-2.14.0 lib/licensed/sources/source.rb
licensed-2.13.0 lib/licensed/sources/source.rb
licensed-2.12.2 lib/licensed/sources/source.rb
licensed-2.12.1 lib/licensed/sources/source.rb