class RailsPackager::Runner

Constants

DEFAULT_CONFIG
JBUNDLE_COMMAND

This command is inserted after bundle install when jbundler usage is detected

Attributes

after[R]
before[R]
dir[R]
env[R]
excludes[R]
includes[R]
name[R]
package[R]

Public Class Methods

new(dir:, name: nil, config_file: nil) click to toggle source
# File lib/rails_packager/runner.rb, line 33
def initialize(dir:, name: nil, config_file: nil)
  @files_file_tempfile = nil
  @dir = dir
  @name = name

  config =
    if config_file
      YAML.load_file(config_file)
    else
      {}
    end

  load_config(config)
end

Public Instance Methods

close() click to toggle source
# File lib/rails_packager/runner.rb, line 83
def close
  if @files_file_tempfile
    @files_file_tempfile.unlink
    @files_file_tempfile = nil
  end
end
commands() click to toggle source
# File lib/rails_packager/runner.rb, line 73
def commands
  before + [package] + after
end
execute(verbose: false) click to toggle source
# File lib/rails_packager/runner.rb, line 77
def execute(verbose: false)
  commands.each { |cmd| break unless cmd.execute(verbose: verbose) }
ensure
  close
end
exit_code() click to toggle source
# File lib/rails_packager/runner.rb, line 94
def exit_code
  errored = commands.find { |cmd| !cmd.successful? }

  if errored
    errored.exit_code
  else
    0
  end
end
files() click to toggle source
# File lib/rails_packager/runner.rb, line 48
def files
  result = Dir.glob(File.join(dir, "**/*"), File::FNM_DOTMATCH).map do |file|
    file.sub(File.join(dir, "/"), "")
  end

  # Drop special directory files
  result.reject! { |f| f =~ %r{/\.\.?\z} || f =~ /\A\.\.?\z/ }

  result.select! { |f| includes.any? { |i| RailsPackager::Util.glob_match?(i, f) } } if includes
  result.reject! { |f| excludes.any? { |e| RailsPackager::Util.glob_match?(e, f) } } if excludes
  result
end
files_file() click to toggle source
# File lib/rails_packager/runner.rb, line 61
def files_file
  @files_file_tempfile ||=
    begin
      Tempfile.new("rails_packager_file_names").tap do |tempfile|
        files.each { |f| tempfile.puts f }
        tempfile.close
      end
    end

  @files_file_tempfile.path
end
successful?() click to toggle source
# File lib/rails_packager/runner.rb, line 90
def successful?
  commands.all?(&:successful?)
end

Private Instance Methods

jbundler_in_use?() click to toggle source
# File lib/rails_packager/runner.rb, line 134
def jbundler_in_use?
  File.exist? File.join(dir, "Jarfile")
end
load_config(config) click to toggle source
# File lib/rails_packager/runner.rb, line 110
def load_config(config)
  config = config.symbolize_keys
  customized_before = config.include?(:before)
  config = DEFAULT_CONFIG.merge(config)

  if !customized_before && jbundler_in_use?
    config[:before] = config[:before].dup
    config[:before].insert(2, JBUNDLE_COMMAND)
  end

  @includes = config[:include]
  @excludes = config[:exclude]

  @env = config[:env].inject({}) do |result, (key, value)|
    result[key] = replace_variables(value)
    result
  end

  @name = name.presence || replace_variables(config.fetch(:name) { File.basename(File.realpath(dir)) })
  @before = config.fetch(:before, []).map { |x| RailsPackager::Command.parse(self, x) }
  @after = config.fetch(:after, []).map { |x| RailsPackager::Command.parse(self, x) }
  @package = RailsPackager::Command.parse(self, config[:package])
end
replace_variables(value) click to toggle source
# File lib/rails_packager/runner.rb, line 106
def replace_variables(value)
  RailsPackager::Command.replace_variables(self, value)
end