Sha256: 35f3f4b0c4ef9d51c4a150ac17709c91471b4e5351ec8b25998619b410aa1c8d

Contents?: true

Size: 1.84 KB

Versions: 35

Compression:

Stored size: 1.84 KB

Contents

module Redcar
  class Command
    class Executor
      
      attr_reader :options, :command_instance
      
      def self.current_environment
        if Redcar.app
          win = Redcar.app.focussed_window        
          tab = Redcar.app.focussed_notebook_tab
          { :win => win,
            :tab => tab }
        end
      end
      
      def initialize(command_instance, options={})
        @command_instance = command_instance
        @options          = options
      end
      
      def execute
        set_environment
        begin
          if not @options.empty?
            result = @command_instance.execute(@options) 
          else
            result = @command_instance.execute
          end
          finish
          clear_environment
        rescue Object => e
          set_error(e)
          print_command_error(e)
        rescue java.lang.StackOverflowError => e
          set_error(e)
          print_command_error(e)
        end
        record
        result
      ensure
        clear_environment
      end
      
      private
      
      def set_environment
        env = Executor.current_environment || {}
        env = env.merge(options.delete(:env) || {})
        @command_instance.environment(env)
      end
      
      def clear_environment
        @command_instance.environment(nil)
      end
      
      def set_error(e)
        @command_instance.error = e
      end
      
      def finish
        if @command_instance.respond_to?(:_finished)
          @command_instance._finished
        end
      end

      def print_command_error(e)
        puts "Error in command #{@command_instance.class}"
        puts e.class.to_s + ": " + e.message.to_s
        puts e.backtrace
      end
      
      def record
        if Redcar.app.andand.history
          Redcar.app.history.record(@command_instance)
        end
      end
    end
  end
end

Version data entries

35 entries across 35 versions & 2 rubygems

Version Path
redcar-0.13 plugins/application/lib/application/command/executor.rb
redcar-dev-0.13.5dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.13.4dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.13.3dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.13.2dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.13.1dev plugins/application/lib/application/command/executor.rb
redcar-0.12.1 plugins/application/lib/application/command/executor.rb
redcar-dev-0.13.0dev plugins/application/lib/application/command/executor.rb
redcar-0.12 plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.27dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.26dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.25dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.24dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.23dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.22dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.21dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.20dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.19dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.18dev plugins/application/lib/application/command/executor.rb
redcar-dev-0.12.17dev plugins/application/lib/application/command/executor.rb