Sha256: 9e46cc7c27b4265a7e9b1dba471a1ceba939efcaa02f43f67a0b16219b006c5e

Contents?: true

Size: 1.25 KB

Versions: 4

Compression:

Stored size: 1.25 KB

Contents

require 'thor/actions'

require_relative '../util'

class Thor
  ##
  # Patch some Thor actions
  ##
  module Actions
    ##
    # Replace `run` with IO::popen to accept STDIN
    ##
    def run_with_input(command, input, config = {})
      return unless behavior == :invoke

      destination = relative_to_original_destination_root(destination_root, false)
      desc = "#{command} from #{destination.inspect}"

      if config[:with]
        desc = "#{File.basename(config[:with].to_s)} #{desc}"
        command = "#{config[:with]} #{command}"
      end

      say_status :run, desc, config.fetch(:verbose, true)
      return if options[:pretend]

      output = config.fetch(:stdout, STDOUT)

      IO.popen(command, 'r+') do |io|
        io.write(input)

        ## Stream output
        output.write(io.readpartial(4096)) until io.eof?
      end
    end

    ##
    # Make `template` load from a sane path and render in the context of Config
    ##
    def template(source, destination, config = {})
      content = ERB.new(Builderator::Util.source_path(source).binread,
                        nil, '-', '@output_buffer').result(Builderator::Config.instance_eval('binding'))

      create_file Builderator::Util.relative_path(destination), content, config
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
builderator-1.0.0.pre.rc.5 lib/builderator/patch/thor-actions.rb
builderator-1.0.0.pre.rc.4 lib/builderator/patch/thor-actions.rb
builderator-1.0.0.pre.rc.3 lib/builderator/patch/thor-actions.rb
builderator-1.0.0.pre.rc.1 lib/builderator/patch/thor-actions.rb