Skip to content

Commit 7a8d82b

Browse files
committed
Simplify builders
1 parent a321286 commit 7a8d82b

15 files changed

+40
-203
lines changed

lib/phlex/rails.rb

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,6 @@ module Rails
77
class HelpersCalledBeforeRenderError < StandardError; end
88

99
autoload :Buffered, "phlex/rails/buffered"
10-
autoload :Decorator, "phlex/rails/decorator"
11-
12-
autoload :FormBuilder, "phlex/rails/form_builder"
13-
autoload :LabelBuilder, "phlex/rails/label_builder"
14-
autoload :CheckboxBuilder, "phlex/rails/checkbox_builder"
15-
autoload :RadioButtonBuilder, "phlex/rails/radio_button_builder"
1610

1711
autoload :CSV, "phlex/rails/csv"
1812

@@ -26,6 +20,8 @@ class HelpersCalledBeforeRenderError < StandardError; end
2620
autoload :Layout, "phlex/rails/layout"
2721
autoload :Partial, "phlex/rails/partial"
2822
autoload :Streaming, "phlex/rails/streaming"
23+
24+
autoload :Builder, "phlex/rails/builder"
2925
end
3026

3127
CSV.prepend(Phlex::Rails::CSV)

lib/phlex/rails/builder.rb

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# frozen_string_literal: true
2+
3+
class Phlex::Rails::Builder < BasicObject
4+
def initialize(object, component:)
5+
@object = object
6+
@component = component
7+
end
8+
9+
def respond_to_missing?(method_name, include_private = false)
10+
@object.respond_to?(method_name, include_private)
11+
end
12+
13+
def method_missing(*, **, &block)
14+
output = if block
15+
@object.public_send(*, **) do |builder|
16+
yield ::Phlex::Rails::Builder.new(builder, component: @component)
17+
end
18+
else
19+
@object.public_send(*, **)
20+
end
21+
22+
case output
23+
when ::ActiveSupport::SafeBuffer
24+
@component.raw(output)
25+
else
26+
output
27+
end
28+
end
29+
end

lib/phlex/rails/checkbox_builder.rb

Lines changed: 0 additions & 10 deletions
This file was deleted.

lib/phlex/rails/decorator.rb

Lines changed: 0 additions & 28 deletions
This file was deleted.

lib/phlex/rails/form_builder.rb

Lines changed: 0 additions & 134 deletions
This file was deleted.

lib/phlex/rails/helper_macros.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ def #{method_name}(*args, **kwargs, &block)
3333
RUBY
3434
end
3535

36-
def register_builder_yielding_helper(method_name, builder)
36+
def register_builder_yielding_helper(method_name)
3737
class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
3838
# frozen_string_literal: true
3939
4040
def #{method_name}(*args, **kwargs)
4141
output = if block_given?
4242
view_context.#{method_name}(*args, **kwargs) { |builder|
43-
yield #{builder.name}.new(builder, component: self)
43+
yield Phlex::Rails::Builder.new(builder, component: self)
4444
}
4545
else
4646
view_context.#{method_name}(*args, **kwargs)

lib/phlex/rails/helpers/collection_check_boxes.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::CollectionCheckBoxes
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_check_boxes)
7-
register_builder_yielding_helper def collection_check_boxes(...) = nil, Phlex::Rails::CheckboxBuilder
7+
register_builder_yielding_helper def collection_check_boxes(...) = nil
88
end

lib/phlex/rails/helpers/collection_radio_buttons.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::CollectionRadioButtons
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_radio_buttons)
7-
register_builder_yielding_helper def collection_radio_buttons(...) = nil, Phlex::Rails::RadioButtonBuilder
7+
register_builder_yielding_helper def collection_radio_buttons(...) = nil
88
end

lib/phlex/rails/helpers/fields.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::Fields
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields)
7-
register_builder_yielding_helper def fields(...) = nil, Phlex::Rails::FormBuilder
7+
register_builder_yielding_helper def fields(...) = nil
88
end

lib/phlex/rails/helpers/fields_for.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::FieldsFor
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-fields_for)
7-
register_builder_yielding_helper def fields_for(...) = nil, Phlex::Rails::FormBuilder
7+
register_builder_yielding_helper def fields_for(...) = nil
88
end

lib/phlex/rails/helpers/form_for.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::FormFor
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_for)
7-
register_builder_yielding_helper def form_for(...) = nil, Phlex::Rails::FormBuilder
7+
register_builder_yielding_helper def form_for(...) = nil
88
end

lib/phlex/rails/helpers/form_with.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::FormWith
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-form_with)
7-
register_builder_yielding_helper def form_with(...) = nil, Phlex::Rails::FormBuilder
7+
register_builder_yielding_helper def form_with(...) = nil
88
end

lib/phlex/rails/helpers/label.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,5 @@ module Phlex::Rails::Helpers::Label
44
extend Phlex::Rails::HelperMacros
55

66
# [Rails Docs](https://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-label)
7-
register_builder_yielding_helper def label(...) = nil, Phlex::Rails::LabelBuilder
7+
register_builder_yielding_helper def label(...) = nil
88
end

lib/phlex/rails/label_builder.rb

Lines changed: 0 additions & 6 deletions
This file was deleted.

lib/phlex/rails/radio_button_builder.rb

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)