Module: Solargraph::YardMap::CoreDocs
- Defined in:
- lib/solargraph/yard_map/core_docs.rb
Defined Under Namespace
Classes: SourceNotAvailableError
Constant Summary
collapse
- SOURCE =
'http://solargraph.org/download'
Class Method Summary
collapse
Class Method Details
.available ⇒ Object
51
52
53
54
55
56
57
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 51
def available
uri = URI.parse("#{SOURCE}/versions.json")
response = Net::HTTP.get_response(uri)
obj = JSON.parse(response.body)
raise SourceNotAvailableError.new("Error connecting to #{SOURCE}") unless obj['status'] == 'ok'
obj['cores']
end
|
.best_download ⇒ Object
59
60
61
62
63
64
65
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 59
def best_download
rv = Gem::Version.new(RUBY_VERSION)
available.each do |ver|
return ver if Gem::Version.new(ver) <= rv
end
obj['cores'].last
end
|
.best_match ⇒ Object
43
44
45
46
47
48
49
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 43
def best_match
available = versions
available.each do |v|
return v if Gem::Version.new(v) <= Gem::Version.new(RUBY_VERSION)
end
return available.last
end
|
.cache_dir ⇒ Object
14
15
16
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 14
def cache_dir
@cache_dir ||= File.join(Dir.home, '.solargraph', 'cache')
end
|
.clear ⇒ Object
86
87
88
89
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 86
def clear
FileUtils.rm_rf cache_dir, secure: true
require_minimum
end
|
.download(version) ⇒ Object
77
78
79
80
81
82
83
84
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 77
def download version
FileUtils.mkdir_p cache_dir
uri = URI.parse("http://solargraph.org/download/#{version}.tar.gz")
response = Net::HTTP.get_response(uri)
zipfile = File.join(cache_dir, "#{version}.tar.gz")
File.binwrite zipfile, response.body
install_archive zipfile
end
|
.require_minimum ⇒ Object
Solargraph installs Ruby 2.2.2 documentation to ensure minimum functionality.
19
20
21
22
23
24
25
26
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 19
def require_minimum
FileUtils.mkdir_p cache_dir
version_dir = File.join(cache_dir, '2.2.2')
unless File.exist?(version_dir)
FileUtils.cp File.join(Solargraph::YARDOC_PATH, '2.2.2.tar.gz'), cache_dir
install_archive File.join(cache_dir, '2.2.2.tar.gz')
end
end
|
.valid?(ver) ⇒ Boolean
28
29
30
31
32
33
34
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 28
def valid?(ver)
dir = File.join(cache_dir, ver)
return false unless File.directory?(dir)
return false unless File.directory?(File.join(dir, 'yardoc'))
return false unless File.directory?(File.join(dir, 'yardoc-stdlib'))
true
end
|
.versions ⇒ Object
36
37
38
39
40
41
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 36
def versions
dirs = Dir[File.join(cache_dir, '*')].map{|d| File.basename(d)}
dirs.keep_if{|d| valid?(d)}
dirs.sort!{|a, b| Gem::Version.new(b) <=> Gem::Version.new(a)}
dirs
end
|
.yard_stdlib_file(ver = best_match) ⇒ Object
72
73
74
75
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 72
def yard_stdlib_file(ver = best_match)
raise ArgumentError.new("Invalid core yardoc version #{ver}") unless valid?(ver)
File.join(cache_dir, ver, 'yardoc-stdlib')
end
|
.yardoc_file(ver = best_match) ⇒ Object
67
68
69
70
|
# File 'lib/solargraph/yard_map/core_docs.rb', line 67
def yardoc_file(ver = best_match)
raise ArgumentError.new("Invalid core yardoc version #{ver}") unless valid?(ver)
File.join(cache_dir, ver, 'yardoc')
end
|