Sha256: 0a3b106a50dfcfa4d24d61a4389e53c81d3a05059fd8ad68ce908d091e01a3ba

Contents?: true

Size: 1.71 KB

Versions: 3

Compression:

Stored size: 1.71 KB

Contents

# frozen_string_literal: true

require 'puppetfile-resolver/puppetfile/forge_module'

module PuppetfileResolver
  module Puppetfile
    module Parser
      module R10KEval
        module Module
          class Forge
            def self.implements?(name, args)
              !name.match(/\A(\w+)[-\/](\w+)\Z/).nil? && valid_version?(args)
            end

            def self.to_document_module(title, args)
              mod = ::PuppetfileResolver::Puppetfile::ForgeModule.new(title)
              mod.version = args if valid_version?(args)
              mod
            end

            def self.valid_version?(value)
              return false unless value.is_a?(String) || value.is_a?(Symbol)
              value == :latest || value.nil? || valid_version_string?(value)
            end
            private_class_method :valid_version?

            # Version string matching regexes
            # From Semantic Puppet gem
            REGEX_NUMERIC = '(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)' # Major . Minor . Patch
            REGEX_PRE     = '(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?' # Prerelease
            REGEX_BUILD   = '(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?' # Build
            REGEX_FULL    = REGEX_NUMERIC + REGEX_PRE + REGEX_BUILD.freeze
            REGEX_FULL_RX = /\A#{REGEX_FULL}\Z/.freeze

            def self.valid_version_string?(value)
              match = value.match(REGEX_FULL_RX)
              if match.nil?
                false
              else
                prerelease = match[4]
                prerelease.nil? || prerelease.split('.').all? { |x| x !~ /^0\d+$/ }
              end
            end
            private_class_method :valid_version_string?
          end
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
puppetfile-resolver-0.3.0 lib/puppetfile-resolver/puppetfile/parser/r10k_eval/module/forge.rb
puppetfile-resolver-0.2.0 lib/puppetfile-resolver/puppetfile/parser/r10k_eval/module/forge.rb
puppetfile-resolver-0.1.0 lib/puppetfile-resolver/puppetfile/parser/r10k_eval/module/forge.rb