lib/ariadne/forms/builder.rb
# frozen_string_literal: true
# See: https://github.com/rails/rails/pull/46666
ActionView::Helpers::Tags::Base.prepend(
Module.new do
def initialize(*args, **kwargs, &block)
super
return if defined?(@generate_error_markup)
@generate_error_markup = @options.delete(:generate_error_markup) { true }
end
private
def error_wrapping(html_tag)
return html_tag unless @generate_error_markup
# :nocov:
super
# :nocov:
end
end,
)
module Ariadne
module Forms
module Tags
# :nodoc:
class TextField < ::ActionView::Helpers::Tags::TextField
def attributes
render
end
private
def tag(_name, options)
options
end
end
end
# :nodoc:
class Builder < ActionView::Helpers::FormBuilder
alias_method :ariadne_fields_for, :fields_for
def label(method, text = nil, **options, &block)
super(method, text, classify(options).merge(generate_error_markup: false), &block)
end
def check_box(method, options = {}, checked_value = 1, unchecked_value = 0, &block)
super(
method,
classify(options).merge(generate_error_markup: false),
checked_value,
unchecked_value,
&block
)
end
def radio_button(*args, **options, &block)
super(*args, classify(options).merge(generate_error_markup: false), &block)
end
def select(method, choices = nil, options = {}, html_options = {}, &block)
super(method, choices, options.merge(generate_error_markup: false), classify(html_options), &block)
end
def text_field(*args, **options, &block)
super(*args, classify(options).merge(generate_error_markup: false), &block)
end
def text_field_attributes(method, options = {})
Tags::TextField.new(@object_name, method, @template, options).attributes
end
def text_area(*args, **options, &block)
super(*args, classify(options).merge(generate_error_markup: false), &block)
end
private
def classify(options)
Ariadne::Forms::Utils.classify(options)
end
end
end
end