Sha256: f9cde57d430656d3d8108fc60755a7bf26c7d05dfac7b736f417173ad4082cd7

Contents?: true

Size: 1.34 KB

Versions: 3

Compression:

Stored size: 1.34 KB

Contents

require 'listen'

module Locomotive::Wagon

  class Listen < Struct.new(:path, :cache)

    def self.start(path, cache)
      new(path, cache).tap { |instance| instance.apply_definitions }
    end

    def apply_definitions
      self.definitions.each do |definition|
        self.apply(definition)
      end
    end

    protected

    def definitions
      [
        ['config', /\.yml/, [:site, :content_types, :pages, :snippets, :content_entries, :translations]],
        ['app/views', %r{(pages|snippets)/(.+\.liquid).*}, [:pages, :snippets]],
        ['app/content_types', /\.yml/, [:content_types, :content_entries]],
        ['data', /\.yml/, :content_entries],
        ['public', %r{((stylesheets|javascripts)/(.+\.(css|js))).*}, []]
      ]
    end

    def apply(definition)
      reloader  = build_reloader([*definition.last])
      filter    = definition[1]
      _path     = File.expand_path(File.join(self.path, definition.first))

      listener = ::Listen.to(_path, only: filter, &reloader)

      # non blocking listener
      listener.start
    end

    def build_reloader(resources)
      Proc.new do |modified, added, removed|
        resources.each do |resource|
          Locomotive::Common::Logger.info "service=listen action=reload resource=#{resource} timestamp=#{Time.now}"
          cache.delete(resource)
        end
      end
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
locomotivecms_wagon-2.0.0.pre.alpha.2 lib/locomotive/wagon/tools/listen.rb
locomotivecms_wagon-2.0.0.pre.alpha.1 lib/locomotive/wagon/tools/listen.rb
locomotivecms_wagon-2.0.0.pre.alpha lib/locomotive/wagon/tools/listen.rb