Skip to content

Commit 9c1bcc2

Browse files
authored
Merge pull request #2 from bopm/feature/another-approach
2 parents 163b310 + bcfcb60 commit 9c1bcc2

File tree

5 files changed

+185
-145
lines changed

5 files changed

+185
-145
lines changed

README.md

+8
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,14 @@ If you have Rails Engines in your application that use Tailwind CSS, they will b
406406
407407
- The engine must have `tailwindcss-rails` as gem dependency.
408408
- The engine must have a `app/assets/tailwind/<engine_name>/application.css` file or your application must have overridden file in the same location of your application root.
409+
- The engine must register itself in Tailwindcss Rails:
410+
```ruby
411+
initializer 'your_engine.tailwindcss' do |app|
412+
ActiveSupport.on_load(:tailwindcss_rails) do
413+
config.tailwindcss_rails.engines << Your::Engine.engine_name
414+
end
415+
end
416+
```
409417
410418
## Troubleshooting
411419

lib/tailwindcss/commands.rb

+16-17
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
module Tailwindcss
44
module Commands
55
class << self
6-
def compile_command(debug: false, **kwargs)
6+
def rails_root
7+
defined?(Rails) ? Rails.root : Pathname.new(Dir.pwd)
8+
end
9+
10+
def compile_command(input = rails_root.join("app/assets/tailwind/application.css").to_s, debug: false, **kwargs)
711
debug = ENV["TAILWINDCSS_DEBUG"].present? if ENV.key?("TAILWINDCSS_DEBUG")
8-
rails_root = defined?(Rails) ? Rails.root : Pathname.new(Dir.pwd)
912

1013
command = [
1114
Tailwindcss::Ruby.executable(**kwargs),
12-
"-i", rails_root.join("app/assets/tailwind/application.css").to_s,
15+
"-i", input,
1316
"-o", rails_root.join("app/assets/builds/tailwind.css").to_s,
1417
]
1518

@@ -21,8 +24,8 @@ def compile_command(debug: false, **kwargs)
2124
command
2225
end
2326

24-
def watch_command(always: false, poll: false, **kwargs)
25-
compile_command(**kwargs).tap do |command|
27+
def watch_command(input = rails_root.join("app/assets/tailwind/application.css").to_s, always: false, poll: false, **kwargs)
28+
compile_command(input, **kwargs).tap do |command|
2629
command << "-w"
2730
command << "always" if always
2831
command << "-p" if poll
@@ -39,15 +42,13 @@ def rails_css_compressor?
3942
defined?(Rails) && Rails&.application&.config&.assets&.css_compressor.present?
4043
end
4144

42-
def engines_tailwindcss_roots
45+
def engines_roots
4346
return [] unless defined?(Rails)
47+
return [] unless Rails.application&.config&.tailwindcss_rails&.engines
4448

45-
Rails::Engine.subclasses.select do |engine|
49+
Rails::Engine.descendants.select do |engine|
4650
begin
47-
spec = Gem::Specification.find_by_name(engine.engine_name)
48-
spec.dependencies.any? { |d| d.name == 'tailwindcss-rails' }
49-
rescue Gem::MissingSpecError
50-
false
51+
engine.engine_name.in?(Rails.application.config.tailwindcss_rails.engines)
5152
end
5253
end.map do |engine|
5354
[
@@ -57,19 +58,17 @@ def engines_tailwindcss_roots
5758
end.compact
5859
end
5960

60-
def enhance_command(command)
61-
engine_roots = Tailwindcss::Commands.engines_tailwindcss_roots
61+
def with_dynamic_input
62+
engine_roots = Tailwindcss::Commands.engines_roots
6263
if engine_roots.any?
6364
Tempfile.create('tailwind.css') do |file|
6465
file.write(engine_roots.map { |root| "@import \"#{root}\";" }.join("\n"))
6566
file.write("\n@import \"#{Rails.root.join('app/assets/tailwind/application.css')}\";\n")
6667
file.rewind
67-
transformed_command = command.dup
68-
transformed_command[2] = file.path
69-
yield transformed_command if block_given?
68+
yield file.path if block_given?
7069
end
7170
else
72-
yield command if block_given?
71+
yield rails_root.join("app/assets/tailwind/application.css").to_s if block_given?
7372
end
7473
end
7574
end

lib/tailwindcss/engine.rb

+7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
module Tailwindcss
44
class Engine < ::Rails::Engine
5+
config.tailwindcss_rails = ActiveSupport::OrderedOptions.new
6+
config.tailwindcss_rails.engines = []
7+
8+
initializer 'tailwindcss.load_hook' do |app|
9+
ActiveSupport.run_load_hooks(:tailwindcss_rails, app)
10+
end
11+
512
initializer "tailwindcss.disable_generator_stylesheets" do
613
Rails.application.config.generators.stylesheets = false
714
end

lib/tasks/build.rake

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace :tailwindcss do
44
debug = args.extras.include?("debug")
55
verbose = args.extras.include?("verbose")
66

7-
command = Tailwindcss::Commands.compile_command(debug: debug)
8-
Tailwindcss::Commands.enhance_command(command) do |transformed_command|
7+
Tailwindcss::Commands.with_dynamic_input do |input|
8+
command = Tailwindcss::Commands.compile_command(input, debug: debug)
99
env = Tailwindcss::Commands.command_env(verbose: verbose)
1010
puts "Running: #{Shellwords.join(command)}" if verbose
1111

@@ -20,8 +20,8 @@ namespace :tailwindcss do
2020
always = args.extras.include?("always")
2121
verbose = args.extras.include?("verbose")
2222

23-
command = Tailwindcss::Commands.watch_command(always: always, debug: debug, poll: poll)
24-
Tailwindcss::Commands.enhance_command(command) do |transformed_command|
23+
Tailwindcss::Commands.with_dynamic_input do |input|
24+
command = Tailwindcss::Commands.watch_command(input, always: always, debug: debug, poll: poll)
2525
env = Tailwindcss::Commands.command_env(verbose: verbose)
2626
puts "Running: #{Shellwords.join(command)}" if verbose
2727

0 commit comments

Comments
 (0)