class Solargraph::LanguageServer::Message::Extended::CheckGemVersion

Check if a more recent version of the Solargraph gem is available. Notify the client when an update exists. If the `verbose` parameter is true, notify the client when the gem is up to date.

Constants

GEM_ZERO

Attributes

current[R]

@return [Gem::Version]

error[R]

@return [String, nil]

Public Class Methods

fetcher() click to toggle source
# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 13
def self.fetcher
  @fetcher ||= Gem::SpecFetcher.new
end
fetcher=(obj) click to toggle source
# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 17
def self.fetcher= obj
  @fetcher = obj
end
new(host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil) click to toggle source
# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 23
def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
  super(host, request)
  @current = current
  @available = available
end

Public Instance Methods

process() click to toggle source
# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 29
def process
  if available > GEM_ZERO
    if available > current
      host.show_message_request "Solargraph gem version #{available} is available. (Current version: #{current})",
                                LanguageServer::MessageTypes::INFO,
                                ['Update now'] do |result|
                                  next unless result == 'Update now'
                                  cmd = if host.options['useBundler']
                                    'bundle update solargraph'
                                  else
                                    'gem update solargraph'
                                  end
                                  o, s = Open3.capture2(cmd)
                                  if s == 0
                                    host.show_message 'Successfully updated the Solargraph gem.', LanguageServer::MessageTypes::INFO
                                    host.send_notification '$/solargraph/restart', {}
                                  else
                                    host.show_message 'An error occurred while updating the gem.', LanguageServer::MessageTypes::ERROR
                                  end
                                end
    elsif params['verbose']
      host.show_message "The Solargraph gem is up to date (version #{Solargraph::VERSION})."
    end
  elsif fetched?
    Solargraph::Logging.logger.warn error
    host.show_message(error, MessageTypes::ERROR) if params['verbose']
  end
  set_result({
    installed: current,
    available: available
  })
end

Private Instance Methods

available() click to toggle source

@return [Gem::Version]

# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 68
def available
  if !@available && !@fetched
    @fetched = true
    begin
      @available ||= begin
        tuple = CheckGemVersion.fetcher.search_for_dependency(Gem::Dependency.new('solargraph')).flatten.first
        if tuple.nil?
          @error = 'An error occurred fetching the gem data'
          GEM_ZERO
        else
          tuple.version
        end
      end
    rescue Errno::EADDRNOTAVAIL => e
      @error = "Unable to connect to gem source: #{e.message}"
      GEM_ZERO
    end
  end
  @available
end
fetched?() click to toggle source
# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 89
def fetched?
  @fetched ||= false
end