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')

Class Attribute Summary collapse

Attributes inherited from Base

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

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)


29
30
31
32
33
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 29

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

Class Attribute Details

.fetcherGem::SpecFetcher

Returns:

  • (Gem::SpecFetcher)


13
14
15
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 13

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

Instance Method Details

#processObject



35
36
37
38
39
40
41
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
# File 'lib/solargraph/language_server/message/extended/check_gem_version.rb', line 35

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
                                  _, 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
    # @sg-ignore Need to add nil check here
    host.show_message(error, MessageTypes::ERROR) if params['verbose']
  end
  set_result({
               installed: current,
               available: available
             })
end