class DCase::Config

Attributes

args[RW]
config_path[RW]
dns_list[RW]
password[RW]
port[RW]
server[RW]
side[RW]

Public Class Methods

new(args = []) click to toggle source
# File lib/dcase/config.rb, line 10
def initialize(args = [])
  @args = args

  parse_args
  read_config

  check_values
end

Public Instance Methods

check_values() click to toggle source
# File lib/dcase/config.rb, line 19
def check_values
  if side.nil?
    raise 'You need to define side of dcase in'
  end

  if side == 'local' && server.nil?
    raise 'You need to define remote server address'
  end

  if port.nil?
    raise 'You need to define remote server port'
  end

  if password.nil?
    raise 'You need to define a password, should be same in server/local side'
  end
end

Private Instance Methods

parse_args() click to toggle source
# File lib/dcase/config.rb, line 50
def parse_args
  opt_parser = OptionParser.new do |opts|
    opts.banner = "Usage: dcase [options]"

    opts.separator ""
    opts.separator "Specific options:"

    opts.on("-s", "--side SIDE", "Local or Server side") do |c|
      @side = c
    end

    opts.on("-c", "--config PATH", "Config file path") do |c|
      @config_path = c
    end

    opts.on("-r", "--remote ADDRESS", "Remote server address") do |c|
      @server = c
    end

    opts.on("-p", "--port PORT", Integer, "Remote server port") do |c|
      @port = c
    end

    opts.on("-k", "--password PASSWORD", "Password, should be same in client and server sides") do |c|
      @password = c
    end

    opts.on("-l", "--dns-list LIST", "Password, should be same in client and server sides") do |c|
      @dns_list = c.split(',').map(&:strip)
    end

    opts.on_tail("-v", "--version", "Show shadowsocks gem version") do
      puts DCase::VERSION
      exit
    end

    opts.on_tail("-h", "--help", "Show this message") do
      puts opts
      exit
    end
  end

  opt_parser.parse!(args)
end
read_config() click to toggle source
# File lib/dcase/config.rb, line 39
def read_config
  @config_path = File.expand_path('../..', File.dirname(__FILE__)) + '/config.yml' unless @config_path
  config = YAML.load_file @config_path

  @side      = config["side"]          if @side.nil?
  @server    = config["server"]        if @server.nil?
  @port      = config["port"].to_i     if @port.nil?
  @password  = config["password"]      if @password.nil?
  @dns_list  = config["dns_list"]      if @dns_list.nil?
end