class AnyCableRailsGenerators::DownloadGenerator

Downloads anycable-go binary

Constants

VERSION

Public Instance Methods

download_bin() click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 21
def download_bin
  out = options[:bin_path] || DEFAULT_BIN_PATH
  version = options[:version] || VERSION

  download_exe(
    release_url(version),
    to: out,
    file_name: "anycable-go"
  )

  true
end

Private Instance Methods

download_exe(url, to:, file_name:) click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 61
def download_exe(url, to:, file_name:)
  file_path = File.join(to, file_name)

  run "#{sudo(to)}curl -L #{url} -o #{file_path}", abort_on_failure: true
  run "#{sudo(to)}chmod +x #{file_path}", abort_on_failure: true
  run "#{file_path} -v", abort_on_failure: true
end
latest_release_url(version) click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 56
def latest_release_url(version)
  "https://github.com/anycable/anycable-go/releases/latest/download/" \
    "anycable-go-#{os_name}-#{cpu_name}"
end
legacy_release_url(version) click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 46
def legacy_release_url(version)
  "https://github.com/anycable/anycable-go/releases/download/#{version}/" \
    "anycable-go-v#{version}-#{os_name}-#{cpu_name}"
end
new_release_url(version) click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 51
def new_release_url(version)
  "https://github.com/anycable/anycable-go/releases/download/#{version}/" \
    "anycable-go-#{os_name}-#{cpu_name}"
end
release_url(version) click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 36
def release_url(version)
  return latest_release_url(version) if version == "latest"

  if Gem::Version.new(version).segments.first >= 1
    new_release_url("v#{version}")
  else
    legacy_release_url("v#{version}")
  end
end
sudo(path) click to toggle source
# File lib/generators/anycable/download/download_generator.rb, line 69
def sudo(path)
  sudo = ""
  unless File.writable?(path)
    if yes? "Path is not writable 😕. Do you have sudo privileges?"
      sudo = "sudo "
    else
      say_status :error, "❌ Failed to install AnyCable-Go WebSocket server", :red
      raise StandardError, "Path #{path} is not writable!"
    end
  end

  sudo
end