Sha256: 908982d43016b93cf8beff04501aff05001b576c77dc527e722da42b4f5ab16d
Contents?: true
Size: 1.55 KB
Versions: 9
Compression:
Stored size: 1.55 KB
Contents
# frozen_string_literal: true require "listen" require "observer" module ShopifyCli module Theme module DevServer # Watches for file changes and publish events to the theme class Watcher include Observable def initialize(ctx, theme:, syncer:, ignore_filter: nil) @ctx = ctx @theme = theme @syncer = syncer @ignore_filter = ignore_filter @listener = Listen.to(@theme.root) do |modified, added, removed| changed notify_observers(modified, added, removed) end add_observer(self, :upload_files_when_changed) end def start @listener.start end def stop @listener.stop end def upload_files_when_changed(modified, added, removed) modified_theme_files = filter_theme_files(modified + added) if modified_theme_files.any? @syncer.enqueue_updates(modified_theme_files) end removed_theme_files = filter_remote_files(removed) if removed_theme_files.any? @syncer.enqueue_deletes(removed_theme_files) end end def filter_theme_files(files) files .select { |file| @theme.theme_file?(file) } .reject { |file| @ignore_filter&.ignore?(file) } end def filter_remote_files(files) files .select { |file| @syncer.remote_file?(file) } .reject { |file| @ignore_filter&.ignore?(file) } end end end end end
Version data entries
9 entries across 9 versions & 1 rubygems