Class: RailsPackager::Command

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_packager/command.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, *args, runner:, env: {}) ⇒ Command

Returns a new instance of Command.



30
31
32
33
34
35
# File 'lib/rails_packager/command.rb', line 30

def initialize(name, *args, runner:, env: {})
  @runner = runner
  @name = replace_variables(name)
  @args = args
  @env = env
end

Class Method Details

.parse(runner, value) ⇒ Object



25
26
27
28
# File 'lib/rails_packager/command.rb', line 25

def self.parse(runner, value)
  parsed = CommandParser.parse(value)
  new(parsed.name, *parsed.args, runner: runner, env: parsed.env)
end

.replace_variables(runner, value, allow_files: false) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/rails_packager/command.rb', line 5

def self.replace_variables(runner, value, allow_files: false)
  return nil if value.nil?
  result = value.dup
  result.gsub!(/\$\{(\w+)\}/) { |m| ENV.fetch($1, "") }
  result["@{name}"] = runner.name if result["@{name}"]

  if allow_files
    raise ArgumentError, "@{files} must be a singular argument" if result["@{files}"] && result != "@{files}"
    raise ArgumentError, "@{files_file} must be a singular argument" if result["@{files_file}"] && result != "@{files_file}"

    if result == "@{files}"
      result = runner.files
    elsif result == "@{files_file}"
      result = runner.files_file
    end
  end

  result
end

Instance Method Details

#argsObject



53
54
55
56
57
# File 'lib/rails_packager/command.rb', line 53

def args
  @args.map do |arg|
    replace_variables(arg, allow_files: true)
  end.flatten
end

#dirObject



42
43
44
# File 'lib/rails_packager/command.rb', line 42

def dir
  @runner.dir
end

#envObject



46
47
48
49
50
51
# File 'lib/rails_packager/command.rb', line 46

def env
  @runner.env.merge(@env).inject({}) do |result, (key, value)|
    result[key] = replace_variables(value)
    result
  end
end

#execute(verbose: false) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'lib/rails_packager/command.rb', line 59

def execute(verbose: false)
  command_name = name
  command_args = args
  command_line = ([command_name] + command_args).join(" ")
  puts "$ #{command_line}" if verbose
  system(env, command_name, *command_args, chdir: dir)
  @status = $?
  STDERR.puts "ERROR: '#{command_line}' returned error code: #{exit_code}" unless successful?
  successful?
end

#exit_codeObject



70
71
72
# File 'lib/rails_packager/command.rb', line 70

def exit_code
  @status.exitstatus
end

#nameObject

Raises:

  • (ArgumentError)


37
38
39
40
# File 'lib/rails_packager/command.rb', line 37

def name
  raise ArgumentError, "Invalid command: empty command name is not valid" if @name.blank?
  @name
end

#successful?Boolean

Returns:

  • (Boolean)


74
75
76
# File 'lib/rails_packager/command.rb', line 74

def successful?
  @status.success?
end