class Rubypack::Builder

Public Class Methods

new(options) click to toggle source
# File lib/rubypack/builder.rb, line 6
def initialize(options)
  @options = options
  @output = if options[:verbose]
              VerboseOutput.new
            elsif options[:quiet]
              QuietOutput.new
            else
              DefaultOutput.new
            end
  @overwrite = !options[:no_overwrite]
  @output_directory = options[:output_directory]
end

Public Instance Methods

build!() click to toggle source
# File lib/rubypack/builder.rb, line 19
def build!
  pack = read_rubypack_file
  return false unless pack

  download_success = download_gems(pack)
  return false unless download_success

  files = generate_list_of_files(pack)
  return false unless files

  Dir.mktmpdir do |output_directory|
    copy_files(pack, files, output_directory)
    create_package(pack, output_directory)
  end

  true
rescue => exception
  @output.error(exception.message)
  @output.verbose(exception.backtrace.join("\n"))
  false
end

Private Instance Methods

copy_files(pack, files, output_directory) click to toggle source
# File lib/rubypack/builder.rb, line 72
def copy_files(pack, files, output_directory)
  @output.step('Creating copy of files...') do
    @output.verbose(' Temporal path:', output_directory)
    FileUtils.mkdir_p(output_directory)
    files.each do |file|
      new_file = File.join(output_directory, file)
      directory = File.dirname(new_file)
      FileUtils.mkdir_p(directory) unless Dir.exists?(directory)
      @output.verbose(' =', file)
      FileUtils.copy_entry(File.join(pack.path, file), new_file)
    end
  end
end
create_package(pack, output_directory) click to toggle source
# File lib/rubypack/builder.rb, line 86
def create_package(pack, output_directory)
  @output.step('Creating package...') do
    compressor = Compressor.new(
      format: @options[:compressor],
      output: @output)
    compressor.compress!(
      path: output_directory,
      output_filename: File.join(@output_directory, pack.output_filename),
      overwrite: @overwrite)
  end
end
download_gems(pack) click to toggle source
# File lib/rubypack/builder.rb, line 49
def download_gems(pack)
  @output.step('Downloading gems...') do
    bundler = BundlerController.new(path: pack.path)
    bundler.package do |out|
      while line = out.gets do
        @output.verbose(' >', line)
      end
    end
  end
end
generate_list_of_files(pack) click to toggle source
# File lib/rubypack/builder.rb, line 60
def generate_list_of_files(pack)
  @output.step('Generating list of files...') do
    pack.include(pack.filename)
    pack.include('Gemfile')
    pack.include('Gemfile.lock')
    pack.include('vendor/cache/*')
    all_files = pack.list_files
    @output.status(' Files count:', all_files.count)
    all_files
  end
end
read_rubypack_file() click to toggle source
# File lib/rubypack/builder.rb, line 43
def read_rubypack_file
  @output.step("Reading #{@options[:config]} file...") do
    RubypackFile.new(filename: @options[:config], output: @output)
  end
end