Sha256: b368434fcd42471b7d628a14133071e017dd68d8dfa091df6d3de57ea8dd84d9

Contents?: true

Size: 1.58 KB

Versions: 18

Compression:

Stored size: 1.58 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, poll: false)
          @ctx = ctx
          @theme = theme
          @syncer = syncer
          @ignore_filter = ignore_filter
          @listener = Listen.to(@theme.root, force_polling: poll) 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

18 entries across 18 versions & 1 rubygems

Version Path
shopify-cli-2.13.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.12.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.11.2 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.11.1 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.11.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.10.2 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.10.1 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.10.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.9.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.8.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.7.4 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.7.3 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.7.2 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.7.1 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.7.0 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.6.6 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.6.5 lib/shopify_cli/theme/dev_server/watcher.rb
shopify-cli-2.6.4 lib/shopify_cli/theme/dev_server/watcher.rb