Class: Gem::Licenses

Inherits:
Object show all
Extended by:
Text
Defined in:
lib/rubygems/util/licenses.rb

Constant Summary collapse

NONSTANDARD =
'Nonstandard'.freeze
LICENSE_IDENTIFIERS =

Software Package Data Exchange (SPDX) standard open-source software license identifiers

%w[
  0BSD
  AAL
  ADSL
  AFL-1.1
  AFL-1.2
  AFL-2.0
  AFL-2.1
  AFL-3.0
  AGPL-1.0
  AGPL-1.0-only
  AGPL-1.0-or-later
  AGPL-3.0
  AGPL-3.0-only
  AGPL-3.0-or-later
  AMDPLPA
  AML
  AMPAS
  ANTLR-PD
  ANTLR-PD-fallback
  APAFML
  APL-1.0
  APSL-1.0
  APSL-1.1
  APSL-1.2
  APSL-2.0
  Abstyles
  Adobe-2006
  Adobe-Glyph
  Afmparse
  Aladdin
  Apache-1.0
  Apache-1.1
  Apache-2.0
  Artistic-1.0
  Artistic-1.0-Perl
  Artistic-1.0-cl8
  Artistic-2.0
  BSD-1-Clause
  BSD-2-Clause
  BSD-2-Clause-FreeBSD
  BSD-2-Clause-NetBSD
  BSD-2-Clause-Patent
  BSD-2-Clause-Views
  BSD-3-Clause
  BSD-3-Clause-Attribution
  BSD-3-Clause-Clear
  BSD-3-Clause-LBNL
  BSD-3-Clause-Modification
  BSD-3-Clause-No-Military-License
  BSD-3-Clause-No-Nuclear-License
  BSD-3-Clause-No-Nuclear-License-2014
  BSD-3-Clause-No-Nuclear-Warranty
  BSD-3-Clause-Open-MPI
  BSD-4-Clause
  BSD-4-Clause-Shortened
  BSD-4-Clause-UC
  BSD-Protection
  BSD-Source-Code
  BSL-1.0
  BUSL-1.1
  Bahyph
  Barr
  Beerware
  BitTorrent-1.0
  BitTorrent-1.1
  BlueOak-1.0.0
  Borceux
  C-UDA-1.0
  CAL-1.0
  CAL-1.0-Combined-Work-Exception
  CATOSL-1.1
  CC-BY-1.0
  CC-BY-2.0
  CC-BY-2.5
  CC-BY-3.0
  CC-BY-3.0-AT
  CC-BY-3.0-US
  CC-BY-4.0
  CC-BY-NC-1.0
  CC-BY-NC-2.0
  CC-BY-NC-2.5
  CC-BY-NC-3.0
  CC-BY-NC-4.0
  CC-BY-NC-ND-1.0
  CC-BY-NC-ND-2.0
  CC-BY-NC-ND-2.5
  CC-BY-NC-ND-3.0
  CC-BY-NC-ND-3.0-IGO
  CC-BY-NC-ND-4.0
  CC-BY-NC-SA-1.0
  CC-BY-NC-SA-2.0
  CC-BY-NC-SA-2.5
  CC-BY-NC-SA-3.0
  CC-BY-NC-SA-4.0
  CC-BY-ND-1.0
  CC-BY-ND-2.0
  CC-BY-ND-2.5
  CC-BY-ND-3.0
  CC-BY-ND-4.0
  CC-BY-SA-1.0
  CC-BY-SA-2.0
  CC-BY-SA-2.0-UK
  CC-BY-SA-2.1-JP
  CC-BY-SA-2.5
  CC-BY-SA-3.0
  CC-BY-SA-3.0-AT
  CC-BY-SA-4.0
  CC-PDDC
  CC0-1.0
  CDDL-1.0
  CDDL-1.1
  CDL-1.0
  CDLA-Permissive-1.0
  CDLA-Sharing-1.0
  CECILL-1.0
  CECILL-1.1
  CECILL-2.0
  CECILL-2.1
  CECILL-B
  CECILL-C
  CERN-OHL-1.1
  CERN-OHL-1.2
  CERN-OHL-P-2.0
  CERN-OHL-S-2.0
  CERN-OHL-W-2.0
  CNRI-Jython
  CNRI-Python
  CNRI-Python-GPL-Compatible
  CPAL-1.0
  CPL-1.0
  CPOL-1.02
  CUA-OPL-1.0
  Caldera
  ClArtistic
  Condor-1.1
  Crossword
  CrystalStacker
  Cube
  D-FSL-1.0
  DOC
  DRL-1.0
  DSDP
  Dotseqn
  ECL-1.0
  ECL-2.0
  EFL-1.0
  EFL-2.0
  EPICS
  EPL-1.0
  EPL-2.0
  EUDatagrid
  EUPL-1.0
  EUPL-1.1
  EUPL-1.2
  Entessa
  ErlPL-1.1
  Eurosym
  FSFAP
  FSFUL
  FSFULLR
  FTL
  Fair
  Frameworx-1.0
  FreeBSD-DOC
  FreeImage
  GD
  GFDL-1.1
  GFDL-1.1-invariants-only
  GFDL-1.1-invariants-or-later
  GFDL-1.1-no-invariants-only
  GFDL-1.1-no-invariants-or-later
  GFDL-1.1-only
  GFDL-1.1-or-later
  GFDL-1.2
  GFDL-1.2-invariants-only
  GFDL-1.2-invariants-or-later
  GFDL-1.2-no-invariants-only
  GFDL-1.2-no-invariants-or-later
  GFDL-1.2-only
  GFDL-1.2-or-later
  GFDL-1.3
  GFDL-1.3-invariants-only
  GFDL-1.3-invariants-or-later
  GFDL-1.3-no-invariants-only
  GFDL-1.3-no-invariants-or-later
  GFDL-1.3-only
  GFDL-1.3-or-later
  GL2PS
  GLWTPL
  GPL-1.0
  GPL-1.0+
  GPL-1.0-only
  GPL-1.0-or-later
  GPL-2.0
  GPL-2.0+
  GPL-2.0-only
  GPL-2.0-or-later
  GPL-2.0-with-GCC-exception
  GPL-2.0-with-autoconf-exception
  GPL-2.0-with-bison-exception
  GPL-2.0-with-classpath-exception
  GPL-2.0-with-font-exception
  GPL-3.0
  GPL-3.0+
  GPL-3.0-only
  GPL-3.0-or-later
  GPL-3.0-with-GCC-exception
  GPL-3.0-with-autoconf-exception
  Giftware
  Glide
  Glulxe
  HPND
  HPND-sell-variant
  HTMLTIDY
  HaskellReport
  Hippocratic-2.1
  IBM-pibs
  ICU
  IJG
  IPA
  IPL-1.0
  ISC
  ImageMagick
  Imlib2
  Info-ZIP
  Intel
  Intel-ACPI
  Interbase-1.0
  JPNIC
  JSON
  JasPer-2.0
  LAL-1.2
  LAL-1.3
  LGPL-2.0
  LGPL-2.0+
  LGPL-2.0-only
  LGPL-2.0-or-later
  LGPL-2.1
  LGPL-2.1+
  LGPL-2.1-only
  LGPL-2.1-or-later
  LGPL-3.0
  LGPL-3.0+
  LGPL-3.0-only
  LGPL-3.0-or-later
  LGPLLR
  LPL-1.0
  LPL-1.02
  LPPL-1.0
  LPPL-1.1
  LPPL-1.2
  LPPL-1.3a
  LPPL-1.3c
  Latex2e
  Leptonica
  LiLiQ-P-1.1
  LiLiQ-R-1.1
  LiLiQ-Rplus-1.1
  Libpng
  Linux-OpenIB
  MIT
  MIT-0
  MIT-CMU
  MIT-Modern-Variant
  MIT-advertising
  MIT-enna
  MIT-feh
  MIT-open-group
  MITNFA
  MPL-1.0
  MPL-1.1
  MPL-2.0
  MPL-2.0-no-copyleft-exception
  MS-PL
  MS-RL
  MTLL
  MakeIndex
  MirOS
  Motosoto
  MulanPSL-1.0
  MulanPSL-2.0
  Multics
  Mup
  NAIST-2003
  NASA-1.3
  NBPL-1.0
  NCGL-UK-2.0
  NCSA
  NGPL
  NIST-PD
  NIST-PD-fallback
  NLOD-1.0
  NLPL
  NOSL
  NPL-1.0
  NPL-1.1
  NPOSL-3.0
  NRL
  NTP
  NTP-0
  Naumen
  Net-SNMP
  NetCDF
  Newsletr
  Nokia
  Noweb
  Nunit
  O-UDA-1.0
  OCCT-PL
  OCLC-2.0
  ODC-By-1.0
  ODbL-1.0
  OFL-1.0
  OFL-1.0-RFN
  OFL-1.0-no-RFN
  OFL-1.1
  OFL-1.1-RFN
  OFL-1.1-no-RFN
  OGC-1.0
  OGDL-Taiwan-1.0
  OGL-Canada-2.0
  OGL-UK-1.0
  OGL-UK-2.0
  OGL-UK-3.0
  OGTSL
  OLDAP-1.1
  OLDAP-1.2
  OLDAP-1.3
  OLDAP-1.4
  OLDAP-2.0
  OLDAP-2.0.1
  OLDAP-2.1
  OLDAP-2.2
  OLDAP-2.2.1
  OLDAP-2.2.2
  OLDAP-2.3
  OLDAP-2.4
  OLDAP-2.5
  OLDAP-2.6
  OLDAP-2.7
  OLDAP-2.8
  OML
  OPL-1.0
  OSET-PL-2.1
  OSL-1.0
  OSL-1.1
  OSL-2.0
  OSL-2.1
  OSL-3.0
  OpenSSL
  PDDL-1.0
  PHP-3.0
  PHP-3.01
  PSF-2.0
  Parity-6.0.0
  Parity-7.0.0
  Plexus
  PolyForm-Noncommercial-1.0.0
  PolyForm-Small-Business-1.0.0
  PostgreSQL
  Python-2.0
  QPL-1.0
  Qhull
  RHeCos-1.1
  RPL-1.1
  RPL-1.5
  RPSL-1.0
  RSA-MD
  RSCPL
  Rdisc
  Ruby
  SAX-PD
  SCEA
  SGI-B-1.0
  SGI-B-1.1
  SGI-B-2.0
  SHL-0.5
  SHL-0.51
  SISSL
  SISSL-1.2
  SMLNJ
  SMPPL
  SNIA
  SPL-1.0
  SSH-OpenSSH
  SSH-short
  SSPL-1.0
  SWL
  Saxpath
  Sendmail
  Sendmail-8.23
  SimPL-2.0
  Sleepycat
  Spencer-86
  Spencer-94
  Spencer-99
  StandardML-NJ
  SugarCRM-1.1.3
  TAPR-OHL-1.0
  TCL
  TCP-wrappers
  TMate
  TORQUE-1.1
  TOSL
  TU-Berlin-1.0
  TU-Berlin-2.0
  UCL-1.0
  UPL-1.0
  Unicode-DFS-2015
  Unicode-DFS-2016
  Unicode-TOU
  Unlicense
  VOSTROM
  VSL-1.0
  Vim
  W3C
  W3C-19980720
  W3C-20150513
  WTFPL
  Watcom-1.0
  Wsuipa
  X11
  XFree86-1.1
  XSkat
  Xerox
  Xnet
  YPL-1.0
  YPL-1.1
  ZPL-1.1
  ZPL-2.0
  ZPL-2.1
  Zed
  Zend-2.0
  Zimbra-1.3
  Zimbra-1.4
  Zlib
  blessing
  bzip2-1.0.5
  bzip2-1.0.6
  copyleft-next-0.3.0
  copyleft-next-0.3.1
  curl
  diffmark
  dvipdfm
  eCos-2.0
  eGenix
  etalab-2.0
  gSOAP-1.3b
  gnuplot
  iMatix
  libpng-2.0
  libselinux-1.0
  libtiff
  mpich2
  psfrag
  psutils
  wxWindows
  xinetd
  xpp
  zlib-acknowledgement
].freeze
EXCEPTION_IDENTIFIERS =

exception identifiers

%w[
  389-exception
  Autoconf-exception-2.0
  Autoconf-exception-3.0
  Bison-exception-2.2
  Bootloader-exception
  CLISP-exception-2.0
  Classpath-exception-2.0
  DigiRule-FOSS-exception
  FLTK-exception
  Fawkes-Runtime-exception
  Font-exception-2.0
  GCC-exception-2.0
  GCC-exception-3.1
  GPL-3.0-linking-exception
  GPL-3.0-linking-source-exception
  GPL-CC-1.0
  LGPL-3.0-linking-exception
  LLVM-exception
  LZMA-exception
  Libtool-exception
  Linux-syscall-note
  Nokia-Qt-exception-1.1
  OCCT-exception-1.0
  OCaml-LGPL-linking-exception
  OpenJDK-assembly-exception-1.0
  PS-or-PDF-font-exception-20170817
  Qt-GPL-exception-1.0
  Qt-LGPL-exception-1.1
  Qwt-exception-1.0
  SHL-2.0
  SHL-2.1
  Swift-exception
  Universal-FOSS-exception-1.0
  WxWindows-exception-3.1
  eCos-exception-2.0
  freertos-exception-2.0
  gnu-javamail-exception
  i2p-gpl-java-exception
  mif-exception
  openvpn-openssl-exception
  u-boot-exception-2.0
].freeze
REGEXP =
%r{
  \A
  (?:
    #{Regexp.union(LICENSE_IDENTIFIERS)}
    \+?
    (?:\s WITH \s #{Regexp.union(EXCEPTION_IDENTIFIERS)})?
    | #{NONSTANDARD}
  )
  \Z
}ox.freeze

Class Method Summary collapse

Methods included from Text

clean_text, format_text, levenshtein_distance, min3, truncate_text

Class Method Details

.match?(license) ⇒ Boolean

Returns:

  • (Boolean)


530
531
532
# File 'lib/rubygems/util/licenses.rb', line 530

def self.match?(license)
  !REGEXP.match(license).nil?
end

.suggestions(license) ⇒ Object



534
535
536
537
538
539
540
541
# File 'lib/rubygems/util/licenses.rb', line 534

def self.suggestions(license)
  by_distance = LICENSE_IDENTIFIERS.group_by do |identifier|
    levenshtein_distance(identifier, license)
  end
  lowest = by_distance.keys.min
  return unless lowest < license.size
  by_distance[lowest]
end