Sha256: d0e594adb88182b8fe728c09a7b02b58c58067bdfabc01fba1e59e8fe1ce4b4f

Contents?: true

Size: 1.43 KB

Versions: 1

Compression:

Stored size: 1.43 KB

Contents

require 'libarchive'

module Assetify
  #
  # Some Assets are inside rocks, need tools...
  #
  class Pkg
    include Helpers
    attr_accessor :name, :url

    PATH = '/tmp/'.freeze

    def initialize(name, url, _opts = {})
      @name = name
      @pkgname = url.split('/').last
      @url = url
    end

    def path
      File.join(PATH, name.to_s)
    end

    def fullpath
      File.join(path, @pkgname)
    end

    def read_from_pkg(regex = '.*')
      data = {}
      Archive.read_open_filename(fullpath) do |ar|
        while (entry = ar.next_header)
          if entry.pathname =~ /#{regex}/
            data[entry.pathname] = ar.read_data
            # return data
          end
        end
      end
      data
    end

    def get(file, force = false)
      # Download and write to tmp if force or doensnt exists
      write(get_data(url)) if force || !File.exist?(fullpath)
      # Better way when multiple are found....?
      read_from_pkg(file)
    end

    #
    # Used when pkgs doesn't provide a block, just dump it somewhere.
    #
    def unpack_all
      read_from_pkg.each do |file, data|
        _fname, *dir = file =~ %r{/$} ? [nil, file] : file.split('/').reverse
        dir = File.join Opt[:vendor], dir.reverse.join('/')
        FileUtils.mkdir_p dir unless Dir.exist?(dir)
        next if file =~ %r{/$} # next if data.empty?
        File.open(Opt[:vendor] + "/#{file}", 'w+') { |f| f.puts(data) }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
assetify-3.0.0 lib/assetify/asset/pkg.rb