Module: Dratools::Config

Defined in:
lib/dratools/config.rb

Overview

Reads advanced configuration from environment variables.

Constant Summary collapse

MAX_RECURSIVE_NON_RUN_XREFS_ENV =
'DRATOOLS_MAX_RECURSIVE_NON_RUN_XREFS'
TREE_MAX_DIRECT_RUNS_ENV =
'DRATOOLS_TREE_MAX_DIRECT_RUNS'
URL_MAX_DIRECT_RUNS_ENV =
'DRATOOLS_URL_MAX_DIRECT_RUNS'
SIZE_MAX_DIRECT_RUNS_ENV =
'DRATOOLS_SIZE_MAX_DIRECT_RUNS'
DOWNLOAD_CONNECT_TIMEOUT_ENV =
'DRATOOLS_DOWNLOAD_CONNECT_TIMEOUT'
DOWNLOAD_STALL_TIMEOUT_ENV =
'DRATOOLS_DOWNLOAD_STALL_TIMEOUT'
DOWNLOAD_STALL_SPEED_ENV =
'DRATOOLS_DOWNLOAD_STALL_SPEED'
DOWNLOAD_RETRY_COUNT_ENV =
'DRATOOLS_DOWNLOAD_RETRY_COUNT'
DOWNLOAD_RETRY_WAIT_ENV =
'DRATOOLS_DOWNLOAD_RETRY_WAIT'
DEFAULT_MAX_RECURSIVE_NON_RUN_XREFS =
100
DEFAULT_TREE_MAX_DIRECT_RUNS =
50
DEFAULT_URL_MAX_DIRECT_RUNS =
50
DEFAULT_SIZE_MAX_DIRECT_RUNS =
50
DEFAULT_DOWNLOAD_CONNECT_TIMEOUT_SECONDS =
30
DEFAULT_DOWNLOAD_STALL_TIMEOUT_SECONDS =
60
DEFAULT_DOWNLOAD_STALL_SPEED_BYTES_PER_SECOND =
1024
DEFAULT_DOWNLOAD_RETRY_COUNT =
3
DEFAULT_DOWNLOAD_RETRY_WAIT_SECONDS =
5
UNLIMITED_VALUE =
'unlimited'

Class Method Summary collapse

Class Method Details

.download_connect_timeout_secondsObject



53
54
55
# File 'lib/dratools/config.rb', line 53

def download_connect_timeout_seconds
  positive_integer(DOWNLOAD_CONNECT_TIMEOUT_ENV, DEFAULT_DOWNLOAD_CONNECT_TIMEOUT_SECONDS)
end

.download_retry_countObject



65
66
67
# File 'lib/dratools/config.rb', line 65

def download_retry_count
  non_negative_integer(DOWNLOAD_RETRY_COUNT_ENV, DEFAULT_DOWNLOAD_RETRY_COUNT)
end

.download_retry_wait_secondsObject



69
70
71
# File 'lib/dratools/config.rb', line 69

def download_retry_wait_seconds
  positive_integer(DOWNLOAD_RETRY_WAIT_ENV, DEFAULT_DOWNLOAD_RETRY_WAIT_SECONDS)
end

.download_stall_speed_bytes_per_secondObject



61
62
63
# File 'lib/dratools/config.rb', line 61

def download_stall_speed_bytes_per_second
  positive_integer(DOWNLOAD_STALL_SPEED_ENV, DEFAULT_DOWNLOAD_STALL_SPEED_BYTES_PER_SECOND)
end

.download_stall_timeout_secondsObject



57
58
59
# File 'lib/dratools/config.rb', line 57

def download_stall_timeout_seconds
  positive_integer(DOWNLOAD_STALL_TIMEOUT_ENV, DEFAULT_DOWNLOAD_STALL_TIMEOUT_SECONDS)
end

.invalid_environment_value!(name, value, expected) ⇒ Object

Raises:



110
111
112
# File 'lib/dratools/config.rb', line 110

def invalid_environment_value!(name, value, expected)
  raise InvalidOptionError, "invalid #{name} '#{value}' (expected: #{expected})"
end

.max_recursive_non_run_xrefsObject



31
32
33
34
35
36
# File 'lib/dratools/config.rb', line 31

def max_recursive_non_run_xrefs
  positive_integer_or_unlimited(
    MAX_RECURSIVE_NON_RUN_XREFS_ENV,
    DEFAULT_MAX_RECURSIVE_NON_RUN_XREFS
  )
end

.non_negative_integer(name, default) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
# File 'lib/dratools/config.rb', line 98

def non_negative_integer(name, default)
  value = ENV.fetch(name, '').strip
  return default if value.empty?

  integer = Integer(value, 10)
  return integer unless integer.negative?

  invalid_environment_value!(name, value, 'non-negative integer')
rescue ArgumentError
  invalid_environment_value!(name, value, 'non-negative integer')
end

.positive_integer(name, default) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
# File 'lib/dratools/config.rb', line 86

def positive_integer(name, default)
  value = ENV.fetch(name, '').strip
  return default if value.empty?

  integer = Integer(value, 10)
  return integer if integer.positive?

  invalid_environment_value!(name, value, 'positive integer')
rescue ArgumentError
  invalid_environment_value!(name, value, 'positive integer')
end

.positive_integer_or_unlimited(name, default) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/dratools/config.rb', line 73

def positive_integer_or_unlimited(name, default)
  value = ENV.fetch(name, '').strip
  return default if value.empty?
  return nil if value.casecmp?(UNLIMITED_VALUE)

  integer = Integer(value, 10)
  return integer if integer.positive?

  invalid_environment_value!(name, value, "positive integer or #{UNLIMITED_VALUE}")
rescue ArgumentError
  invalid_environment_value!(name, value, "positive integer or #{UNLIMITED_VALUE}")
end

.size_max_direct_runsObject



49
50
51
# File 'lib/dratools/config.rb', line 49

def size_max_direct_runs
  positive_integer_or_unlimited(SIZE_MAX_DIRECT_RUNS_ENV, DEFAULT_SIZE_MAX_DIRECT_RUNS)
end

.tree_max_direct_runsObject



38
39
40
41
42
43
# File 'lib/dratools/config.rb', line 38

def tree_max_direct_runs
  positive_integer_or_unlimited(
    TREE_MAX_DIRECT_RUNS_ENV,
    DEFAULT_TREE_MAX_DIRECT_RUNS
  )
end

.url_max_direct_runsObject



45
46
47
# File 'lib/dratools/config.rb', line 45

def url_max_direct_runs
  positive_integer_or_unlimited(URL_MAX_DIRECT_RUNS_ENV, DEFAULT_URL_MAX_DIRECT_RUNS)
end