Sha256: cdbd5f8227fff0ea4435c8fe817dd1670db55c533e6809784a17b121380e62ba

Contents?: true

Size: 1.67 KB

Versions: 3

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

require 'json'
require 'open-uri'

module Appraisal
  module Matrix
    class RubygemsHelper
      class << self
        # Returns a set of versions to test against for a given gem.
        #
        # @param gem_name [String, Symbol] The name of the gem.
        # @param version_requirement [Gem::Requirement] The version requirement for the gem.
        # @param step [Symbol] The step value.
        #
        # @return [Set] A set of versions to test against.
        def versions_to_test(gem_name, version_requirement, step)
          # Generate a set to store the versions to test against 
          versions_to_test = Set.new

          # Load versions from rubygems api
          URI.parse("https://rubygems.org/api/v1/versions/#{gem_name}.json").open do |raw_version_data|
            JSON.parse(raw_version_data.read).each do |version_data|
              version = Gem::Version.new(version_data['number'])
              versions_to_test << version_for_step(version, step) if include_version?(version, version_requirement)
            end
          end

          versions_to_test
        end

        private

        SEGMENT_STEP_SIZES = {
          major: 1,
          minor: 2,
          patch: 3
        }.freeze

        def version_for_step(version, step)
          size_for_step = SEGMENT_STEP_SIZES[step] or raise ArgumentError, "unsupported requested version step: #{step}, expected #{SEGMENT_STEP_SIZES.keys}"
          version.segments.first(size_for_step).join(".")
        end

        def include_version?(version, version_requirement)
          !version.prerelease? && version_requirement.satisfied_by?(version)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
appraisal-matrix-0.3.0 lib/appraisal/matrix/rubygems_helper.rb
appraisal-matrix-0.3.0.pre.tstarck.1 lib/appraisal/matrix/rubygems_helper.rb
appraisal-matrix-0.2.0 lib/appraisal/matrix/rubygems_helper.rb