class Spark::CLI

Public Instance Methods

run() click to toggle source

IRB_HISTORY_FILE = File.join(Dir.home, '.irb_spark_history') IRB_HISTORY_SIZE = 100

# File lib/spark/cli.rb, line 19
def run
  program :name, 'RubySpark'
  program :version, Spark::VERSION
  program :description, 'Ruby wrapper for Spark'

  global_option('-d', '--debug', 'Logging message to stdout'){ $DEBUG = true }
  default_command :help


  # Build ---------------------------------------------------------------
  command :build do |c|
    c.syntax = 'build [options]'
    c.description = 'Build spark and gem extensions'
    c.option '--hadoop-version STRING', String, 'Version of hadoop which will assembled with the Spark'
    c.option '--spark-core-version STRING', String, 'Version of Spark core'
    c.option '--spark-version STRING', String, 'Version of Spark'
    c.option '--scala-version STRING', String, 'Version of Scala'
    c.option '--target STRING', String, 'Directory where Spark will be stored'
    c.option '--only-ext', 'Build only extension for RubySpark'

    c.action do |args, options|
      Spark::Build.build(options.__hash__)
      puts
      puts 'Everything is OK'
    end
  end
  alias_command :install, :build


  # Shell -----------------------------------------------------------------
  command :shell do |c|
    c.syntax = 'shell [options]'
    c.description = 'Start ruby shell for spark'
    c.option '--target STRING', String, 'Directory where Spark is stored'
    c.option '--properties-file STRING', String, 'Path to a file from which to load extra properties'
    c.option '--[no-]start', 'Start Spark immediately'
    c.option '--[no-]logger', 'Enable/disable logger (default: enable)'

    c.action do |args, options|
      options.default start: true, logger: true

      Spark.load_lib(options.target)
      Spark.logger.disable unless options.logger

      Spark.config do
        set_app_name 'RubySpark'
      end

      Spark.config.from_file(options.properties_file)

      if options.start
        # Load Java and Spark
        Spark.start
        $sc = Spark.context

        Spark.print_logo('Spark context is loaded as $sc')
      else
        Spark.print_logo('You can start Spark with Spark.start')
      end

      # Load Pry
      require 'pry'
      Pry.start
    end
  end


  # # IRB -------------------------------------------------------------------
  # command :irb do |c|
  #   c.syntax = 'irb [options]'
  #   c.description = 'Start ruby shell for spark'
  #   c.option '--spark-home STRING', String, 'Directory where Spark is stored'
  #   c.option '--[no-]start', 'Start Spark immediately'
  #   c.option '--[no-]logger', 'Enable/disable logger (default: enable)'
  #
  #   c.action do |args, options|
  #     options.default start: true, logger: true
  #
  #     Spark.load_lib(options.spark_home)
  #     Spark::Logger.disable unless options.logger
  #
  #     Spark.config do
  #       set_app_name 'Pry RubySpark'
  #     end
  #
  #     if options.start
  #       # Load Java and Spark
  #       Spark.start
  #       $sc = Spark.context
  #
  #       Spark.print_logo('Spark context is loaded as $sc')
  #     else
  #       Spark.print_logo('You can start Spark with Spark.start')
  #     end
  #
  #     # Load IRB
  #     require 'irb'
  #     require 'irb/completion'
  #     require 'irb/ext/save-history'
  #
  #     begin
  #       file = File.expand_path(IRB_HISTORY_FILE)
  #       if File.exists?(file)
  #         lines = IO.readlines(file).collect { |line| line.chomp }
  #         Readline::HISTORY.push(*lines)
  #       end
  #       Kernel.at_exit do
  #         lines = Readline::HISTORY.to_a.reverse.uniq.reverse
  #         lines = lines[-IRB_HISTORY_SIZE, IRB_HISTORY_SIZE] if lines.nitems > IRB_HISTORY_SIZE
  #         File.open(IRB_HISTORY_FILE, File::WRONLY | File::CREAT | File::TRUNC) { |io| io.puts lines.join("\n") }
  #       end
  #     rescue
  #     end
  #
  #     ARGV.clear # Clear Thor ARGV, otherwise IRB will parse it
  #     ARGV.concat ['--readline', '--prompt-mode', 'simple']
  #     IRB.start
  #   end
  # end


  # Home ------------------------------------------------------------------
  command :home do |c|
    c.action do |args, options|
      puts Spark.home
      exit(0)
    end
  end


  # Ruby spark jar --------------------------------------------------------
  command :ruby_spark_jar do |c|
    c.action do |args, options|
      puts Spark.ruby_spark_jar
      exit(0)
    end
  end

  run!
end