class Jekyll::Webpack::Debouncer

Attributes

config[R]
dist_path[R]
has_run[R]
listener[R]
run_every_n[R]
run_once[R]
site[R]
watch_nodes[R]

Public Class Methods

new(site, debounce_config) click to toggle source
# File lib/jekyll/webpack/debouncer.rb, line 11
def initialize(site, debounce_config)
  @config = debounce_config
  @run_once = debounce_config.dig('run_once')
  @run_every_n = debounce_config.dig('every')
  @watch_nodes = debounce_config.dig('watch')

  if @watch_nodes
    if Array === @watch_nodes
      watch_paths = @watch_nodes.map { |file| File.join(site.source, file) }
    else
      watch_paths = [@watch_nodes]
    end

    @listener = Listen.to(*watch_paths) do |modified, added, removed|
      @has_run = false
    end
    @listener.start
  end

  @run_counter = 0
  @has_run = false
  @site = site
  @dist_tmpdir = Dir.mktmpdir("jekyll_webpack_dist_#{File.split(site.dest).last}")
  @dist_path = File.expand_path('dist', site.dest)
end

Public Instance Methods

build() { || ... } click to toggle source
# File lib/jekyll/webpack/debouncer.rb, line 37
def build
  if run_once || watch_nodes
    if has_run
      restore_dist
    else
      yield
      extract_dist
    end
  elsif run_every_n
    if !has_run
      yield
      @run_counter += 1
      extract_dist
    elsif run_every_n == @run_counter
      yield
      @run_counter = 0
      extract_dist
    else
      restore_dist
      @run_counter += 1
    end
  end

  @has_run = true
end
extract_dist() click to toggle source
# File lib/jekyll/webpack/debouncer.rb, line 63
def extract_dist
  FileUtils.cp_r(dist_path, @dist_tmpdir)
end
restore_dist() click to toggle source
# File lib/jekyll/webpack/debouncer.rb, line 67
def restore_dist
  FileUtils.cp_r(File.join(@dist_tmpdir, 'dist'), File.join(site.dest, 'dist'))
end