From 2264f9d8db068d0b37e5c67a8dd28807238046d1 Mon Sep 17 00:00:00 2001 From: Hans Lemuet Date: Sat, 26 Jun 2021 14:51:56 +0200 Subject: [PATCH 1/6] Add Form::CheckBoxComponent --- .../form/check_box_component.rb | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 app/components/view_component/form/check_box_component.rb diff --git a/app/components/view_component/form/check_box_component.rb b/app/components/view_component/form/check_box_component.rb new file mode 100644 index 0000000..65c562d --- /dev/null +++ b/app/components/view_component/form/check_box_component.rb @@ -0,0 +1,40 @@ +# frozen_string_literal: true + +module ViewComponent + module Form + class CheckBoxComponent < FieldComponent + attr_reader :checked_value, :unchecked_value + + def initialize(form, object_name, method_name, checked_value, unchecked_value, options = {}) # rubocop:disable Metrics/ParameterLists + @checked_value = checked_value + @unchecked_value = unchecked_value + + super(form, object_name, method_name, options) + end + + def call # rubocop:disable Metrics/AbcSize + if options[:label] == false + ActionView::Helpers::Tags::CheckBox.new(object_name, method_name, form, checked_value, unchecked_value, options).render + else + render(ViewComponent::Form::LabelComponent.new(form, object_name, method_name, class: "form-checkbox")) do + concat ActionView::Helpers::Tags::CheckBox.new( + object_name, + method_name, + form, + checked_value, + unchecked_value, + options + ).render + concat tag.span(check_box_text, class: "form-checkbox__label") + end + end + end + + def check_box_text + @check_box_text ||= ActionView::Helpers::Tags::Translator.new( + object, object_name, method_name, scope: "helpers.checkbox" + ).translate + end + end + end +end From 1f4effebe791eb2826211f4dbe764ace2002dc21 Mon Sep 17 00:00:00 2001 From: Hans Lemuet Date: Sat, 26 Jun 2021 15:02:03 +0200 Subject: [PATCH 2/6] Cleanup --- .../view_component/form/check_box_component.rb | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/app/components/view_component/form/check_box_component.rb b/app/components/view_component/form/check_box_component.rb index 65c562d..a1fc51e 100644 --- a/app/components/view_component/form/check_box_component.rb +++ b/app/components/view_component/form/check_box_component.rb @@ -14,9 +14,16 @@ def initialize(form, object_name, method_name, checked_value, unchecked_value, o def call # rubocop:disable Metrics/AbcSize if options[:label] == false - ActionView::Helpers::Tags::CheckBox.new(object_name, method_name, form, checked_value, unchecked_value, options).render + ActionView::Helpers::Tags::CheckBox.new( + object_name, + method_name, + form, + checked_value, + unchecked_value, + options + ).render else - render(ViewComponent::Form::LabelComponent.new(form, object_name, method_name, class: "form-checkbox")) do + render(ViewComponent::Form::LabelComponent.new(form, object_name, method_name)) do concat ActionView::Helpers::Tags::CheckBox.new( object_name, method_name, @@ -25,7 +32,7 @@ def call # rubocop:disable Metrics/AbcSize unchecked_value, options ).render - concat tag.span(check_box_text, class: "form-checkbox__label") + concat tag.span(check_box_text) end end end From afa4a525380f97c2e2a424390dfe6e2abecb7453 Mon Sep 17 00:00:00 2001 From: Hans Lemuet Date: Sat, 26 Jun 2021 15:18:27 +0200 Subject: [PATCH 3/6] Rubocop ignore --- app/components/view_component/form/check_box_component.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/view_component/form/check_box_component.rb b/app/components/view_component/form/check_box_component.rb index a1fc51e..0c76901 100644 --- a/app/components/view_component/form/check_box_component.rb +++ b/app/components/view_component/form/check_box_component.rb @@ -12,7 +12,7 @@ def initialize(form, object_name, method_name, checked_value, unchecked_value, o super(form, object_name, method_name, options) end - def call # rubocop:disable Metrics/AbcSize + def call # rubocop:disable Metrics/AbcSize Metrics/MethodLength if options[:label] == false ActionView::Helpers::Tags::CheckBox.new( object_name, From f2aa2635f58907216863e5d96a4123148a567e94 Mon Sep 17 00:00:00 2001 From: Hans Lemuet Date: Sat, 26 Jun 2021 15:38:41 +0200 Subject: [PATCH 4/6] Simplify --- .../form/check_box_component.rb | 38 +++++-------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/app/components/view_component/form/check_box_component.rb b/app/components/view_component/form/check_box_component.rb index 0c76901..d58d7a0 100644 --- a/app/components/view_component/form/check_box_component.rb +++ b/app/components/view_component/form/check_box_component.rb @@ -12,35 +12,15 @@ def initialize(form, object_name, method_name, checked_value, unchecked_value, o super(form, object_name, method_name, options) end - def call # rubocop:disable Metrics/AbcSize Metrics/MethodLength - if options[:label] == false - ActionView::Helpers::Tags::CheckBox.new( - object_name, - method_name, - form, - checked_value, - unchecked_value, - options - ).render - else - render(ViewComponent::Form::LabelComponent.new(form, object_name, method_name)) do - concat ActionView::Helpers::Tags::CheckBox.new( - object_name, - method_name, - form, - checked_value, - unchecked_value, - options - ).render - concat tag.span(check_box_text) - end - end - end - - def check_box_text - @check_box_text ||= ActionView::Helpers::Tags::Translator.new( - object, object_name, method_name, scope: "helpers.checkbox" - ).translate + def call + ActionView::Helpers::Tags::CheckBox.new( + object_name, + method_name, + form, + checked_value, + unchecked_value, + options + ).render end end end From 81d90514d5eef4c418d004b29205c2ea1faf33fa Mon Sep 17 00:00:00 2001 From: Hans Lemuet Date: Wed, 30 Jun 2021 00:39:18 +0200 Subject: [PATCH 5/6] Add specs --- .../form/check_box_component_spec.rb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 spec/view_component/form/check_box_component_spec.rb diff --git a/spec/view_component/form/check_box_component_spec.rb b/spec/view_component/form/check_box_component_spec.rb new file mode 100644 index 0000000..4cc66bf --- /dev/null +++ b/spec/view_component/form/check_box_component_spec.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true + +RSpec.describe ViewComponent::Form::CheckBoxComponent, type: :component do + let(:object) { OpenStruct.new } + let(:form) { form_with(object) } + let(:options) { {} } + + let(:component) { render_inline(described_class.new(form, object_name, :admin, "1", "0", options)) } + let(:component_html_attributes) { component.css("input").last.attributes } + + context "with simple args" do + it do + expect(component.to_html).to eq( + %() + ) + end + end + + include_examples "component with custom html classes" + include_examples "component with custom data attributes" +end From 2ae4ada19f70a0e87081fda0f8a7abdebad39703 Mon Sep 17 00:00:00 2001 From: Hans Lemuet Date: Wed, 30 Jun 2021 00:46:00 +0200 Subject: [PATCH 6/6] Make rubocop happy --- spec/view_component/form/check_box_component_spec.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec/view_component/form/check_box_component_spec.rb b/spec/view_component/form/check_box_component_spec.rb index 4cc66bf..069f4aa 100644 --- a/spec/view_component/form/check_box_component_spec.rb +++ b/spec/view_component/form/check_box_component_spec.rb @@ -11,7 +11,8 @@ context "with simple args" do it do expect(component.to_html).to eq( - %() + %() + + %() ) end end