Class: Server::ArgumentsParser

Inherits:
Object
  • Object
show all
Defined in:
lib/server/argument_parser.rb

Overview

The ArgumentsParser class

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(option_parser = OptionParser.new) ⇒ ArgumentsParser

Returns a new instance of ArgumentsParser.



23
24
25
26
27
28
# File 'lib/server/argument_parser.rb', line 23

def initialize(option_parser = OptionParser.new)
  @parser = option_parser
  @options = ::Server.server_config.dup
  @flags = i[banner port ssl idle_reading idle_writing log_requests log_level help version]
  @flags.each { |method_name| method(method_name)&.call if respond_to?(method_name) }
end

Instance Attribute Details

#optionsObject (readonly)

Returns the value of attribute options.



21
22
23
# File 'lib/server/argument_parser.rb', line 21

def options
  @options
end

#parserObject (readonly)

Returns the value of attribute parser.



21
22
23
# File 'lib/server/argument_parser.rb', line 21

def parser
  @parser
end

Instance Method Details



30
31
32
33
34
# File 'lib/server/argument_parser.rb', line 30

def banner
  @parser.banner = "Usage: #{File.basename($PROGRAM_NAME)} [port] [options]"
  @parser.separator ''
  @parser.separator 'Options:'
end

#helpObject



81
82
83
84
85
86
# File 'lib/server/argument_parser.rb', line 81

def help
  @parser.on_tail('-?', '--help', 'Show this message') do
    puts @parser
    exit
  end
end

#idle_readingObject



56
57
58
59
60
# File 'lib/server/argument_parser.rb', line 56

def idle_reading
  @parser.on('--idle-reading=seconds', 'Amount of time channel can idle without incoming data') do |v|
    @options[:idle_reading] = v.to_i
  end
end

#idle_writingObject



62
63
64
65
66
# File 'lib/server/argument_parser.rb', line 62

def idle_writing
  @parser.on('--idle-writing=seconds', 'Amount of time channel can idle without outgoing data') do |v|
    @options[:idle_writing] = v.to_i
  end
end

#log_levelObject



74
75
76
77
78
79
# File 'lib/server/argument_parser.rb', line 74

def log_level
  @parser.on_tail('-v', '--verbose', 'Increase verbosity') do
    current_level = @options.fetch(:log_level, 0)
    @options[:log_level] = current_level - 1
  end
end

#log_requestsObject



68
69
70
71
72
# File 'lib/server/argument_parser.rb', line 68

def log_requests
  @parser.on('-r', '--log-requests', 'Include individual request info in log output') do
    @options[:log_requests] = true
  end
end

#portObject



43
44
45
46
47
48
# File 'lib/server/argument_parser.rb', line 43

def port
  description = "Port on which to listen for connections; default: #{@options[:port]}"
  @parser.on('-p', '--port=<port>', Integer, description) do |v|
    @options[:port] = validated_port(v).to_i
  end
end

#sslObject



50
51
52
53
54
# File 'lib/server/argument_parser.rb', line 50

def ssl
  @parser.on('-s', '--ssl', "Enable SSL socket server; default: #{@options[:ssl]}") do
    @options[:ssl] = true
  end
end

#validated_port(value, integer_pattern = /^\d+$/) ⇒ Object

Raises:

  • (OptionParser::InvalidArgument)


36
37
38
39
40
41
# File 'lib/server/argument_parser.rb', line 36

def validated_port(value, integer_pattern = /^\d+$/)
  raise OptionParser::InvalidArgument, "Invalid port: #{value}" unless \
    integer_pattern.match?(value.to_s) && value.positive? && value < 65_536

  value
end

#versionObject



88
89
90
91
92
93
# File 'lib/server/argument_parser.rb', line 88

def version
  @parser.on_tail('--version', 'Show version') do
    puts "#{File.basename($PROGRAM_NAME)} version #{::Server::VERSION}"
    exit
  end
end