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

Returns:

  • (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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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