cornelius/yes_ship_it

View on GitHub
assertions/version.rb

Summary

Maintainability
A
1 hr
Test Coverage
module YSI
  class Version < Assertion
    parameter :version_file, "lib/version.rb"

    def self.display_name
      "version number"
    end

    def check
      if !File.exist?(version_file)
        raise AssertionError.new("Expected version in #{version_file}")
      end

      version = parse_version(version_file)
      if version
        @engine.version = version
        return @engine.version
      end
      raise AssertionError.new("Couldn't find version in #{version_file}")
    end

    def assert(_executor)
    end

    def parse_version(file_name)
      if file_name =~ /\.rb$/
        File.read(file_name).each_line do |line|
          if line =~ /VERSION = ['"](.*)['"]/
            return $1
          end
        end
      elsif file_name =~ /\.go$/
        File.read(file_name).each_line do |line|
          if line =~ /Version = "(.*)"/
            return $1
          end
        end
      elsif file_name =~ /\.h$/
        File.read(file_name).each_line do |line|
          if line =~ /#define .*_VERSION "(.*)"/
            return $1
          end
        end
      end
      nil
    end
  end
end