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