module Filewatcher::SpecHelper::WatchRun

Base module for Filewatcher runners in specs

Constants

CHANGES
TMP_DIR
TMP_FILES_DIR

It’s requried to split modifying files from result files like CLI dumpers

Attributes

initial_files[R]

Public Class Methods

new(initial_files:, changes:) click to toggle source
# File lib/filewatcher/spec_helper/watch_run.rb, line 32
def initialize(initial_files:, changes:)
  @initial_files = initial_files.transform_keys { |key| self.class.transform_spec_files(key) }

  @changes = changes

  debug "changes = #{@changes}"
end

Public Instance Methods

run(make_changes_times: 1) click to toggle source
# File lib/filewatcher/spec_helper/watch_run.rb, line 57
def run(make_changes_times: 1)
  start

  make_changes_times.times do
    make_changes

    wait seconds: 2
  end

  stop
end
start() click to toggle source
# File lib/filewatcher/spec_helper/watch_run.rb, line 40
def start
  debug 'start'

  FileUtils.mkdir_p self.class::TMP_FILES_DIR

  initial_files.each do |initial_file_path, initial_file_data|
    File.write(
      File.expand_path(initial_file_path),
      initial_file_data.fetch(:content, 'content1')
    )
  end

  debug "start initial_files = #{initial_files}"

  wait seconds: 1
end
stop() click to toggle source
# File lib/filewatcher/spec_helper/watch_run.rb, line 69
def stop
  debug 'stop'
  FileUtils.rm_r(self.class::TMP_FILES_DIR) if File.exist?(self.class::TMP_FILES_DIR)
end

Private Instance Methods

debug_file_mtime(file) click to toggle source
# File lib/filewatcher/spec_helper/watch_run.rb, line 111
def debug_file_mtime(file)
  file = File.expand_path file
  debug "stat #{file}: #{system_stat(file)}"
  debug "File.mtime = #{File.mtime(file).strftime('%F %T.%9N')}"
end
make_changes() click to toggle source
# File lib/filewatcher/spec_helper/watch_run.rb, line 95
def make_changes
  @changes.each do |change_file, change_data|
    debug "make changes, change_file = #{change_file}, change_data = #{change_data}"

    change_event = change_data.fetch(:event, :update)
    change_event = :create_dir if change_event == :create && change_data[:directory]

    change_block =
      self.class::CHANGES.fetch(change_event) { raise "Unknown change `#{change_event}`" }

    instance_exec(change_file, change_data, &change_block)
  end

  wait seconds: 1
end