Class: Licensee::Project::LicenseFile

Inherits:
File
  • Object
show all
Includes:
ContentHelper
Defined in:
lib/licensee/project_files/license_file.rb

Direct Known Subclasses

Readme

Constant Summary collapse

PREFERRED_EXT =

List of extensions to give preference to

%w(md markdown txt).freeze
PREFERRED_EXT_REGEX =
/\.#{Regexp.union(PREFERRED_EXT)}\z/
ANY_EXT_REGEX =

Regex to match any extension

%r{\.[^./]+\z}
LICENSE_REGEX =

Regex to match, LICENSE, LICENCE, unlicense, etc.

/(un)?licen[sc]e/i
COPYING_REGEX =

Regex to match COPYING, COPYRIGHT, etc.

/copy(ing|right)/i
FILENAME_REGEXES =

Hash of Regex => score with which to score potential license files

{
  /\A#{LICENSE_REGEX}\z/                       => 1.0, # LICENSE
  /\A#{LICENSE_REGEX}#{PREFERRED_EXT_REGEX}\z/ => 0.9, # LICENSE.md
  /\A#{COPYING_REGEX}\z/                       => 0.8, # COPYING
  /\A#{COPYING_REGEX}#{PREFERRED_EXT_REGEX}\z/ => 0.7, # COPYING.md
  /\A#{LICENSE_REGEX}#{ANY_EXT_REGEX}\z/       => 0.6, # LICENSE.textile
  /\A#{COPYING_REGEX}#{ANY_EXT_REGEX}\z/       => 0.5, # COPYING.textile
  /#{LICENSE_REGEX}/                           => 0.4, # LICENSE-MIT
  /#{COPYING_REGEX}/                           => 0.3, # COPYING-MIT
  //                                           => 0.0  # Catch all
}.freeze
CC_FALSE_POSITIVE_REGEX =

CC-NC and CC-ND are not open source licenses and should not be detected as CC-BY or CC-BY-SA which are 98%+ similar

/
  \A(creative\ commons\ )?Attribution-(NonCommercial|NoDerivatives)
/xi

Constants included from ContentHelper

ContentHelper::ALT_TITLE_REGEX, ContentHelper::DIGEST, ContentHelper::END_OF_TERMS_REGEX

Constants inherited from File

File::ENCODING, File::ENCODING_OPTIONS

Instance Attribute Summary

Attributes inherited from File

#content, #filename

Class Method Summary collapse

Instance Method Summary collapse

Methods included from ContentHelper

#content_normalized, #content_without_title_and_version, #hash, #length, #length_delta, #max_delta, #similarity, #wordset

Methods inherited from File

#confidence, #initialize, #license, #matcher

Constructor Details

This class inherits a constructor from Licensee::Project::File

Class Method Details

.lesser_gpl_score(filename) ⇒ Object

case-insensitive block to determine if the given file is LICENSE.lesser



60
61
62
# File 'lib/licensee/project_files/license_file.rb', line 60

def self.lesser_gpl_score(filename)
  filename.casecmp('copying.lesser').zero? ? 1 : 0
end

.name_score(filename) ⇒ Object



55
56
57
# File 'lib/licensee/project_files/license_file.rb', line 55

def self.name_score(filename)
  FILENAME_REGEXES.find { |regex, _| filename =~ regex }[1]
end

Instance Method Details

#attributionObject



42
43
44
45
46
47
48
# File 'lib/licensee/project_files/license_file.rb', line 42

def attribution
  @attribution ||= begin
    matches = Matchers::Copyright::REGEX
              .match(content_without_title_and_version)
    matches[0] if matches
  end
end

#possible_matchersObject



38
39
40
# File 'lib/licensee/project_files/license_file.rb', line 38

def possible_matchers
  [Matchers::Copyright, Matchers::Exact, Matchers::Dice]
end

#potential_false_positive?Boolean

Is this file likely to result in a creative commons false positive?

Returns:

  • (Boolean)


51
52
53
# File 'lib/licensee/project_files/license_file.rb', line 51

def potential_false_positive?
  content.strip =~ CC_FALSE_POSITIVE_REGEX
end