Sha256: 392dc389c36ae6058c8862319cf7a98c8f84cf51b2136f79519b9eb863c5fea5

Contents?: true

Size: 988 Bytes

Versions: 2

Compression:

Stored size: 988 Bytes

Contents

require 'open3'

module Lamby
  class Runner
    class Error < StandardError ; end
    class UnknownCommandPattern < Error ; end

    PATTERNS = [
      %r{\A\./bin/(rails|rake) db:migrate.*}
    ]

    class << self

      def handle?(event)
        event.dig 'lamby', 'runner'
      end

      def call(event)
        new(event).call
      end

    end

    def initialize(event)
      @event = event
    end

    def call
      validate!
      status = Open3.popen3(command, chdir: chdir) do |_stdin, stdout, stderr, thread|
        puts stdout.read
        puts stderr.read
        thread.value.exitstatus
      end
      [status, {}, StringIO.new('')]
    end

    def command
      @event.dig 'lamby', 'runner'
    end

    private

    def chdir
      defined?(::Rails) ? ::Rails.root : Dir.pwd
    end

    def validate!
      return if pattern?
      raise UnknownCommandPattern.new(command)
    end

    def pattern?
      PATTERNS.any? { |p| p === command }
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
lamby-3.0.1 lib/lamby/runner.rb
lamby-3.0.0 lib/lamby/runner.rb