class DiscourseTheme::Downloader

Public Class Methods

new(dir:, client:) click to toggle source
# File lib/discourse_theme/downloader.rb, line 6
def initialize(dir:, client:)
  @dir = dir
  @client = client
  @theme_id = nil
end

Public Instance Methods

download_theme(id) click to toggle source
# File lib/discourse_theme/downloader.rb, line 12
def download_theme(id)
  raw, filename = @client.get_raw_theme_export(id)

  if filename.end_with?(".zip")
    Zip::File.open_buffer(raw) do |zip_file|
      zip_file.each do |entry|
        new_path = File.join(@dir, entry.name)
        entry.extract(new_path)
      end
    end
  else
    sio = StringIO.new(raw)
    gz = Zlib::GzipReader.new(sio)
    Minitar.unpack(gz, @dir)

    # Minitar extracts into a sub directory, move all the files up one dir
    Dir.chdir(@dir) do
      folders = Dir.glob('*/')
      raise "Extraction failed" unless folders.length == 1
      FileUtils.mv(Dir.glob("#{folders[0]}*"), "./")
      FileUtils.remove_dir(folders[0])
    end
  end
end

Private Instance Methods

add_headers(request) click to toggle source
# File lib/discourse_theme/downloader.rb, line 39
def add_headers(request)
  if @is_theme_creator
    request["User-Api-Key"] = @api_key
  end
end