Sha256: b793c7b0829ce73fc772b880ba3a99529fa1478c7379621ab8332599e6641256

Contents?: true

Size: 1.91 KB

Versions: 1

Compression:

Stored size: 1.91 KB

Contents

require 'gherkin'
require 'optparse'
require 'lucid'
require 'logger'
require 'lucid/spec_file'
require 'lucid/cli/context'

module Lucid
  module CLI
    class App
      def self.start(args)
        new(args).start!
      end

      def initialize(args, stdin=STDIN, out=STDOUT, err=STDERR, kernel=Kernel)
        @args   = args
        @out    = out
        @err    = err
        @kernel = kernel
        @context = nil
      end

      def start!(existing_context=nil)
        trap_interrupt

        context_loader = if existing_context
          existing_context.configure(load_context)
          existing_context
        else
          ContextLoader.new(load_context)
        end

        log.debug('Context Loader')
        log.debug(context_loader)

        context_loader.execute
        context_loader.write_testdefs_json
        failure = context_loader.results.failure? || Lucid.wants_to_quit
        @kernel.exit(failure ? 1 : 0)
      rescue ProfilesNotDefinedError, YmlLoadError, ProfileNotFound => e
        @err.puts(e.message)
      rescue SystemExit => e
        @kernel.exit(e.status)
      rescue Errno::EACCES, Errno::ENOENT => e
        @err.puts("#{e.message} (#{e.class})")
        @kernel.exit(1)
      rescue Exception => e
        @err.puts("#{e.message} (#{e.class})")
        @err.puts(e.backtrace.join("\n"))
        @kernel.exit(1)
      end

      def load_context
        return @context if @context

        @context = Context.new(@out, @err)
        @context.parse_options(@args)
        Lucid.logger = @context.log
        log.debug('Context:')
        log.debug(@context)
        @context
      end

      private

      def log
        Lucid.logger
      end

      def trap_interrupt
        trap('INT') do
          exit!(1) if Lucid.wants_to_quit
          Lucid.wants_to_quit = true
          STDERR.puts "\nExiting Lucid execution.\nInterrupt again to exit immediately."
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lucid-0.5.1 lib/lucid/cli/app.rb