Module: CaptiveStackDetector::EnvVarsScanner
- Defined in:
- lib/captive_stack_detector/env_vars_scanner.rb
Constant Summary collapse
- HANDLED_VARS =
%w[ RAILS_ENV SECRET_KEY_BASE DATABASE_URL REDIS_URL RAILS_LOG_TO_STDOUT RAILS_SERVE_STATIC_FILES PORT RACK_ENV ].freeze
- ENV_KEY_PATTERN =
/ENV\.fetch\(['"]([A-Z_][A-Z0-9_]*)['"]|ENV\[['"]([A-Z_][A-Z0-9_]*)['"]\]/- SAFE_DEFAULT_PATTERN =
/\A,\s*(?:nil\b|true\b|false\b|'[^']*'|"[^"]*"|\d+)\s*[,)]/- BLOCK_DEFAULT_PATTERN =
/\A\s*\)\s*(?:do|\{)/- ASSIGNMENT_PATTERN =
/\A\s*\|\|=/
Class Method Summary collapse
Class Method Details
.scan(content) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/captive_stack_detector/env_vars_scanner.rb', line 15 def self.scan(content) result = {} uncommented(content).scan(ENV_KEY_PATTERN) do |fetch_key, bracket_key| after = Regexp.last_match.post_match if bracket_key next if ASSIGNMENT_PATTERN.match?(after) result[bracket_key] ||= "placeholder" else next if SAFE_DEFAULT_PATTERN.match?(after) || BLOCK_DEFAULT_PATTERN.match?(after) result[fetch_key] ||= "placeholder" end end result.reject { |k, _| HANDLED_VARS.include?(k) } end |