lucassus/mongo_browser

View on GitHub
lib/mongo_browser/cli.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "mongo_browser"

require "thor"
require "thin"

module MongoBrowser
  RACK_CONFIG = File.join(File.dirname(__FILE__), "../..", "config.ru")

  class CLI < Thor
    desc :start, "Starts the application"
    option :port, aliases: :p, default: "5678",
        desc: "Specify application port"
    option :environment, aliases: :e, default: "production",
        desc: "Specify application environment"
    option :"mongodb-port", default: MongoBrowser::DEFAULT_MONGODB_PORT,
        desc: "Specify mongodb port"
    option :"mongodb-host", default: MongoBrowser::DEFAULT_MONGODB_HOST,
        desc: "Specify mongodb host"

    def start
      setup_mongodb_connection!(options)
      run_thin(options)
    end

    private

    def setup_mongodb_connection!(options)
      port = options[:"mongodb-port"].to_i
      MongoBrowser.mongodb_port = port
      puts "MongoDB port: #{port}"

      host = options[:"mongodb-host"]
      MongoBrowser.mongodb_host = host
      puts "MongoDB host: #{host}"
    end

    def run_thin(options)
      argv = ["start"]
      argv << ["-R", RACK_CONFIG]
      argv << ["-p", options[:port]]
      argv << ["-e", options[:environment]]

      puts "Application environment: #{options[:environment]}"
      puts "Application url: http://localhost:#{options[:port]}"
      Thin::Runner.new(argv.flatten).run!
    end
  end
end