From ae6fab9f5eea7a3f843e870e43a3886309aacd13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Thu, 3 Oct 2019 00:49:28 +0200 Subject: [PATCH] Inherit from builder instead of monkey patching it We were monkey-patching FoundationRailsHelper::Formbuilder, which made form customization difficult. We can inherit from it, which is the standard way of extending what an existing class does, and make our form the default one. --- app/controllers/application_controller.rb | 1 + app/controllers/management/base_controller.rb | 1 + .../management/sessions_controller.rb | 1 + app/helpers/translatable_form_helper.rb | 4 ++-- config/initializers/foundation_rails_helper.rb | 17 ----------------- lib/consul_form_builder.rb | 15 +++++++++++++++ 6 files changed, 20 insertions(+), 19 deletions(-) delete mode 100644 config/initializers/foundation_rails_helper.rb create mode 100644 lib/consul_form_builder.rb diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 56d9dc046..ffe4f4f4a 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -6,6 +6,7 @@ class ApplicationController < ActionController::Base include HasOrders include AccessDeniedHandler + default_form_builder ConsulFormBuilder protect_from_forgery with: :exception before_action :authenticate_http_basic, if: :http_basic_auth_site? diff --git a/app/controllers/management/base_controller.rb b/app/controllers/management/base_controller.rb index 9f45fab39..78b0f7fc3 100644 --- a/app/controllers/management/base_controller.rb +++ b/app/controllers/management/base_controller.rb @@ -1,6 +1,7 @@ class Management::BaseController < ActionController::Base include GlobalizeFallbacks layout "management" + default_form_builder ConsulFormBuilder before_action :verify_manager before_action :set_locale diff --git a/app/controllers/management/sessions_controller.rb b/app/controllers/management/sessions_controller.rb index 5617c22fb..066fc6a9f 100644 --- a/app/controllers/management/sessions_controller.rb +++ b/app/controllers/management/sessions_controller.rb @@ -3,6 +3,7 @@ require "manager_authenticator" class Management::SessionsController < ActionController::Base include GlobalizeFallbacks include AccessDeniedHandler + default_form_builder ConsulFormBuilder def create destroy_session diff --git a/app/helpers/translatable_form_helper.rb b/app/helpers/translatable_form_helper.rb index ecd0a16a1..0b98b36b5 100644 --- a/app/helpers/translatable_form_helper.rb +++ b/app/helpers/translatable_form_helper.rb @@ -18,7 +18,7 @@ module TranslatableFormHelper "highlight" if translations_interface_enabled? end - class TranslatableFormBuilder < FoundationRailsHelper::FormBuilder + class TranslatableFormBuilder < ConsulFormBuilder attr_accessor :translations def translatable_fields(&block) @@ -94,7 +94,7 @@ module TranslatableFormHelper end end - class TranslationsFieldsBuilder < FoundationRailsHelper::FormBuilder + class TranslationsFieldsBuilder < ConsulFormBuilder %i[text_field text_area cktext_area].each do |field| define_method field do |attribute, options = {}| custom_label(attribute, options[:label], options[:label_options]) + diff --git a/config/initializers/foundation_rails_helper.rb b/config/initializers/foundation_rails_helper.rb deleted file mode 100644 index 3e121f0d9..000000000 --- a/config/initializers/foundation_rails_helper.rb +++ /dev/null @@ -1,17 +0,0 @@ -module FoundationRailsHelper - class FormBuilder < ActionView::Helpers::FormBuilder - def cktext_area(attribute, options) - field(attribute, options) do |opts| - super(attribute, opts) - end - end - - def enum_select(attribute, options = {}, html_options = {}) - choices = object.class.send(attribute.to_s.pluralize).keys.map do |name| - [object.class.human_attribute_name("#{attribute}.#{name}"), name] - end - - select attribute, choices, options, html_options - end - end -end diff --git a/lib/consul_form_builder.rb b/lib/consul_form_builder.rb new file mode 100644 index 000000000..fa78fa5ea --- /dev/null +++ b/lib/consul_form_builder.rb @@ -0,0 +1,15 @@ +class ConsulFormBuilder < FoundationRailsHelper::FormBuilder + def cktext_area(attribute, options) + field(attribute, options) do |opts| + super(attribute, opts) + end + end + + def enum_select(attribute, options = {}, html_options = {}) + choices = object.class.send(attribute.to_s.pluralize).keys.map do |name| + [object.class.human_attribute_name("#{attribute}.#{name}"), name] + end + + select attribute, choices, options, html_options + end +end