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 14 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 18 def self.fetcher= obj @fetcher = obj end
new(host, request, current: Gem::Version.new(Solargraph::VERSION), available: nil)
click to toggle source
Calls superclass method
Solargraph::LanguageServer::Message::Base::new
# File lib/solargraph/language_server/message/extended/check_gem_version.rb, line 24 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 30 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 69 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 90 def fetched? @fetched ||= false end