class BranchIOCLI::Helper::BranchHelper

Attributes

changes[RW]
errors[RW]

Public Class Methods

add_change(change) click to toggle source
# File lib/branch_io_cli/helper/branch_helper.rb, line 20
def add_change(change)
  @changes ||= Set.new
  @changes << change.to_s
end
domains(apps) click to toggle source
# File lib/branch_io_cli/helper/branch_helper.rb, line 83
def domains(apps)
  apps.inject Set.new do |result, k, v|
    next result unless v
    result + v.domains
  end
end
download(url, dest, size: nil) click to toggle source
# File lib/branch_io_cli/helper/branch_helper.rb, line 47
def download(url, dest, size: nil)
  uri = URI(url)

  Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
    request = Net::HTTP::Get.new uri

    http.request request do |response|
      case response
      when Net::HTTPSuccess
        bytes_downloaded = 0
        if size
          pastel = Pastel.new
          green = pastel.on_green " "
          yellow = pastel.on_yellow " "
          progress = TTY::ProgressBar.new "[:bar] :percent (:eta)", total: 50, complete: green, incomplete: yellow
        end

        File.open dest, 'w' do |io|
          response.read_body do |chunk|
            io.write chunk

            # print progress
            bytes_downloaded += chunk.length
            progress.ratio = bytes_downloaded.to_f / size.to_f if size
          end
        end
        progress.finish if size
      when Net::HTTPRedirection
        download response['location'], dest, size: size
      else
        raise "Error downloading #{url}: #{response.code} #{response.message}"
      end
    end
  end
end
fetch(url, spin: true) click to toggle source
# File lib/branch_io_cli/helper/branch_helper.rb, line 25
def fetch(url, spin: true)
  if spin
    @spinner = TTY::Spinner.new "[:spinner] GET #{url}.", format: :flip
    @spinner.auto_spin
  end

  response = Net::HTTP.get_response URI(url)

  case response
  when Net::HTTPSuccess
    @spinner.success "#{response.code} #{response.message}" if @spinner
    @spinner = nil
    response.body
  when Net::HTTPRedirection
    fetch response['location'], spin: false
  else
    @spinner.error "#{response.code} #{response.message}" if @spinner
    @spinner = nil
    raise "Error fetching #{url}: #{response.code} #{response.message}"
  end
end