Sha256: b08fc91d6ce5f754b800459ce2213974ede9cf22a9b679733da49fd8ad02e0df

Contents?: true

Size: 1.79 KB

Versions: 14

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module Conductor
  # Script runner
  class Script
    attr_reader :args, :path

    ##
    ## Initializes the given script.
    ##
    ## @param      script  The script/path
    ##
    def initialize(script)
      parts = Shellwords.split(script)
      self.path = parts[0]
      self.args = parts[1..].join(" ")
    end

    ##
    ## Set script path, automatically expands/tests
    ##
    ## @param      path  The path
    ##
    def path=(path)
      @path = if %r{^[%/]}.match?(path)
                File.expand_path(path)
              else
                script_dir = File.expand_path("~/.config/conductor/scripts")
                if File.exist?(File.join(script_dir, path))
                  File.join(script_dir, path)
                elsif TTY::Which.exist?(path)
                  TTY::Which.which(path)
                else
                  raise "Path to #{path} not found"

                end
              end
    end

    ##
    ## Set the args array
    ##
    ## @param      array  The array
    ##
    def args=(array)
      @args = if array.is_a?(Array)
                array.join(" ")
              else
                array
              end
    end

    ##
    ## Execute the script
    ##
    ## @return     [String] script results (STDOUT)
    ##
    def run
      stdin = Conductor.stdin

      raise "Script path not defined" unless @path

      raise "Script not executable" unless File.executable?(@path)

      use_stdin = true
      if /\$\{?file\}?/.match?(args)
        use_stdin = false
        args.sub!(/\$\{?file\}?/, Env.env[:filepath])
      else
        raise "No input" unless stdin

      end

      if use_stdin
        `echo #{Shellwords.escape(stdin)} | #{Env} #{@path} #{@args}`
      else
        `#{Env} #{@path} #{@args}`
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
marked-conductor-1.0.27 lib/conductor/script.rb
marked-conductor-1.0.26 lib/conductor/script.rb
marked-conductor-1.0.25 lib/conductor/script.rb
marked-conductor-1.0.24 lib/conductor/script.rb
marked-conductor-1.0.23 lib/conductor/script.rb
marked-conductor-1.0.22 lib/conductor/script.rb
marked-conductor-1.0.21 lib/conductor/script.rb
marked-conductor-1.0.20 lib/conductor/script.rb
marked-conductor-1.0.19 lib/conductor/script.rb
marked-conductor-1.0.18 lib/conductor/script.rb
marked-conductor-1.0.17 lib/conductor/script.rb
marked-conductor-1.0.16 lib/conductor/script.rb
marked-conductor-1.0.12 lib/conductor/script.rb
marked-conductor-1.0.11 lib/conductor/script.rb