Sha256: de302d8fdedc8bb1610c5cd8707fccfde9d3d41fc5c708eb772265004f4058d3

Contents?: true

Size: 1.5 KB

Versions: 5

Compression:

Stored size: 1.5 KB

Contents

# frozen_string_literal: true

module Licensee
  module Matchers
    class Gemspec < Licensee::Matchers::Package
      # a value is a string surrounded by any amount of whitespace
      # optionally ended with (non-captured) ".freeze"
      VALUE_REGEX = /\s*[\'\"]([a-z\-0-9\.]+)[\'\"](?:\.freeze)?\s*/i.freeze

      # an array contains one or more values. all values, or array itself,
      # can be surrounded by any amount of whitespace.  do not capture
      # non-value groups
      ARRAY_REGEX = /\s*\[#{VALUE_REGEX}(?:,#{VALUE_REGEX})*\]\s*/i.freeze

      DECLARATION_REGEX = /
        ^\s*[a-z0-9_]+\.([a-z0-9_]+)\s*\=#{VALUE_REGEX}$
      /ix.freeze

      LICENSE_REGEX = /
        ^\s*[a-z0-9_]+\.license\s*\=#{VALUE_REGEX}$
      /ix.freeze

      LICENSE_ARRAY_REGEX = /
        ^\s*[a-z0-9_]+\.licenses\s*\=#{ARRAY_REGEX}$
      /ix.freeze

      private

      def license_property
        match = @file.content.match LICENSE_REGEX
        return match[1].downcase if match && match[1]

        # check for a licenses array property
        licenses = license_array_property
        return unless licenses

        # use 'other' if array contains multiple licenses
        return 'other' unless licenses.size == 1

        licenses[0]
      end

      def license_array_property
        match = @file.content.match LICENSE_ARRAY_REGEX
        match.captures.compact.map(&:downcase) if match
      end

      def declarations
        @declarations ||= @file.content.match DECLARATION_REGEX
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
licensee-9.14.0 lib/licensee/matchers/gemspec.rb
licensee-9.13.2 lib/licensee/matchers/gemspec.rb
licensee-9.13.1 lib/licensee/matchers/gemspec.rb
licensee-9.13.0 lib/licensee/matchers/gemspec.rb
licensee-9.12.0 lib/licensee/matchers/gemspec.rb