Sha256: 665893c50f5de6380ef0e42d72b081619043ea0f263be250b5af736ed6f2669b

Contents?: true

Size: 1.79 KB

Versions: 1

Compression:

Stored size: 1.79 KB

Contents

require 'rubygems/comparator/base'

class Gem::Comparator

  ##
  # Gem::Comparator::SpecComparator can
  # compare values from the gem verions specs
  
  class SpecComparator
    include Gem::Comparator::Base

    COMPARES = :specs

    ##
    # Compare common fields in spec

    def compare(specs, report, options = {})
      info 'Checking spec parameters...'

      filter_params(SPEC_PARAMS, options[:param]).each do |param|
        values = values_from_specs(param, specs)

        # Are values the same?
        if same_values?(values) && options[:log_all]
          v = value(values[0]) 
          report[param].section do
            set_header "#{same} #{param}:"
	        puts v
          end
        elsif !same_values?(values)
          report[param].set_header "#{different} #{param}:"
          values.each_with_index do |value, index|
            report[param] << \
              "#{Rainbow(specs[index].version).blue}: #{value}"
          end
        end
      end
      report
    end

    private

      def values_from_specs(param, specs)
        values = []
        specs.each do |s|
          if s.respond_to? :"#{param}"
            values << s.send(:"#{param}")
          else
            warn "#{s.full_name} does not respond to " +
                 "#{param}, skipping check"
          end
        end
        values
      end

      def value(value)
        case value
        when Gem::Requirement
          unless value.requirements.empty?
            r = value.requirements[0]
            "#{r[0]} #{r[1].version} " 
          else
            '[]'
          end
        when String
          return value unless value.empty?
          ''
        else
          value.inspect
        end
      end

      def same_values?(values)
        values.count(values[0]) == values.size
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
gem-compare-0.0.2 lib/rubygems/comparator/spec_comparator.rb