diff --git a/lib/tailwindcss/compressor.rb b/lib/tailwindcss/compressor.rb
index f8c3889f..e8bb50b1 100644
--- a/lib/tailwindcss/compressor.rb
+++ b/lib/tailwindcss/compressor.rb
@@ -25,9 +25,8 @@ def call(input)
end
private
+
def files_with_class_names
- Rails.root.glob("app/views/**/*.*") +
- Rails.root.glob("app/helpers/**/*.rb") +
- Rails.root.glob("app/javascript/**/*.js")
+ Rails.application.config.tailwind.files_with_class_names
end
end
diff --git a/lib/tailwindcss/engine.rb b/lib/tailwindcss/engine.rb
index 9329dbbd..a89ba032 100644
--- a/lib/tailwindcss/engine.rb
+++ b/lib/tailwindcss/engine.rb
@@ -2,6 +2,13 @@
module Tailwindcss
class Engine < ::Rails::Engine
+ config.tailwind = ActiveSupport::OrderedOptions.new
+ config.tailwind.files_with_class_names = []
+
+ initializer "set files with class names" do
+ config.tailwind.files_with_class_names += Rails.root.glob("app/views/**/*.*") + Rails.root.glob("app/helpers/**/*.rb") + Rails.root.glob("app/javascript/**/*.js")
+ end
+
initializer "tailwindcss.compressor" do
Sprockets.register_compressor "text/css", :purger, Tailwindcss::Compressor
end
diff --git a/lib/tasks/tailwindcss_tasks.rake b/lib/tasks/tailwindcss_tasks.rake
index f568e76f..0194f171 100644
--- a/lib/tasks/tailwindcss_tasks.rake
+++ b/lib/tasks/tailwindcss_tasks.rake
@@ -5,7 +5,7 @@ namespace :tailwindcss do
end
desc "Show the list of class names being kept in Tailwind CSS"
- task :keeping_class_names do
+ task keeping_class_names: :environment do
puts Tailwindcss::Purger.extract_class_names_from(default_files_with_class_names)
end
@@ -16,7 +16,7 @@ namespace :tailwindcss do
end
def default_files_with_class_names
- Rails.root.glob("app/views/**/*.*") + Rails.root.glob("app/helpers/**/*.rb")
+ Rails.application.config.tailwind.files_with_class_names
end
def tailwind_css
diff --git a/test/compressor_test.rb b/test/compressor_test.rb
new file mode 100644
index 00000000..3037315d
--- /dev/null
+++ b/test/compressor_test.rb
@@ -0,0 +1,16 @@
+require "test_helper"
+
+class Tailwindcss::CompressorTest < ActiveSupport::TestCase
+ test "files_with_class_names on default configuration" do
+ default_files_with_class_names = Rails.root.glob("app/views/**/*.*") + Rails.root.glob("app/helpers/**/*.rb") + Rails.root.glob("app/javascript/**/*.js")
+
+ assert_equal default_files_with_class_names, Tailwindcss::Compressor.new.instance_variable_get(:@options)[:files_with_class_names]
+ end
+
+ test "files_with_class_names on custom configuration" do
+ files_with_class_names = Rails.application.config.tailwind.files_with_class_names + Rails.root.glob("app/custom_views/**/*.*")
+ with_files_with_class_names_configuration(files_with_class_names) do
+ assert_equal files_with_class_names, Tailwindcss::Compressor.new.instance_variable_get(:@options)[:files_with_class_names]
+ end
+ end
+end
diff --git a/test/dummy/Rakefile b/test/dummy/Rakefile
new file mode 100644
index 00000000..d1baef06
--- /dev/null
+++ b/test/dummy/Rakefile
@@ -0,0 +1,3 @@
+require_relative "config/application"
+
+Rails.application.load_tasks
diff --git a/test/dummy/app/assets/config/manifest.js b/test/dummy/app/assets/config/manifest.js
new file mode 100644
index 00000000..59181933
--- /dev/null
+++ b/test/dummy/app/assets/config/manifest.js
@@ -0,0 +1,2 @@
+//= link_tree ../images
+//= link_directory ../stylesheets .css
diff --git a/test/dummy/app/assets/images/.keep b/test/dummy/app/assets/images/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/test/dummy/app/assets/stylesheets/application.css b/test/dummy/app/assets/stylesheets/application.css
new file mode 100644
index 00000000..38fa2fb8
--- /dev/null
+++ b/test/dummy/app/assets/stylesheets/application.css
@@ -0,0 +1,4 @@
+/*
+ *= require_tree .
+ *= require_self
+ */
diff --git a/test/dummy/app/controllers/application_controller.rb b/test/dummy/app/controllers/application_controller.rb
new file mode 100644
index 00000000..09705d12
--- /dev/null
+++ b/test/dummy/app/controllers/application_controller.rb
@@ -0,0 +1,2 @@
+class ApplicationController < ActionController::Base
+end
diff --git a/test/dummy/app/controllers/concerns/.keep b/test/dummy/app/controllers/concerns/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/test/dummy/app/controllers/posts_controller.rb b/test/dummy/app/controllers/posts_controller.rb
new file mode 100644
index 00000000..f8917e7b
--- /dev/null
+++ b/test/dummy/app/controllers/posts_controller.rb
@@ -0,0 +1,3 @@
+class PostsController < ApplicationController
+ def index; end
+end
diff --git a/test/dummy/app/custom_views/posts/index.html.erb b/test/dummy/app/custom_views/posts/index.html.erb
new file mode 100644
index 00000000..b91d3cef
--- /dev/null
+++ b/test/dummy/app/custom_views/posts/index.html.erb
@@ -0,0 +1 @@
+
Posts
diff --git a/test/dummy/app/helpers/application_helper.rb b/test/dummy/app/helpers/application_helper.rb
new file mode 100644
index 00000000..de6be794
--- /dev/null
+++ b/test/dummy/app/helpers/application_helper.rb
@@ -0,0 +1,2 @@
+module ApplicationHelper
+end
diff --git a/test/dummy/app/javascript/packs/application.js b/test/dummy/app/javascript/packs/application.js
new file mode 100644
index 00000000..9ae9f331
--- /dev/null
+++ b/test/dummy/app/javascript/packs/application.js
@@ -0,0 +1,3 @@
+//= require rails-ujs
+//= require activestorage
+//= require_tree .
diff --git a/test/dummy/app/models/application_record.rb b/test/dummy/app/models/application_record.rb
new file mode 100644
index 00000000..10a4cba8
--- /dev/null
+++ b/test/dummy/app/models/application_record.rb
@@ -0,0 +1,3 @@
+class ApplicationRecord < ActiveRecord::Base
+ self.abstract_class = true
+end
diff --git a/test/dummy/app/models/concerns/.keep b/test/dummy/app/models/concerns/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/test/dummy/app/views/layouts/application.html.erb b/test/dummy/app/views/layouts/application.html.erb
new file mode 100644
index 00000000..991d86e1
--- /dev/null
+++ b/test/dummy/app/views/layouts/application.html.erb
@@ -0,0 +1,17 @@
+
+
+
+ Dummy
+
+ <%= csrf_meta_tags %>
+ <%= csp_meta_tag %>
+ <%= stylesheet_link_tag "inter-font", "data-turbo-track": "reload" %>
+ <%= stylesheet_link_tag "tailwind", "data-turbo-track": "reload" %>
+
+ <%= stylesheet_link_tag 'application', media: 'all' %>
+
+
+
+ <%= yield %>
+
+
diff --git a/test/dummy/bin/rails b/test/dummy/bin/rails
new file mode 100755
index 00000000..6fb4e405
--- /dev/null
+++ b/test/dummy/bin/rails
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+APP_PATH = File.expand_path('../config/application', __dir__)
+require_relative "../config/boot"
+require "rails/commands"
diff --git a/test/dummy/bin/rake b/test/dummy/bin/rake
new file mode 100755
index 00000000..4fbf10b9
--- /dev/null
+++ b/test/dummy/bin/rake
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+require_relative "../config/boot"
+require "rake"
+Rake.application.run
diff --git a/test/dummy/bin/setup b/test/dummy/bin/setup
new file mode 100755
index 00000000..51a63ccb
--- /dev/null
+++ b/test/dummy/bin/setup
@@ -0,0 +1,23 @@
+#!/usr/bin/env ruby
+require "fileutils"
+
+APP_ROOT = File.expand_path('..', __dir__)
+
+def system!(*args)
+ system(*args) || abort("\n== Command #{args} failed ==")
+end
+
+FileUtils.chdir APP_ROOT do
+ puts '== Installing dependencies =='
+ system! 'gem install bundler --conservative'
+ system('bundle check') || system!('bundle install')
+
+ puts "\n== Preparing database =="
+ system! 'bin/rails db:prepare'
+
+ puts "\n== Removing old logs and tempfiles =="
+ system! 'bin/rails log:clear tmp:clear'
+
+ puts "\n== Restarting application server =="
+ system! 'bin/rails restart'
+end
diff --git a/test/dummy/config.ru b/test/dummy/config.ru
new file mode 100644
index 00000000..5c59c6f5
--- /dev/null
+++ b/test/dummy/config.ru
@@ -0,0 +1,4 @@
+require_relative "config/environment"
+
+run Rails.application
+Rails.application.load_server
diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb
new file mode 100644
index 00000000..ba4088d7
--- /dev/null
+++ b/test/dummy/config/application.rb
@@ -0,0 +1,20 @@
+require_relative "boot"
+
+require "rails"
+require "active_model/railtie"
+require "active_job/railtie"
+require "active_record/railtie"
+require "action_controller/railtie"
+require "action_view/railtie"
+require "sprockets/railtie"
+
+Bundler.require(*Rails.groups)
+require "tailwindcss-rails"
+
+module Dummy
+ class Application < Rails::Application
+ config.load_defaults Rails::VERSION::STRING.to_f
+
+ config.paths["app/views"].unshift("#{Rails.root}/app/custom_views")
+ end
+end
diff --git a/test/dummy/config/boot.rb b/test/dummy/config/boot.rb
new file mode 100644
index 00000000..7d731bac
--- /dev/null
+++ b/test/dummy/config/boot.rb
@@ -0,0 +1,4 @@
+ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../Gemfile', __dir__)
+
+require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"])
+$LOAD_PATH.unshift File.expand_path('../../../lib', __dir__)
diff --git a/test/dummy/config/database.yml b/test/dummy/config/database.yml
new file mode 100644
index 00000000..c52c94d7
--- /dev/null
+++ b/test/dummy/config/database.yml
@@ -0,0 +1,16 @@
+default: &default
+ adapter: sqlite3
+ pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
+ timeout: 5000
+
+development:
+ <<: *default
+ database: db/development.sqlite3
+
+test:
+ <<: *default
+ database: db/test.sqlite3
+
+production:
+ <<: *default
+ database: db/production.sqlite3
diff --git a/test/dummy/config/environment.rb b/test/dummy/config/environment.rb
new file mode 100644
index 00000000..73a3979b
--- /dev/null
+++ b/test/dummy/config/environment.rb
@@ -0,0 +1,3 @@
+require_relative "application"
+
+Rails.application.initialize!
diff --git a/test/dummy/config/environments/development.rb b/test/dummy/config/environments/development.rb
new file mode 100644
index 00000000..32c900e6
--- /dev/null
+++ b/test/dummy/config/environments/development.rb
@@ -0,0 +1,37 @@
+require "active_support/core_ext/integer/time"
+
+Rails.application.configure do
+ config.cache_classes = false
+
+ config.eager_load = false
+
+ config.consider_all_requests_local = true
+
+ if Rails.root.join('tmp', 'caching-dev.txt').exist?
+ config.action_controller.perform_caching = true
+ config.action_controller.enable_fragment_cache_logging = true
+
+ config.cache_store = :memory_store
+ config.public_file_server.headers = {
+ 'Cache-Control' => "public, max-age=#{2.days.to_i}"
+ }
+ else
+ config.action_controller.perform_caching = false
+
+ config.cache_store = :null_store
+ end
+
+ config.active_support.deprecation = :log
+
+ config.active_support.disallowed_deprecation = :raise
+
+ config.active_support.disallowed_deprecation_warnings = []
+
+ config.active_record.migration_error = :page_load
+
+ config.active_record.verbose_query_logs = true
+
+ config.assets.debug = true
+
+ config.assets.quiet = true
+end
diff --git a/test/dummy/config/environments/production.rb b/test/dummy/config/environments/production.rb
new file mode 100644
index 00000000..9e71eae6
--- /dev/null
+++ b/test/dummy/config/environments/production.rb
@@ -0,0 +1,38 @@
+require "active_support/core_ext/integer/time"
+
+Rails.application.configure do
+ config.cache_classes = true
+
+ config.eager_load = true
+
+ config.consider_all_requests_local = false
+ config.action_controller.perform_caching = true
+
+ config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
+
+ config.assets.css_compressor = :purger
+
+ config.assets.compile = false
+
+ config.log_level = :info
+
+ config.log_tags = [ :request_id ]
+
+ config.i18n.fallbacks = true
+
+ config.active_support.deprecation = :notify
+
+ config.active_support.disallowed_deprecation = :log
+
+ config.active_support.disallowed_deprecation_warnings = []
+
+ config.log_formatter = ::Logger::Formatter.new
+
+ if ENV["RAILS_LOG_TO_STDOUT"].present?
+ logger = ActiveSupport::Logger.new(STDOUT)
+ logger.formatter = config.log_formatter
+ config.logger = ActiveSupport::TaggedLogging.new(logger)
+ end
+
+ config.active_record.dump_schema_after_migration = false
+end
diff --git a/test/dummy/config/environments/test.rb b/test/dummy/config/environments/test.rb
new file mode 100644
index 00000000..1429ba89
--- /dev/null
+++ b/test/dummy/config/environments/test.rb
@@ -0,0 +1,26 @@
+require "active_support/core_ext/integer/time"
+
+Rails.application.configure do
+ config.cache_classes = true
+
+ config.eager_load = false
+
+ config.public_file_server.enabled = true
+ config.public_file_server.headers = {
+ 'Cache-Control' => "public, max-age=#{1.hour.to_i}"
+ }
+
+ config.consider_all_requests_local = true
+ config.action_controller.perform_caching = false
+ config.cache_store = :null_store
+
+ config.action_dispatch.show_exceptions = false
+
+ config.action_controller.allow_forgery_protection = false
+
+ config.active_support.deprecation = :stderr
+
+ config.active_support.disallowed_deprecation = :raise
+
+ config.active_support.disallowed_deprecation_warnings = []
+end
diff --git a/test/dummy/config/initializers/assets.rb b/test/dummy/config/initializers/assets.rb
new file mode 100644
index 00000000..0d6dbb27
--- /dev/null
+++ b/test/dummy/config/initializers/assets.rb
@@ -0,0 +1 @@
+Rails.application.config.assets.version = '1.0'
diff --git a/test/dummy/config/initializers/backtrace_silencers.rb b/test/dummy/config/initializers/backtrace_silencers.rb
new file mode 100644
index 00000000..ec1faa68
--- /dev/null
+++ b/test/dummy/config/initializers/backtrace_silencers.rb
@@ -0,0 +1 @@
+Rails.backtrace_cleaner.remove_silencers! if ENV["BACKTRACE"]
diff --git a/test/dummy/config/initializers/cookies_serializer.rb b/test/dummy/config/initializers/cookies_serializer.rb
new file mode 100644
index 00000000..c0d0a025
--- /dev/null
+++ b/test/dummy/config/initializers/cookies_serializer.rb
@@ -0,0 +1 @@
+Rails.application.config.action_dispatch.cookies_serializer = :json
diff --git a/test/dummy/config/initializers/filter_parameter_logging.rb b/test/dummy/config/initializers/filter_parameter_logging.rb
new file mode 100644
index 00000000..61387142
--- /dev/null
+++ b/test/dummy/config/initializers/filter_parameter_logging.rb
@@ -0,0 +1,3 @@
+Rails.application.config.filter_parameters += [
+ :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+]
diff --git a/test/dummy/config/initializers/wrap_parameters.rb b/test/dummy/config/initializers/wrap_parameters.rb
new file mode 100644
index 00000000..8b64a784
--- /dev/null
+++ b/test/dummy/config/initializers/wrap_parameters.rb
@@ -0,0 +1,3 @@
+ActiveSupport.on_load(:action_controller) do
+ wrap_parameters format: [:json]
+end
diff --git a/test/dummy/config/puma.rb b/test/dummy/config/puma.rb
new file mode 100644
index 00000000..359cb881
--- /dev/null
+++ b/test/dummy/config/puma.rb
@@ -0,0 +1,13 @@
+max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
+threads min_threads_count, max_threads_count
+
+worker_timeout 3600 if ENV.fetch("RAILS_ENV", "development") == "development"
+
+port ENV.fetch("PORT") { 3000 }
+
+environment ENV.fetch("RAILS_ENV") { "development" }
+
+pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
+
+plugin :tmp_restart
diff --git a/test/dummy/config/routes.rb b/test/dummy/config/routes.rb
new file mode 100644
index 00000000..940340f8
--- /dev/null
+++ b/test/dummy/config/routes.rb
@@ -0,0 +1,3 @@
+Rails.application.routes.draw do
+ get 'posts', to: 'posts#index'
+end
diff --git a/test/dummy/config/storage.yml b/test/dummy/config/storage.yml
new file mode 100644
index 00000000..695f17bd
--- /dev/null
+++ b/test/dummy/config/storage.yml
@@ -0,0 +1,7 @@
+test:
+ service: Disk
+ root: <%= Rails.root.join("tmp/storage") %>
+
+local:
+ service: Disk
+ root: <%= Rails.root.join("storage") %>
diff --git a/test/dummy/lib/assets/.keep b/test/dummy/lib/assets/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/test/dummy/log/.keep b/test/dummy/log/.keep
new file mode 100644
index 00000000..e69de29b
diff --git a/test/dummy/public/404.html b/test/dummy/public/404.html
new file mode 100644
index 00000000..ea1fe98b
--- /dev/null
+++ b/test/dummy/public/404.html
@@ -0,0 +1,8 @@
+
+
+
+ 404
+
+
+
+
diff --git a/test/dummy/public/422.html b/test/dummy/public/422.html
new file mode 100644
index 00000000..c7a94c85
--- /dev/null
+++ b/test/dummy/public/422.html
@@ -0,0 +1,8 @@
+
+
+
+ 422
+
+
+
+
diff --git a/test/dummy/public/500.html b/test/dummy/public/500.html
new file mode 100644
index 00000000..f605e6e4
--- /dev/null
+++ b/test/dummy/public/500.html
@@ -0,0 +1,8 @@
+
+
+
+ 500
+
+
+
+
diff --git a/test/test_helper.rb b/test/test_helper.rb
index 787ccb8f..8b189a90 100644
--- a/test/test_helper.rb
+++ b/test/test_helper.rb
@@ -1,6 +1,8 @@
-# Configure Rails Environment
ENV["RAILS_ENV"] = "test"
+require_relative "dummy/config/environment"
+ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
+
require "rails"
require "rails/test_help"
require "debug"
@@ -12,3 +14,10 @@
class ActiveSupport::TestCase
self.file_fixture_path = File.expand_path("fixtures/files", __dir__)
end
+
+def with_files_with_class_names_configuration(new_value)
+ old_value = Rails.application.config.tailwind.files_with_class_names
+ Rails.application.config.tailwind.files_with_class_names = new_value
+ yield
+ Rails.application.config.tailwind.files_with_class_names = old_value
+end