class Licensed::Sources::Source

Attributes

sources[R]
config[RW]

all sources have a configuration

Public Class Methods

full_type() click to toggle source

Returns the source name as a “/” delimited string of all the module and class names following “Licensed::Sources::”. This is the type that is used to distinguish multiple versions of a sources from each other. e.g. for ‘Licensed::Sources::Yarn::V1`, this returns `yarn/v1`

# File lib/licensed/sources/source.rb, line 39
def full_type
  type_and_version.join("/")
end
inherited(klass) click to toggle source
# File lib/licensed/sources/source.rb, line 16
def inherited(klass)
  # register the inherited class as a source on the Licensed::Sources::Source class
  Licensed::Sources::Source.register_source(klass)
end
new(configuration) click to toggle source
# File lib/licensed/sources/source.rb, line 65
def initialize(configuration)
  @config = configuration
end
register_source(klass) click to toggle source
# File lib/licensed/sources/source.rb, line 21
def register_source(klass)
  # add the source class to the known sources list
  return unless klass < Licensed::Sources::Source
  (@sources ||= []) << klass
end
require_matched_dependency_version() click to toggle source

Returns true if the source requires matching reviewed and ignored dependencies’ versions as well as their name

# File lib/licensed/sources/source.rb, line 57
def require_matched_dependency_version
  false
end
type() click to toggle source

Returns the source name as the first snake cased class or module name following “Licensed::Sources::”. This is the type that is included in metadata files and cache paths. e.g. for ‘Licensed::Sources::Yarn::V1`, this returns “yarn”

# File lib/licensed/sources/source.rb, line 31
def type
  type_and_version[0]
end
type_and_version() click to toggle source

Returns an array that includes the source’s type name at the first index, and optionally a version string for the source as the second index. Callers should override this function and not ‘type` or `full_type` when needing to adjust the default type and version parsing logic

# File lib/licensed/sources/source.rb, line 47
def type_and_version
  self.name.gsub("#{Licensed::Sources.name}::", "")
           .gsub(/([A-Z\d]+)([A-Z][a-z])/, "\\1_\\2".freeze)
           .gsub(/([a-z\d])([A-Z])/, "\\1_\\2".freeze)
           .downcase
           .split("::")
end

Public Instance Methods

dependencies() click to toggle source

Returns all dependencies that should be evaluated. Excludes ignored dependencies.

# File lib/licensed/sources/source.rb, line 77
def dependencies
  cached_dependencies
    .reject { |d| ignored?(d) }
    .each { |d| add_additional_terms_from_configuration(d) }
end
enabled?() click to toggle source

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

# File lib/licensed/sources/source.rb, line 71
def enabled?
  false
end
enumerate_dependencies() click to toggle source

Enumerate all source dependencies. Must be implemented by each source class.

# File lib/licensed/sources/source.rb, line 84
def enumerate_dependencies
  raise DependencyEnumerationNotImplementedError
end
ignored?(dependency) click to toggle source

Returns whether a dependency is ignored in the configuration.

# File lib/licensed/sources/source.rb, line 89
def ignored?(dependency)
  config.ignored?(dependency.metadata, require_version: self.class.require_matched_dependency_version)
end
source_config() click to toggle source

Returns configuration options set for the current source

# File lib/licensed/sources/source.rb, line 94
def source_config
  @source_config ||= config[self.class.type].is_a?(Hash) ? config[self.class.type] : {}
end

Private Instance Methods

add_additional_terms_from_configuration(dependency) click to toggle source

Add any additional_terms for this dependency that have been added to the configuration

# File lib/licensed/sources/source.rb, line 106
def add_additional_terms_from_configuration(dependency)
  dependency.additional_terms.concat config.additional_terms_for_dependency("type" => self.class.type, "name" => dependency.name)
end
cached_dependencies() click to toggle source

Returns a cached list of dependencies

# File lib/licensed/sources/source.rb, line 101
def cached_dependencies
  @dependencies ||= enumerate_dependencies.compact
end