Merge pull request #8859 from reitermarkus/macos-version
Refactor `OS::Mac::Version`.
This commit is contained in:
		
						commit
						ccb271bee4
					
				@ -63,8 +63,8 @@ module Cask
 | 
				
			|||||||
          else
 | 
					          else
 | 
				
			||||||
            MacOSRequirement.new([args.first], comparator: "==")
 | 
					            MacOSRequirement.new([args.first], comparator: "==")
 | 
				
			||||||
          end
 | 
					          end
 | 
				
			||||||
        rescue MacOSVersionError
 | 
					        rescue MacOSVersionError => e
 | 
				
			||||||
          raise "invalid 'depends_on macos' value: #{args.first.inspect}"
 | 
					          raise "invalid 'depends_on macos' value: #{e}"
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,7 @@ module OS
 | 
				
			|||||||
      attr_reader :version, :path, :source
 | 
					      attr_reader :version, :path, :source
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def initialize(version, path, source)
 | 
					      def initialize(version, path, source)
 | 
				
			||||||
        @version = OS::Mac::Version.new version
 | 
					        @version = version
 | 
				
			||||||
        @path = Pathname.new(path)
 | 
					        @path = Pathname.new(path)
 | 
				
			||||||
        @source = source
 | 
					        @source = source
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
@ -33,7 +33,7 @@ module OS
 | 
				
			|||||||
      def latest_sdk
 | 
					      def latest_sdk
 | 
				
			||||||
        return if sdk_paths.empty?
 | 
					        return if sdk_paths.empty?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        v, path = sdk_paths.max { |a, b| OS::Mac::Version.new(a[0]) <=> OS::Mac::Version.new(b[0]) }
 | 
					        v, path = sdk_paths.max(&:first)
 | 
				
			||||||
        SDK.new v, path, source
 | 
					        SDK.new v, path, source
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -77,7 +77,7 @@ module OS
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            Dir[File.join(sdk_prefix, "MacOSX*.sdk")].each do |sdk_path|
 | 
					            Dir[File.join(sdk_prefix, "MacOSX*.sdk")].each do |sdk_path|
 | 
				
			||||||
              version = sdk_path[/MacOSX(\d+\.\d+)u?\.sdk$/, 1]
 | 
					              version = sdk_path[/MacOSX(\d+\.\d+)u?\.sdk$/, 1]
 | 
				
			||||||
              paths[version] = sdk_path unless version.nil?
 | 
					              paths[OS::Mac::Version.new(version)] = sdk_path unless version.nil?
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            paths
 | 
					            paths
 | 
				
			||||||
 | 
				
			|||||||
@ -24,15 +24,18 @@ module OS
 | 
				
			|||||||
        new(str)
 | 
					        new(str)
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def initialize(*args)
 | 
					      def initialize(value)
 | 
				
			||||||
        super
 | 
					        super(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        raise MacOSVersionError, value unless value.match?(/\A1\d+(?:\.\d+){0,2}\Z/)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        @comparison_cache = {}
 | 
					        @comparison_cache = {}
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      def <=>(other)
 | 
					      def <=>(other)
 | 
				
			||||||
        @comparison_cache.fetch(other) do
 | 
					        @comparison_cache.fetch(other) do
 | 
				
			||||||
          v = SYMBOLS.fetch(other) { other.to_s }
 | 
					          v = SYMBOLS.fetch(other) { other.to_s }
 | 
				
			||||||
          @comparison_cache[other] = super(Version.new(v))
 | 
					          @comparison_cache[other] = super(::Version.new(v))
 | 
				
			||||||
        end
 | 
					        end
 | 
				
			||||||
      end
 | 
					      end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,10 +7,8 @@ describe SoftwareSpec do
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  describe "#uses_from_macos" do
 | 
					  describe "#uses_from_macos" do
 | 
				
			||||||
    before do
 | 
					    before do
 | 
				
			||||||
      sierra_os_version = OS::Mac::Version.from_symbol(:sierra)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
      allow(OS).to receive(:mac?).and_return(true)
 | 
					      allow(OS).to receive(:mac?).and_return(true)
 | 
				
			||||||
      allow(OS::Mac).to receive(:version).and_return(OS::Mac::Version.new(sierra_os_version))
 | 
					      allow(OS::Mac).to receive(:version).and_return(OS::Mac::Version.from_symbol(:sierra))
 | 
				
			||||||
    end
 | 
					    end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    it "adds a macOS dependency if the OS version meets requirements" do
 | 
					    it "adds a macOS dependency if the OS version meets requirements" do
 | 
				
			||||||
 | 
				
			|||||||
@ -4,41 +4,49 @@ require "version"
 | 
				
			|||||||
require "os/mac/version"
 | 
					require "os/mac/version"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe OS::Mac::Version do
 | 
					describe OS::Mac::Version do
 | 
				
			||||||
  subject { described_class.new("10.14") }
 | 
					  subject(:version) { described_class.new("10.14") }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  specify "comparison with Symbol" do
 | 
					  specify "comparison with Symbol" do
 | 
				
			||||||
    expect(subject).to be > :high_sierra
 | 
					    expect(version).to be > :high_sierra
 | 
				
			||||||
    expect(subject).to be == :mojave
 | 
					    expect(version).to be == :mojave
 | 
				
			||||||
    expect(subject).to be === :mojave # rubocop:disable Style/CaseEquality
 | 
					    expect(version).to be === :mojave # rubocop:disable Style/CaseEquality
 | 
				
			||||||
    expect(subject).to be < :catalina
 | 
					    expect(version).to be < :catalina
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  specify "comparison with Fixnum" do
 | 
					  specify "comparison with Fixnum" do
 | 
				
			||||||
    expect(subject).to be > 10
 | 
					    expect(version).to be > 10
 | 
				
			||||||
    expect(subject).to be < 11
 | 
					    expect(version).to be < 11
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  specify "comparison with Float" do
 | 
					  specify "comparison with Float" do
 | 
				
			||||||
    expect(subject).to be > 10.13
 | 
					    expect(version).to be > 10.13
 | 
				
			||||||
    expect(subject).to be < 10.15
 | 
					    expect(version).to be < 10.15
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  specify "comparison with String" do
 | 
					  specify "comparison with String" do
 | 
				
			||||||
    expect(subject).to be > "10.3"
 | 
					    expect(version).to be > "10.3"
 | 
				
			||||||
    expect(subject).to be == "10.14"
 | 
					    expect(version).to be == "10.14"
 | 
				
			||||||
    expect(subject).to be === "10.14" # rubocop:disable Style/CaseEquality
 | 
					    expect(version).to be === "10.14" # rubocop:disable Style/CaseEquality
 | 
				
			||||||
    expect(subject).to be < "10.15"
 | 
					    expect(version).to be < "10.15"
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  specify "comparison with Version" do
 | 
					  specify "comparison with Version" do
 | 
				
			||||||
    expect(subject).to be > Version.create("10.3")
 | 
					    expect(version).to be > Version.create("10.3")
 | 
				
			||||||
    expect(subject).to be == Version.create("10.14")
 | 
					    expect(version).to be == Version.create("10.14")
 | 
				
			||||||
    expect(subject).to be === Version.create("10.14") # rubocop:disable Style/CaseEquality
 | 
					    expect(version).to be === Version.create("10.14") # rubocop:disable Style/CaseEquality
 | 
				
			||||||
    expect(subject).to be < Version.create("10.15")
 | 
					    expect(version).to be < Version.create("10.15")
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe "#new" do
 | 
				
			||||||
 | 
					    it "raises an error if the version is not a valid macOS version" do
 | 
				
			||||||
 | 
					      expect {
 | 
				
			||||||
 | 
					        described_class.new("1.2")
 | 
				
			||||||
 | 
					      }.to raise_error(MacOSVersionError, 'unknown or unsupported macOS version: "1.2"')
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  specify "#from_symbol" do
 | 
					  specify "#from_symbol" do
 | 
				
			||||||
    expect(described_class.from_symbol(:mojave)).to eq(subject)
 | 
					    expect(described_class.from_symbol(:mojave)).to eq(version)
 | 
				
			||||||
    expect { described_class.from_symbol(:foo) }
 | 
					    expect { described_class.from_symbol(:foo) }
 | 
				
			||||||
      .to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :foo")
 | 
					      .to raise_error(MacOSVersionError, "unknown or unsupported macOS version: :foo")
 | 
				
			||||||
  end
 | 
					  end
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user