Sha256: 20106c3ab94a118c4c417d149901b5d4aadb5b3867a2a35505ead9ab5806ac93

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

module MM
  module Console
    class SystemCmd
      SCRIPT_REGEX = /\[([^\]]+)\]/
      
      def self.execute_as_cmd(runtime, command)
        return if command.blank?
        which = runtime[:api].execute_cmd("which #{command.split.first.inspect}")
        if which && which.first == 0
          SystemCmd.new(command).execute(runtime)
        else
          raise "What's '#{command}' mean?"
        end
      end

      def initialize(command)
        @command = command
      end
      
      def execute(runtime)
        @transition_script = if @command =~ SCRIPT_REGEX
          script = runtime[$1.to_sym] || $1
          cmd = parse(runtime, script)
          if cmd.is_a?(MM::Console::Transition)
            @command.gsub!(SCRIPT_REGEX, cmd.desc)
            script
          end
        end
        exitstatus, output = runtime[:api].execute_cmd(@command)
        if exitstatus == 0 && @transition_script
          if rev = output.to_s.split("\n").last.to_s.gsub(/[^0-9]/, '')
            runtime[:revision] = rev
          end
          processor(runtime).process(@transition_script)
        else
          output
        end
      end
      
      
      def parse(runtime, script)
        processor(runtime).parse(script)
      rescue
      end
      
      def processor(runtime)
        MM::Console::Processor.new(runtime)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
xli-mm-0.0.3 lib/mm/console/system_cmd.rb