Class: DiscourseTheme::Watcher

Inherits:
Object
  • Object
show all
Defined in:
lib/discourse_theme/watcher.rb

Instance Method Summary collapse

Constructor Details

#initialize(dir:, uploader:) ⇒ Watcher

Returns a new instance of Watcher.



2
3
4
5
# File 'lib/discourse_theme/watcher.rb', line 2

def initialize(dir:, uploader:)
  @dir = dir
  @uploader = uploader
end

Instance Method Details

#watch ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/discourse_theme/watcher.rb', line 7

def watch
  listener = Listen.to(@dir) do |modified, added, removed|
    if modified.length == 1 &&
        added.length == 0 &&
        removed.length == 0 &&
        (resolved = resolve_file(modified[0]))

      target, name, type_id = resolved
      print "Updating #{target} #{name}: "

      @uploader.upload_theme_field(
        target: target,
        name: name,
        value: File.read(modified[0]),
        type_id: type_id
      )
    else
      print "Full re-sync is required, re-uploading theme: "
      @uploader.upload_full_theme
    end
  end

  listener.start
  sleep

end