Class: Avo::TailwindBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/avo/tailwind_builder.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.buildObject



5
6
7
# File 'lib/avo/tailwind_builder.rb', line 5

def self.build
  new.build
end

.custom_build_exists?Boolean

Returns:

  • (Boolean)


20
21
22
23
24
# File 'lib/avo/tailwind_builder.rb', line 20

def self.custom_build_exists?
  return false unless defined?(Rails)

  Rails.root.join("app", "assets", "builds", "avo.tailwind.css").exist?
end

.procfile_has_avo_tailwind_watcher?Boolean

Returns:

  • (Boolean)


26
27
28
29
30
31
# File 'lib/avo/tailwind_builder.rb', line 26

def self.procfile_has_avo_tailwind_watcher?
  path = Rails.root.join("Procfile.dev")
  return false unless path.exist?

  File.read(path).include?("avo:tailwindcss")
end

.tailwindcss_available?Boolean

Returns:

  • (Boolean)


13
14
15
16
17
18
# File 'lib/avo/tailwind_builder.rb', line 13

def self.tailwindcss_available?
  require "tailwindcss/ruby"
  true
rescue LoadError
  false
end

.watchObject



9
10
11
# File 'lib/avo/tailwind_builder.rb', line 9

def self.watch
  new.watch
end

Instance Method Details

#buildObject



33
34
35
36
37
38
39
40
# File 'lib/avo/tailwind_builder.rb', line 33

def build
  return true unless self.class.tailwindcss_available?

  generate_input_file
  success = run_tailwindcss("--minify")
  log_build_failure unless success
  success
end

#watchObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/avo/tailwind_builder.rb', line 42

def watch
  return unless self.class.tailwindcss_available?

  generate_input_file
  signature = host_avo_stylesheets_signature

  pid = spawn_tailwindcss("--minify", "--watch")

  begin
    loop do
      _, status = Process.waitpid2(pid, Process::WNOHANG)
      break if status

      new_signature = host_avo_stylesheets_signature
      if new_signature != signature
        signature = new_signature
        generate_input_file
      end

      sleep 1
    end
  rescue Interrupt
    Process.kill("TERM", pid)
    raise
  end
end