Class: Solargraph::LanguageServer::Message::Extended::CheckGemVersion

Inherits:
Base
  • Object
show all
Defined in:
lib/solargraph/language_server/message/extended/check_gem_version.rb

Overview

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.

Constant Summary collapse

GEM_ZERO =
Gem::Version.new('0.0.0')

Instance Attribute Summary

Attributes inherited from Base

#host, #id, #method, #params, #request, #result

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#post_initialize, #send_response, #set_error, #set_result

Constructor Details

#initialize(host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil) ⇒ CheckGemVersion

Returns a new instance of CheckGemVersion.

Parameters:

  • host (Solargraph::LanguageServer::Host)
  • request (Hash)
  • current (Gem::Version) (defaults to: Gem::Version.new(Solargraph::VERSION))
  • available (Gem::Version, nil) (defaults to: nil)


36
37
38
39
40
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 36

def initialize host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil
  super(host, request)
  @current = current
  @available = available
end

Class Method Details

.fetcherGem::SpecFetcher

Returns:



20
21
22
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 20

def self.fetcher
  @fetcher ||= Gem::SpecFetcher.new
end

.fetcher=(obj) ⇒ Gem::SpecFetcher

Parameters:

Returns:



26
27
28
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 26

def self.fetcher= obj
  @fetcher = obj
end

Instance Method Details

#processObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 42

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