Skip to content

Commit 1f95f93

Browse files
committed
Add support for post process classes
1 parent 69468f6 commit 1f95f93

8 files changed

+91
-1
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
- Add support for slots ([#15](https://github.com/avo-hq/class_variants/pull/15))
33
- Allow passing additional classes when render ([#17](https://github.com/avo-hq/class_variants/pull/17))
44
- Add helper module for defining variants ([#18](https://github.com/avo-hq/class_variants/pull/18))
5+
- Add support for post process classes ([#16](https://github.com/avo-hq/class_variants/pull/16))
56

67
## 0.0.8 (2024-10-24)
78
- Deprecate usage of positional arguments ([#12](https://github.com/avo-hq/class_variants/pull/12))

Gemfile

+4
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,7 @@ gem "rubocop-minitest", require: false
1111
gem "rubocop-rake", require: false
1212
gem "standard", ">= 1.35.1", require: false
1313
gem "standard-performance", require: false
14+
15+
install_if -> { !RUBY_VERSION.start_with?("3.0") } do
16+
gem "tailwind_merge"
17+
end

Gemfile.lock

+4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ GEM
1515
json (2.7.2)
1616
language_server-protocol (3.17.0.3)
1717
lint_roller (1.1.0)
18+
lru_redux (1.1.0)
1819
minitest (5.25.1)
1920
parallel (1.26.3)
2021
parser (3.3.5.0)
@@ -64,6 +65,8 @@ GEM
6465
lint_roller (~> 1.1)
6566
rubocop-performance (~> 1.22.0)
6667
stringio (3.1.1)
68+
tailwind_merge (0.13.1)
69+
lru_redux (~> 1.1)
6770
unicode-display_width (2.6.0)
6871

6972
PLATFORMS
@@ -81,6 +84,7 @@ DEPENDENCIES
8184
rubocop-rake
8285
standard (>= 1.35.1)
8386
standard-performance
87+
tailwind_merge
8488

8589
BUNDLED WITH
8690
2.5.20

lib/class_variants.rb

+9
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
require "class_variants/version"
22
require "class_variants/action_view/helpers"
3+
require "class_variants/configuration"
34
require "class_variants/instance"
45
require "class_variants/helper"
56
require "class_variants/railtie" if defined?(Rails)
67

78
module ClassVariants
89
class << self
10+
def configuration
11+
@configuration ||= Configuration.new
12+
end
13+
14+
def configure(&block)
15+
yield(configuration)
16+
end
17+
918
def build(...)
1019
Instance.new(...)
1120
end

lib/class_variants/configuration.rb

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
module ClassVariants
2+
class Configuration
3+
def process_classes_with(&block)
4+
if block_given?
5+
@process_classes_with = block
6+
else
7+
@process_classes_with
8+
end
9+
end
10+
end
11+
end

lib/class_variants/instance.rb

+9-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def render(slot = :default, **overrides)
3434
result.compact!
3535

3636
# Return the final token list
37-
result.join " "
37+
with_classess_processor(result.join(" "))
3838
end
3939

4040
private
@@ -97,5 +97,13 @@ def expand_compound_variants(compound_variants)
9797
compound_variant.merge(slot: :default)
9898
end
9999
end
100+
101+
def with_classess_processor(classes)
102+
if ClassVariants.configuration.process_classes_with.respond_to?(:call)
103+
ClassVariants.configuration.process_classes_with.call(classes)
104+
else
105+
classes
106+
end
107+
end
100108
end
101109
end

test/configuration_test.rb

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
require "test_helper"
2+
3+
class ConfigurationTest < Minitest::Test
4+
def teardown
5+
ClassVariants.configuration.instance_variable_set(:@process_classes_with, nil)
6+
end
7+
8+
def test_configuration_process_classes_with_default
9+
refute ClassVariants.configuration.process_classes_with
10+
end
11+
12+
def test_configure
13+
ClassVariants.configure do |config|
14+
config.process_classes_with { |classes| classes }
15+
end
16+
17+
assert_respond_to ClassVariants.configuration.process_classes_with, :call
18+
end
19+
end

test/process_classes_with_test.rb

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
require "test_helper"
2+
3+
class ProcessClassesWithTest < Minitest::Test
4+
def teardown
5+
ClassVariants.configuration.instance_variable_set(:@process_classes_with, nil)
6+
end
7+
8+
def test_without_classes_processor
9+
assert_equal "border rounded px-2 py-1 p-5", ClassVariants.build(base: "border rounded px-2 py-1 p-5").render
10+
end
11+
12+
def test_with_classes_processor
13+
ClassVariants.configure do |config|
14+
config.process_classes_with do |classes|
15+
tailwind_merger.merge(classes)
16+
end
17+
end
18+
19+
assert_equal "border rounded p-5", ClassVariants.build(base: "border rounded px-2 py-1 p-5").render
20+
end
21+
22+
private
23+
24+
def tailwind_merger
25+
require "tailwind_merge"
26+
TailwindMerge::Merger.new
27+
rescue LoadError
28+
Class.new do
29+
def merge(classes)
30+
classes.gsub("px-2 py-1 ", "")
31+
end
32+
end.new
33+
end
34+
end

0 commit comments

Comments
 (0)