Sha256: 778b467b036404364b97ca0031c6bb2c13713d74feb52102bd18554647bc64d4

Contents?: true

Size: 1.63 KB

Versions: 2

Compression:

Stored size: 1.63 KB

Contents

require "thor"
require "launchy"
require "clickhouse"

module Clickhouse
  class CLI < Thor

    DEPENDENCIES = {:server => "sinatra"}
    DEFAULT_URLS = "http://localhost:8123"

    desc "server [HOSTS]", "Start a Sinatra server as ClickHouse client (HOSTS should be comma separated URIs)"
    method_options [:port, "-p"] => 1982, [:username, "-u"] => :string, [:password, "-P"] => :string
    def server(urls = DEFAULT_URLS)
      run! :server, urls, options do
        Launchy.open "http://localhost:#{options[:port]}"
      end
    end

    desc "console [HOSTS]", "Start a Pry console as ClickHouse client (HOSTS should be comma separated URIs)"
    method_options [:username, "-u"] => :string, [:password, "-P"] => :string
    def console(urls = DEFAULT_URLS)
      run! :console, urls, options
    end

    map "s" => :server
    map "c" => :console

  private

    def run!(const, urls, options, &block)
      require! DEPENDENCIES[const]
      require_relative "cli/client"
      require_relative "cli/#{const}"
      connect! urls, options
      self.class.const_get(const.to_s.capitalize).run!(:port => options["port"], &block)
    end

    def require!(name)
      require(name) if name
    rescue LoadError
      puts "fatal: #{name.capitalize} not available. Please run `gem install #{name}` first."
      exit!
    end

    def connect!(urls, options)
      config = options.merge(:urls => urls.split(",")).inject({}){|h, (k, v)| h[k.to_sym] = v; h}
      Clickhouse.establish_connection config
    end

    def method_missing(method, *_args)
      raise Error, "Unrecognized command \"#{method}\". Please consult `clickhouse help`."
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
clickhouse-0.1.9 lib/clickhouse/cli.rb
clickhouse-0.1.8 lib/clickhouse/cli.rb