class Gemterms::Licensing

Constants

UNKNOWN_LICENSE_CODE

Attributes

licenses[R]
references[R]
unknown_license[R]

Public Class Methods

new(filename = nil) click to toggle source
# File lib/gemterms/license.rb, line 50
def initialize(filename = nil)
  filename ||= File.join(File.dirname(__FILE__), '..', '..', 'compatability.yml')
  load(filename)
end

Public Instance Methods

[](code) click to toggle source
# File lib/gemterms/license.rb, line 46
def[](code)
  licenses[code] || @unknown_license
end
inspect() click to toggle source
# File lib/gemterms/license.rb, line 55
def inspect
  "#<Licensing licence_count=#{@licenses.length}>"
end
rubygem_licenses(term_or_terms) click to toggle source

@param [ String, Array ] term_or_terms The terms provided in the license or licenses portion of the rubygem specification.

@return [ Array<License> ] The given licenses.

# File lib/gemterms/license.rb, line 63
def rubygem_licenses(term_or_terms)
  return [unknown_license] if term_or_terms == []      
  values = term_or_terms.respond_to?(:map) ? term_or_terms : [term_or_terms.to_s]
  values = values.map { |v| @rubygems[v.to_s] || "Unknown" }
  values.map { |v| self[v] }
end

Protected Instance Methods

load(filename) click to toggle source
# File lib/gemterms/license.rb, line 72
def load(filename)
  data = YAML.load(File.read(filename))["licenses"]
  
  @references = data.delete("references")
  @rubygems = data.delete("rubygems")

  @licenses = data.inject({}) { |memo,(code, element)| memo[code] = License.new(code, element); memo }
  @unknown_license = self[UNKNOWN_LICENSE_CODE]
  @unknown_license.unknown = true

  data.each do |code,element|
    target = self[code]
    element.each do |ref, value|
      next unless ref.to_s[0] =~ /[A-Z0-9]/
      names = value.respond_to?(:each) ? value : [value.to_s]
      compat = ref.to_i.to_s == ref.to_s
      names.each do |name|
        name.strip!
        warning = name[0] == "!"
        name = name[1..-1] if warning
        raise "Compatability file '#{filename}' lists a compatability with '#{UNKNOWN_LICENSE_CODE}'. This is not allowed." if name == UNKNOWN_LICENSE_CODE
        peer = @licenses[name]
        raise "Compatability file '#{filename}' references License coded '#{name}', but it is not specified elsewhere in the file." if peer.nil?

        if compat
          target.mark_compatible(peer, ref, warning)
        else
          target.mark_classified(peer, ref, warning)
        end
      end
    end
  end

end