Class: RailsPackager::Command
- Inherits:
-
Object
- Object
- RailsPackager::Command
- Defined in:
- lib/rails_packager/command.rb
Class Method Summary collapse
Instance Method Summary collapse
- #args ⇒ Object
- #dir ⇒ Object
- #env ⇒ Object
- #execute(verbose: false) ⇒ Object
- #exit_code ⇒ Object
-
#initialize(name, *args, runner:, env: {}) ⇒ Command
constructor
A new instance of Command.
- #name ⇒ Object
- #successful? ⇒ Boolean
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
#args ⇒ Object
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 |
#dir ⇒ Object
42 43 44 |
# File 'lib/rails_packager/command.rb', line 42 def dir @runner.dir end |
#env ⇒ Object
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_code ⇒ Object
70 71 72 |
# File 'lib/rails_packager/command.rb', line 70 def exit_code @status.exitstatus end |
#name ⇒ Object
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
74 75 76 |
# File 'lib/rails_packager/command.rb', line 74 def successful? @status.success? end |