Sha256: 44bae3e4af4f639cacfcf37e903a046817836cc466647247662b1754b5a84c03

Contents?: true

Size: 1.36 KB

Versions: 4

Compression:

Stored size: 1.36 KB

Contents

# frozen_string_literal: true

module ConvenientService
  module Examples
    module Standard
      class Gemfile
        module Services
          class RunShellCommand
            include ConvenientService::Standard::Config

            attr_reader :command, :debug

            step :validate_command,
              in: :command

            step Services::PrintShellCommand,
              in: [:command, {skip: -> { !debug }}],
              fallback: true

            step :result,
              in: :command

            def initialize(command:, debug: false)
              @command = command
              @debug = debug
            end

            def result
              ##
              # NOTE: When the command exit code is 0, `system` return `true`, and `false` otherwise.
              # - https://ruby-doc.org/core-3.1.2/Kernel.html#method-i-system
              # - https://stackoverflow.com/a/37329716/12201472
              #
              if system(command)
                success
              else
                error("#{command} returned non-zero exit code")
              end
            end

            private

            def validate_command
              return error("Command is `nil`") if command.nil?
              return error("Command is empty") if command.empty?

              success
            end
          end
        end
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
convenient_service-0.17.0 lib/convenient_service/examples/standard/gemfile/services/run_shell_command.rb
convenient_service-0.16.0 lib/convenient_service/examples/standard/gemfile/services/run_shell_command.rb
convenient_service-0.15.0 lib/convenient_service/examples/standard/gemfile/services/run_shell_command.rb
convenient_service-0.14.0 lib/convenient_service/examples/standard/gemfile/services/run_shell_command.rb