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



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

def self.build
  new.build
end

.enabled?Boolean

Returns:

  • (Boolean)


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

def self.enabled?
  Avo.configuration.tailwindcss_integration_enabled && tailwindcss_available? && tailwindcss_rails_version_supported?
end

.tailwindcss_available?Boolean

Returns:

  • (Boolean)


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

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

.tailwindcss_rails_version_supported?Boolean

tailwindcss-rails depends on tailwindcss-ruby at every major version, so requiring "tailwindcss/ruby" succeeds even when the host app is pinned to tailwindcss-rails 3.x (Tailwind CSS v3). Avo's build pipeline emits Tailwind v4-only syntax, so we only enable the integration when tailwindcss-rails (if bundled at all) is >= 4.0.0. Apps that manage tailwindcss-ruby directly (no tailwindcss-rails) are unaffected by this check.

Returns:

  • (Boolean)


30
31
32
33
34
35
# File 'lib/avo/tailwind_builder.rb', line 30

def self.tailwindcss_rails_version_supported?
  spec = Gem.loaded_specs["tailwindcss-rails"]
  return true unless spec

  Gem::Version.new(spec.version) >= Gem::Version.new("4.0.0")
end

.watchObject



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

def self.watch
  new.watch
end

Instance Method Details

#buildObject



37
38
39
40
41
42
43
44
45
# File 'lib/avo/tailwind_builder.rb', line 37

def build
  return true unless self.class.enabled?

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

#watchObject



47
48
49
50
51
52
53
# File 'lib/avo/tailwind_builder.rb', line 47

def watch
  return true unless self.class.enabled?

  run_engine_css_prebuilds
  generate_input_file
  run_tailwindcss("--watch")
end