Module: Siding::LoadManifest::EnvProbe

Defined in:
lib/siding/load_manifest.rb

Defined Under Namespace

Modules: Interceptor

Constant Summary collapse

IGNORED_PREFIXES =
%w[SIDING_ BUNDLE_ BUNDLER_ RUBY GEM_ XDG_ LC_].freeze
IGNORED_KEYS =
%w[
  RAILS_ENV RACK_ENV RAILS_GROUPS PATH PWD OLDPWD SHLVL _ LANG LANGUAGE
  TERM TERM_PROGRAM TERM_PROGRAM_VERSION TERM_SESSION_ID COLORTERM COLUMNS LINES
  SSH_AUTH_SOCK SSH_CLIENT SSH_CONNECTION SSH_TTY TMUX TMUX_PANE STY WINDOWID DISPLAY
  DBUS_SESSION_BUS_ADDRESS
  SOURCE_DATE_EPOCH DEBUG_RESOLVER DEBUG_RESOLVER_TREE SKIP_BUNDLER_CHECKSUM PAGER RI_PAGER
].to_set.freeze

Class Method Summary collapse

Class Method Details

.around_bulk_writeObject



375
376
377
378
379
380
381
382
383
384
385
# File 'lib/siding/load_manifest.rb', line 375

def around_bulk_write
  return yield unless recording?

  before = ENV.to_hash
  result = yield
  after = ENV.to_hash
  (before.keys | after.keys).each do |key|
    note_write(key) unless before[key] == after[key]
  end
  result
end

.around_write(key) ⇒ Object



366
367
368
369
370
371
372
373
# File 'lib/siding/load_manifest.rb', line 366

def around_write(key)
  return yield unless recording?

  before = raw(key)
  result = yield
  note_write(key) unless raw(key) == before
  result
end

.finishObject



358
359
360
361
362
# File 'lib/siding/load_manifest.rb', line 358

def finish
  stop
  keys = @reads - @writes.to_a
  keys.to_h { |key| [key, raw(key)] }
end

.ignored?(key) ⇒ Boolean

Returns:

  • (Boolean)


400
401
402
# File 'lib/siding/load_manifest.rb', line 400

def ignored?(key)
  IGNORED_KEYS.include?(key) || IGNORED_PREFIXES.any? { |prefix| key.start_with?(prefix) }
end

.note_read(key) ⇒ Object



391
392
393
394
395
396
397
398
# File 'lib/siding/load_manifest.rb', line 391

def note_read(key)
  return unless recording?
  return unless key.is_a?(String)
  return if ignored?(key)
  return unless @seen.add?(key)

  @reads << key
end

.note_write(key) ⇒ Object



387
388
389
# File 'lib/siding/load_manifest.rb', line 387

def note_write(key)
  @writes << key
end

.recording?Boolean

Returns:

  • (Boolean)


364
# File 'lib/siding/load_manifest.rb', line 364

def recording? = @recording

.startObject



344
345
346
347
348
349
350
351
# File 'lib/siding/load_manifest.rb', line 344

def start
  install
  @reads = []
  @seen = Set.new
  @writes = Set.new
  @recording = true
  self
end

.stopObject



353
354
355
356
# File 'lib/siding/load_manifest.rb', line 353

def stop
  @recording = false
  self
end