Class: Licensee::ProjectFiles::ProjectFile

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Includes:
HashHelper
Defined in:
lib/licensee/project_files/project_file.rb

Direct Known Subclasses

LicenseFile, PackageManagerFile

Constant Summary collapse

HASH_METHODS =
%i[
  filename content content_hash content_normalized matcher matched_license
].freeze
ENCODING =
Encoding::UTF_8
ENCODING_OPTIONS =
{
  invalid: :replace,
  undef:   :replace,
  replace: ''
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from HashHelper

#to_h

Constructor Details

#initialize(content, metadata = {}) ⇒ ProjectFile

Create a new Licensee::ProjectFile with content and metadata

content - file content metadata - can be either the string filename, or a hash containing

metadata about the file content. If a hash is given, the
filename should be given using the :name key. See individual
project types for additional available metadata

Returns a new Licensee::ProjectFile



34
35
36
37
38
39
40
41
42
43
# File 'lib/licensee/project_files/project_file.rb', line 34

def initialize(content,  = {})
  @content = content
  @content.force_encoding(ENCODING)
  unless @content.valid_encoding?
    @content.encode!(ENCODING, ENCODING_OPTIONS)
  end

   = { name:  } if .is_a? String
  @data =  || {}
end

Instance Attribute Details

#contentObject (readonly)

Returns the value of attribute content.



11
12
13
# File 'lib/licensee/project_files/project_file.rb', line 11

def content
  @content
end

Instance Method Details

#confidenceObject

Returns the percent confident with the match



72
73
74
# File 'lib/licensee/project_files/project_file.rb', line 72

def confidence
  matcher && matcher.confidence
end

#content_hashObject



95
96
97
# File 'lib/licensee/project_files/project_file.rb', line 95

def content_hash
  nil
end

#content_normalizedObject



99
100
101
# File 'lib/licensee/project_files/project_file.rb', line 99

def content_normalized
  nil
end

#copyright?Boolean

Is this file a COPYRIGHT file with only a copyright statement? If so, it can be excluded from determining if a project has >1 license

Returns:

  • (Boolean)


88
89
90
91
92
93
# File 'lib/licensee/project_files/project_file.rb', line 88

def copyright?
  return false unless is_a?(LicenseFile)
  return false unless matcher.is_a?(Matchers::Copyright)

  filename =~ /\Acopyright(?:#{LicenseFile::OTHER_EXT_REGEX})?\z/i
end

#directoryObject Also known as: dir



53
54
55
# File 'lib/licensee/project_files/project_file.rb', line 53

def directory
  @data[:dir] || '.'
end

#filenameObject Also known as: path

TODO: In the next major release, filename should be the basename and path should be either the absolute path or the relative path to the project root, but maintaining the alias for backward compatability



48
49
50
# File 'lib/licensee/project_files/project_file.rb', line 48

def filename
  @data[:name]
end

#licenseObject Also known as: match



76
77
78
# File 'lib/licensee/project_files/project_file.rb', line 76

def license
  matcher && matcher.match
end

#matched_licenseObject



82
83
84
# File 'lib/licensee/project_files/project_file.rb', line 82

def matched_license
  license.spdx_id if license
end

#matcherObject



67
68
69
# File 'lib/licensee/project_files/project_file.rb', line 67

def matcher
  @matcher ||= possible_matchers.map { |m| m.new(self) }.find(&:match)
end

#path_relative_to_rootObject Also known as: relative_path



58
59
60
# File 'lib/licensee/project_files/project_file.rb', line 58

def path_relative_to_root
  File.join(directory, filename)
end

#possible_matchersObject



63
64
65
# File 'lib/licensee/project_files/project_file.rb', line 63

def possible_matchers
  raise 'Not implemented'
end