File: version_checker.rb

package info (click to toggle)
ruby-rspec 3.4.0c3e0m1s1-1~bpo8%2B1
  • links: PTS, VCS
  • area: main
  • in suites: jessie-backports
  • size: 6,124 kB
  • sloc: ruby: 59,418; sh: 1,405; makefile: 98
file content (53 lines) | stat: -rw-r--r-- 1,381 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
module RSpec
  module Support
    LibraryVersionTooLowError = Class.new(StandardError)

    # @private
    class VersionChecker
      def initialize(library_name, library_version, min_patch_level)
        @library_name, @library_version = library_name, library_version
        @min_patch_level = min_patch_level

        @major,     @minor,     @patch     = parse_version(library_version)
        @min_major, @min_minor, @min_patch = parse_version(min_patch_level)

        @comparison_result = compare_version
      end

      def check_version!
        raise_too_low_error if too_low?
      end

    private

      def too_low?
        @comparison_result == :too_low
      end

      def raise_too_low_error
        raise LibraryVersionTooLowError,
              "You are using #{@library_name} #{@library_version}. " \
              "RSpec requires version #{version_requirement}."
      end

      def compare_version
        case
        when @major < @min_major then :too_low
        when @major > @min_major then :ok
        when @minor < @min_minor then :too_low
        when @minor > @min_minor then :ok
        when @patch < @min_patch then :too_low
        else :ok
        end
      end

      def version_requirement
        ">= #{@min_patch_level}"
      end

      def parse_version(version)
        version.split('.').map { |v| v.to_i }
      end
    end
  end
end