From c1c84507b8b9026dc16b199c74dafec1a0e935b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 14:12:38 +0100 Subject: [PATCH 01/12] Make card title mandatory We didn't add any validation rules to the card model. At the very least, the title should be mandatory. The fact that the label field is marked as optional in the form but the other fields are not probably means description and link should be mandatory as well. However, since there might be institutions using cards with descriptions but no link or cards with links but no description, so we're keeping these fields optional for compatibility reasons. We might change our minds in the future, though. --- app/models/widget/card.rb | 2 ++ app/views/admin/widget/cards/_form.html.erb | 6 +++++- spec/models/widget/card_spec.rb | 4 ++++ spec/support/common_actions/notifications.rb | 2 +- spec/system/admin/widgets/cards_spec.rb | 18 ++++++++++++++++++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/app/models/widget/card.rb b/app/models/widget/card.rb index 64a840231..4b67f8896 100644 --- a/app/models/widget/card.rb +++ b/app/models/widget/card.rb @@ -14,6 +14,8 @@ class Widget::Card < ApplicationRecord translates :link_text, touch: true include Globalizable + validates_translation :title, presence: true + def self.header where(header: true) end diff --git a/app/views/admin/widget/cards/_form.html.erb b/app/views/admin/widget/cards/_form.html.erb index ab0762859..e0afe9e47 100644 --- a/app/views/admin/widget/cards/_form.html.erb +++ b/app/views/admin/widget/cards/_form.html.erb @@ -1,6 +1,7 @@ <%= render "shared/globalize_locales", resource: @card %> <%= translatable_form_for [:admin, @card] do |f| %> + <%= render "shared/errors", resource: @card %>
<%= f.translatable_fields do |translations_form| %> @@ -49,7 +50,10 @@
- <%= f.submit(t("admin.homepage.#{action_name}.#{@card.header? ? "submit_header" : "submit_card"}"), class: "button success") %> + <%= f.submit( + t("admin.homepage.#{admin_submit_action(@card)}.#{@card.header? ? "submit_header" : "submit_card"}"), + class: "button success" + ) %>
<% end %> diff --git a/spec/models/widget/card_spec.rb b/spec/models/widget/card_spec.rb index 8f925fefd..e7b01ddfe 100644 --- a/spec/models/widget/card_spec.rb +++ b/spec/models/widget/card_spec.rb @@ -9,6 +9,10 @@ describe Widget::Card do it "is valid" do expect(card).to be_valid end + + it "is not valid without a title" do + expect(build(:widget_card, title: "")).not_to be_valid + end end describe "#header" do diff --git a/spec/support/common_actions/notifications.rb b/spec/support/common_actions/notifications.rb index 4db1cc833..572a4d3c8 100644 --- a/spec/support/common_actions/notifications.rb +++ b/spec/support/common_actions/notifications.rb @@ -56,7 +56,7 @@ module Notifications def error_message(resource_model = nil) resource_model ||= "(.*)" field_check_message = "Please check the marked fields to know how to correct them:" - /\d errors? prevented this #{resource_model} from being saved. #{field_check_message}/ + /\d errors? prevented this #{resource_model} from being saved.(\n| )#{field_check_message}/ end def fill_in_admin_notification_form(options = {}) diff --git a/spec/system/admin/widgets/cards_spec.rb b/spec/system/admin/widgets/cards_spec.rb index 969a9b0ca..a0315118a 100644 --- a/spec/system/admin/widgets/cards_spec.rb +++ b/spec/system/admin/widgets/cards_spec.rb @@ -27,6 +27,15 @@ describe "Cards", :admin do end end + scenario "Create with errors", :js do + visit admin_homepage_path + click_link "Create card" + click_button "Create card" + + expect(page).to have_text error_message + expect(page).to have_button "Create card" + end + scenario "Index" do 3.times { create(:widget_card) } @@ -130,6 +139,15 @@ describe "Cards", :admin do end end + scenario "Create with errors", :js do + visit admin_homepage_path + click_link "Create header" + click_button "Create header" + + expect(page).to have_text error_message + expect(page).to have_button "Create header" + end + context "Page card" do let!(:custom_page) { create(:site_customization_page, :published) } From ded5a8d4680e00f2f2b612136d96743af060fb5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 15:08:02 +0100 Subject: [PATCH 02/12] Use cancancan to load pages and cards Like we do in most places in the application. --- app/controllers/admin/site_customization/cards_controller.rb | 4 ++-- app/models/abilities/administrator.rb | 1 + spec/models/abilities/administrator_spec.rb | 2 ++ 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/app/controllers/admin/site_customization/cards_controller.rb b/app/controllers/admin/site_customization/cards_controller.rb index f377283fc..9afbb409d 100644 --- a/app/controllers/admin/site_customization/cards_controller.rb +++ b/app/controllers/admin/site_customization/cards_controller.rb @@ -1,8 +1,8 @@ class Admin::SiteCustomization::CardsController < Admin::SiteCustomization::BaseController skip_authorization_check + load_and_authorize_resource :page, class: "::SiteCustomization::Page" + load_and_authorize_resource :card, through: :page, class: "Widget::Card" def index - @page = ::SiteCustomization::Page.find(params[:page_id]) - @cards = @page.cards end end diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb index e93e68e96..b70c7f4d0 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -88,6 +88,7 @@ module Abilities can :manage, SiteCustomization::Page can :manage, SiteCustomization::Image can :manage, SiteCustomization::ContentBlock + can :manage, Widget::Card can :access, :ckeditor can :manage, Ckeditor::Picture diff --git a/spec/models/abilities/administrator_spec.rb b/spec/models/abilities/administrator_spec.rb index 873768d87..fd7f7a718 100644 --- a/spec/models/abilities/administrator_spec.rb +++ b/spec/models/abilities/administrator_spec.rb @@ -112,4 +112,6 @@ describe Abilities::Administrator do it { should be_able_to(:read, SDG::Manager) } it { should be_able_to(:create, SDG::Manager) } it { should be_able_to(:destroy, SDG::Manager) } + + it { should be_able_to(:manage, Widget::Card) } end From 0762c668551ccaf16ff5044eebf0e7b6c20a3e5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 15:11:25 +0100 Subject: [PATCH 03/12] Don't skip authorization check managing cards I'm not sure why we were skipping this check. --- app/controllers/admin/site_customization/cards_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/admin/site_customization/cards_controller.rb b/app/controllers/admin/site_customization/cards_controller.rb index 9afbb409d..d00176d18 100644 --- a/app/controllers/admin/site_customization/cards_controller.rb +++ b/app/controllers/admin/site_customization/cards_controller.rb @@ -1,5 +1,4 @@ class Admin::SiteCustomization::CardsController < Admin::SiteCustomization::BaseController - skip_authorization_check load_and_authorize_resource :page, class: "::SiteCustomization::Page" load_and_authorize_resource :card, through: :page, class: "Widget::Card" From c06f14fa658d3eaa0255f94b9a97f81104cf3b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 15:40:01 +0100 Subject: [PATCH 04/12] Remove unused method in cards controller This method isn't necessary since commit 71601bd3f. --- app/controllers/admin/widget/cards_controller.rb | 4 ---- 1 file changed, 4 deletions(-) diff --git a/app/controllers/admin/widget/cards_controller.rb b/app/controllers/admin/widget/cards_controller.rb index 097babad3..066ce2bfa 100644 --- a/app/controllers/admin/widget/cards_controller.rb +++ b/app/controllers/admin/widget/cards_controller.rb @@ -67,8 +67,4 @@ class Admin::Widget::CardsController < Admin::BaseController def page ::SiteCustomization::Page.find(@card.site_customization_page_id) end - - def resource - Widget::Card.find(params[:id]) - end end From 52d71b8432749b3bcb9ca4993a44097cb0ad1db9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 17:38:43 +0100 Subject: [PATCH 05/12] Remove unneeded namespace methods These methods are not necessary since we changed the `namespace` helper method in commit 13b3d9ceb. --- app/controllers/admin/dashboard/base_controller.rb | 7 ------- app/controllers/admin/legislation/base_controller.rb | 8 -------- .../admin/local_census_records/base_controller.rb | 7 ------- app/controllers/admin/poll/base_controller.rb | 8 -------- .../admin/site_customization/base_controller.rb | 7 ------- app/controllers/officing/ballot_sheets_controller.rb | 6 ------ 6 files changed, 43 deletions(-) diff --git a/app/controllers/admin/dashboard/base_controller.rb b/app/controllers/admin/dashboard/base_controller.rb index ccbee35ae..55f0fa082 100644 --- a/app/controllers/admin/dashboard/base_controller.rb +++ b/app/controllers/admin/dashboard/base_controller.rb @@ -1,9 +1,2 @@ class Admin::Dashboard::BaseController < Admin::BaseController - helper_method :namespace - - private - - def namespace - "admin" - end end diff --git a/app/controllers/admin/legislation/base_controller.rb b/app/controllers/admin/legislation/base_controller.rb index 22badf745..047180ab3 100644 --- a/app/controllers/admin/legislation/base_controller.rb +++ b/app/controllers/admin/legislation/base_controller.rb @@ -2,12 +2,4 @@ class Admin::Legislation::BaseController < Admin::BaseController include FeatureFlags feature_flag :legislation - - helper_method :namespace - - private - - def namespace - "admin" - end end diff --git a/app/controllers/admin/local_census_records/base_controller.rb b/app/controllers/admin/local_census_records/base_controller.rb index a506e0cdf..cdfbc818f 100644 --- a/app/controllers/admin/local_census_records/base_controller.rb +++ b/app/controllers/admin/local_census_records/base_controller.rb @@ -1,9 +1,2 @@ class Admin::LocalCensusRecords::BaseController < Admin::BaseController - helper_method :namespace - - private - - def namespace - "admin" - end end diff --git a/app/controllers/admin/poll/base_controller.rb b/app/controllers/admin/poll/base_controller.rb index 2d0a2e9d1..05423f15e 100644 --- a/app/controllers/admin/poll/base_controller.rb +++ b/app/controllers/admin/poll/base_controller.rb @@ -2,12 +2,4 @@ class Admin::Poll::BaseController < Admin::BaseController include FeatureFlags feature_flag :polls - - helper_method :namespace - - private - - def namespace - "admin" - end end diff --git a/app/controllers/admin/site_customization/base_controller.rb b/app/controllers/admin/site_customization/base_controller.rb index fb3dcccc7..68228ea0d 100644 --- a/app/controllers/admin/site_customization/base_controller.rb +++ b/app/controllers/admin/site_customization/base_controller.rb @@ -1,9 +1,2 @@ class Admin::SiteCustomization::BaseController < Admin::BaseController - helper_method :namespace - - private - - def namespace - "admin" - end end diff --git a/app/controllers/officing/ballot_sheets_controller.rb b/app/controllers/officing/ballot_sheets_controller.rb index ec1d74002..afc885f61 100644 --- a/app/controllers/officing/ballot_sheets_controller.rb +++ b/app/controllers/officing/ballot_sheets_controller.rb @@ -3,8 +3,6 @@ class Officing::BallotSheetsController < Officing::BaseController before_action :load_poll before_action :load_officer_assignments, only: [:new, :create] - helper_method :namespace - def index load_ballot_sheets end @@ -31,10 +29,6 @@ class Officing::BallotSheetsController < Officing::BaseController private - def namespace - "officing" - end - def load_poll @poll = Poll.find(params[:poll_id]) end From e8e920ee50f6818fa793b1ece366012dca6305bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 19:36:06 +0100 Subject: [PATCH 06/12] Rename Widgets components to Widget So naming is consistent with the way Admin::Widget controllers are named. --- app/components/sdg/goals/show_component.html.erb | 4 ++-- .../feeds/debate_component.html.erb | 0 .../feeds/debate_component.rb | 2 +- .../feeds/feed_component.html.erb | 0 .../{widgets => widget}/feeds/feed_component.rb | 8 ++++---- .../feeds/participation_component.html.erb | 2 +- .../feeds/participation_component.rb | 2 +- .../feeds/process_component.html.erb | 0 .../feeds/process_component.rb | 2 +- .../feeds/proposal_component.html.erb | 0 .../feeds/proposal_component.rb | 2 +- app/views/welcome/_feeds.html.erb | 2 +- app/views/welcome/_processes.html.erb | 2 +- .../feeds/feed_component_spec.rb | 16 ++++++++-------- 14 files changed, 21 insertions(+), 21 deletions(-) rename app/components/{widgets => widget}/feeds/debate_component.html.erb (100%) rename app/components/{widgets => widget}/feeds/debate_component.rb (56%) rename app/components/{widgets => widget}/feeds/feed_component.html.erb (100%) rename app/components/{widgets => widget}/feeds/feed_component.rb (72%) rename app/components/{widgets => widget}/feeds/participation_component.html.erb (75%) rename app/components/{widgets => widget}/feeds/participation_component.rb (76%) rename app/components/{widgets => widget}/feeds/process_component.html.erb (100%) rename app/components/{widgets => widget}/feeds/process_component.rb (57%) rename app/components/{widgets => widget}/feeds/proposal_component.html.erb (100%) rename app/components/{widgets => widget}/feeds/proposal_component.rb (58%) rename spec/components/{widgets => widget}/feeds/feed_component_spec.rb (74%) diff --git a/app/components/sdg/goals/show_component.html.erb b/app/components/sdg/goals/show_component.html.erb index 788e1319a..44dfebc21 100644 --- a/app/components/sdg/goals/show_component.html.erb +++ b/app/components/sdg/goals/show_component.html.erb @@ -9,11 +9,11 @@ - <%= render Widgets::Feeds::ParticipationComponent.new(feeds) %> + <%= render Widget::Feeds::ParticipationComponent.new(feeds) %> <% if processes_feed %>
- <%= render Widgets::Feeds::FeedComponent.new(processes_feed) %> + <%= render Widget::Feeds::FeedComponent.new(processes_feed) %>
<% end %> diff --git a/app/components/widgets/feeds/debate_component.html.erb b/app/components/widget/feeds/debate_component.html.erb similarity index 100% rename from app/components/widgets/feeds/debate_component.html.erb rename to app/components/widget/feeds/debate_component.html.erb diff --git a/app/components/widgets/feeds/debate_component.rb b/app/components/widget/feeds/debate_component.rb similarity index 56% rename from app/components/widgets/feeds/debate_component.rb rename to app/components/widget/feeds/debate_component.rb index 28d726811..908348c56 100644 --- a/app/components/widgets/feeds/debate_component.rb +++ b/app/components/widget/feeds/debate_component.rb @@ -1,4 +1,4 @@ -class Widgets::Feeds::DebateComponent < ApplicationComponent +class Widget::Feeds::DebateComponent < ApplicationComponent attr_reader :debate def initialize(debate) diff --git a/app/components/widgets/feeds/feed_component.html.erb b/app/components/widget/feeds/feed_component.html.erb similarity index 100% rename from app/components/widgets/feeds/feed_component.html.erb rename to app/components/widget/feeds/feed_component.html.erb diff --git a/app/components/widgets/feeds/feed_component.rb b/app/components/widget/feeds/feed_component.rb similarity index 72% rename from app/components/widgets/feeds/feed_component.rb rename to app/components/widget/feeds/feed_component.rb index cf476382a..847202350 100644 --- a/app/components/widgets/feeds/feed_component.rb +++ b/app/components/widget/feeds/feed_component.rb @@ -1,4 +1,4 @@ -class Widgets::Feeds::FeedComponent < ApplicationComponent +class Widget::Feeds::FeedComponent < ApplicationComponent attr_reader :feed delegate :kind, to: :feed @@ -15,11 +15,11 @@ class Widgets::Feeds::FeedComponent < ApplicationComponent def item_component_class case kind when "proposals" - Widgets::Feeds::ProposalComponent + Widget::Feeds::ProposalComponent when "debates" - Widgets::Feeds::DebateComponent + Widget::Feeds::DebateComponent when "processes" - Widgets::Feeds::ProcessComponent + Widget::Feeds::ProcessComponent end end diff --git a/app/components/widgets/feeds/participation_component.html.erb b/app/components/widget/feeds/participation_component.html.erb similarity index 75% rename from app/components/widgets/feeds/participation_component.html.erb rename to app/components/widget/feeds/participation_component.html.erb index f19bd0e4f..e20bd6f34 100644 --- a/app/components/widgets/feeds/participation_component.html.erb +++ b/app/components/widget/feeds/participation_component.html.erb @@ -1,7 +1,7 @@
<% feeds.each do |feed| %> <% if feed_proposals?(feed) || feed_debates?(feed) %> - <%= render Widgets::Feeds::FeedComponent.new(feed) %> + <%= render Widget::Feeds::FeedComponent.new(feed) %> <% end %> <% end %>
diff --git a/app/components/widgets/feeds/participation_component.rb b/app/components/widget/feeds/participation_component.rb similarity index 76% rename from app/components/widgets/feeds/participation_component.rb rename to app/components/widget/feeds/participation_component.rb index f90b731c3..995e7bea0 100644 --- a/app/components/widgets/feeds/participation_component.rb +++ b/app/components/widget/feeds/participation_component.rb @@ -1,4 +1,4 @@ -class Widgets::Feeds::ParticipationComponent < ApplicationComponent +class Widget::Feeds::ParticipationComponent < ApplicationComponent attr_reader :feeds def initialize(feeds) diff --git a/app/components/widgets/feeds/process_component.html.erb b/app/components/widget/feeds/process_component.html.erb similarity index 100% rename from app/components/widgets/feeds/process_component.html.erb rename to app/components/widget/feeds/process_component.html.erb diff --git a/app/components/widgets/feeds/process_component.rb b/app/components/widget/feeds/process_component.rb similarity index 57% rename from app/components/widgets/feeds/process_component.rb rename to app/components/widget/feeds/process_component.rb index 5d9f79f0f..ab8065663 100644 --- a/app/components/widgets/feeds/process_component.rb +++ b/app/components/widget/feeds/process_component.rb @@ -1,4 +1,4 @@ -class Widgets::Feeds::ProcessComponent < ApplicationComponent +class Widget::Feeds::ProcessComponent < ApplicationComponent attr_reader :process def initialize(process) diff --git a/app/components/widgets/feeds/proposal_component.html.erb b/app/components/widget/feeds/proposal_component.html.erb similarity index 100% rename from app/components/widgets/feeds/proposal_component.html.erb rename to app/components/widget/feeds/proposal_component.html.erb diff --git a/app/components/widgets/feeds/proposal_component.rb b/app/components/widget/feeds/proposal_component.rb similarity index 58% rename from app/components/widgets/feeds/proposal_component.rb rename to app/components/widget/feeds/proposal_component.rb index 243bb0649..cbb6ae39b 100644 --- a/app/components/widgets/feeds/proposal_component.rb +++ b/app/components/widget/feeds/proposal_component.rb @@ -1,4 +1,4 @@ -class Widgets::Feeds::ProposalComponent < ApplicationComponent +class Widget::Feeds::ProposalComponent < ApplicationComponent attr_reader :proposal def initialize(proposal) diff --git a/app/views/welcome/_feeds.html.erb b/app/views/welcome/_feeds.html.erb index e200d2c42..acd2f3e1f 100644 --- a/app/views/welcome/_feeds.html.erb +++ b/app/views/welcome/_feeds.html.erb @@ -1 +1 @@ -<%= render Widgets::Feeds::ParticipationComponent.new(@feeds) %> +<%= render Widget::Feeds::ParticipationComponent.new(@feeds) %> diff --git a/app/views/welcome/_processes.html.erb b/app/views/welcome/_processes.html.erb index d6d3ee1ae..f4afb8bbf 100644 --- a/app/views/welcome/_processes.html.erb +++ b/app/views/welcome/_processes.html.erb @@ -1,7 +1,7 @@
<% @feeds.each do |feed| %> <% if feed_processes?(feed) %> - <%= render Widgets::Feeds::FeedComponent.new(feed) %> + <%= render Widget::Feeds::FeedComponent.new(feed) %> <% end %> <% end %>
diff --git a/spec/components/widgets/feeds/feed_component_spec.rb b/spec/components/widget/feeds/feed_component_spec.rb similarity index 74% rename from spec/components/widgets/feeds/feed_component_spec.rb rename to spec/components/widget/feeds/feed_component_spec.rb index 2e0d990e9..6eed7ef2a 100644 --- a/spec/components/widgets/feeds/feed_component_spec.rb +++ b/spec/components/widget/feeds/feed_component_spec.rb @@ -1,9 +1,9 @@ require "rails_helper" -describe Widgets::Feeds::FeedComponent, type: :component do +describe Widget::Feeds::FeedComponent, type: :component do it "renders a message when there are no items" do feed = double(kind: "debates", items: []) - component = Widgets::Feeds::FeedComponent.new(feed) + component = Widget::Feeds::FeedComponent.new(feed) render_inline component @@ -15,7 +15,7 @@ describe Widgets::Feeds::FeedComponent, type: :component do let(:feed) { Widget::Feed.new(kind: "debates") } it "points to the debates path for homepage debates feeds" do - component = Widgets::Feeds::FeedComponent.new(feed) + component = Widget::Feeds::FeedComponent.new(feed) render_inline component @@ -23,7 +23,7 @@ describe Widgets::Feeds::FeedComponent, type: :component do end it "points to the debates filtered by goal for goal feeds" do - component = Widgets::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) + component = Widget::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) render_inline component @@ -35,7 +35,7 @@ describe Widgets::Feeds::FeedComponent, type: :component do let(:feed) { Widget::Feed.new(kind: "proposals") } it "points to the proposals path for homepage proposals feeds" do - component = Widgets::Feeds::FeedComponent.new(feed) + component = Widget::Feeds::FeedComponent.new(feed) render_inline component @@ -43,7 +43,7 @@ describe Widgets::Feeds::FeedComponent, type: :component do end it "points to the proposals filtered by goal for goal feeds" do - component = Widgets::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) + component = Widget::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) render_inline component @@ -55,7 +55,7 @@ describe Widgets::Feeds::FeedComponent, type: :component do let(:feed) { Widget::Feed.new(kind: "processes") } it "points to the legislation processes path for homepage processes feeds" do - component = Widgets::Feeds::FeedComponent.new(feed) + component = Widget::Feeds::FeedComponent.new(feed) render_inline component @@ -63,7 +63,7 @@ describe Widgets::Feeds::FeedComponent, type: :component do end it "points to the legislation processes path for goal processes feeds" do - component = Widgets::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) + component = Widget::Feeds::FeedComponent.new(SDG::Widget::Feed.new(feed, SDG::Goal[6])) render_inline component From 04e817e696eb4a3460960dd8731c72b2b7685295 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 19:37:30 +0100 Subject: [PATCH 07/12] Simplify widget table prefix The same way it's done in other modules. --- app/models/widget.rb | 5 +++++ app/models/widget/card.rb | 3 --- app/models/widget/feed.rb | 2 -- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 app/models/widget.rb diff --git a/app/models/widget.rb b/app/models/widget.rb new file mode 100644 index 000000000..bc6f4acb1 --- /dev/null +++ b/app/models/widget.rb @@ -0,0 +1,5 @@ +module Widget + def self.table_name_prefix + "widget_" + end +end diff --git a/app/models/widget/card.rb b/app/models/widget/card.rb index 4b67f8896..0b8ce68a3 100644 --- a/app/models/widget/card.rb +++ b/app/models/widget/card.rb @@ -5,9 +5,6 @@ class Widget::Card < ApplicationRecord foreign_key: "site_customization_page_id", inverse_of: :cards - # table_name must be set before calls to 'translates' - self.table_name = "widget_cards" - translates :label, touch: true translates :title, touch: true translates :description, touch: true diff --git a/app/models/widget/feed.rb b/app/models/widget/feed.rb index d90cdee2d..e7dcaa467 100644 --- a/app/models/widget/feed.rb +++ b/app/models/widget/feed.rb @@ -1,6 +1,4 @@ class Widget::Feed < ApplicationRecord - self.table_name = "widget_feeds" - KINDS = %w[proposals debates processes].freeze def active? From 4c0bb894ebb996e7ff2d976bd6f03b91d83fdd74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 20:09:36 +0100 Subject: [PATCH 08/12] Use polymorphic routes to manage cards We use a different logic to load the card depending on the controller we're using, and then share the rest of the code. This way we simplify the code a bit, since we don't have to check for the page_id parameter. --- .../site_customization/cards_controller.rb | 7 ++ .../admin/widget/cards_controller.rb | 68 ++----------------- .../concerns/admin/widget/cards_actions.rb | 59 ++++++++++++++++ .../site_customization/cards/_card.html.erb | 4 +- .../site_customization/cards/index.html.erb | 2 +- .../site_customization/pages/index.html.erb | 2 +- app/views/admin/widget/cards/_form.html.erb | 3 +- app/views/admin/widget/cards/edit.html.erb | 2 +- app/views/admin/widget/cards/new.html.erb | 2 +- config/routes/admin.rb | 6 +- spec/routing/polymorphic_routes_spec.rb | 13 ++++ spec/system/admin/widgets/cards_spec.rb | 10 +-- 12 files changed, 99 insertions(+), 79 deletions(-) create mode 100644 app/controllers/concerns/admin/widget/cards_actions.rb diff --git a/app/controllers/admin/site_customization/cards_controller.rb b/app/controllers/admin/site_customization/cards_controller.rb index d00176d18..86c229ffc 100644 --- a/app/controllers/admin/site_customization/cards_controller.rb +++ b/app/controllers/admin/site_customization/cards_controller.rb @@ -1,7 +1,14 @@ class Admin::SiteCustomization::CardsController < Admin::SiteCustomization::BaseController + include Admin::Widget::CardsActions load_and_authorize_resource :page, class: "::SiteCustomization::Page" load_and_authorize_resource :card, through: :page, class: "Widget::Card" def index end + + private + + def index_path + admin_site_customization_page_widget_cards_path(@page) + end end diff --git a/app/controllers/admin/widget/cards_controller.rb b/app/controllers/admin/widget/cards_controller.rb index 066ce2bfa..5d676e66a 100644 --- a/app/controllers/admin/widget/cards_controller.rb +++ b/app/controllers/admin/widget/cards_controller.rb @@ -1,70 +1,10 @@ class Admin::Widget::CardsController < Admin::BaseController - include Translatable - include ImageAttributes - - def new - if header_card? - @card = ::Widget::Card.new(header: header_card?) - else - @card = ::Widget::Card.new(site_customization_page_id: params[:page_id]) - end - end - - def create - @card = ::Widget::Card.new(card_params) - if @card.save - redirect_to_customization_page_cards_or_homepage - else - render :new - end - end - - def edit - @card = ::Widget::Card.find(params[:id]) - end - - def update - @card = ::Widget::Card.find(params[:id]) - if @card.update(card_params) - redirect_to_customization_page_cards_or_homepage - else - render :edit - end - end - - def destroy - @card = ::Widget::Card.find(params[:id]) - @card.destroy! - - redirect_to_customization_page_cards_or_homepage - end + include Admin::Widget::CardsActions + load_and_authorize_resource :card, class: "Widget::Card" private - def card_params - params.require(:widget_card).permit( - :link_url, :button_text, :button_url, :alignment, :header, :site_customization_page_id, - :columns, - translation_params(Widget::Card), - image_attributes: image_attributes - ) - end - - def header_card? - params[:header_card].present? - end - - def redirect_to_customization_page_cards_or_homepage - notice = t("admin.site_customization.pages.cards.#{params[:action]}.notice") - - if @card.site_customization_page_id - redirect_to admin_site_customization_page_cards_path(page), notice: notice - else - redirect_to admin_homepage_path, notice: notice - end - end - - def page - ::SiteCustomization::Page.find(@card.site_customization_page_id) + def index_path + admin_homepage_path end end diff --git a/app/controllers/concerns/admin/widget/cards_actions.rb b/app/controllers/concerns/admin/widget/cards_actions.rb new file mode 100644 index 000000000..b089ca1a0 --- /dev/null +++ b/app/controllers/concerns/admin/widget/cards_actions.rb @@ -0,0 +1,59 @@ +module Admin::Widget::CardsActions + extend ActiveSupport::Concern + include Translatable + include ImageAttributes + + def new + @card.header = header_card? + render template: "#{cards_view_path}/new" + end + + def create + if @card.save + redirect_to_index + else + render template: "#{cards_view_path}/new" + end + end + + def edit + render template: "#{cards_view_path}/edit" + end + + def update + if @card.update(card_params) + redirect_to_index + else + render template: "#{cards_view_path}/edit" + end + end + + def destroy + @card.destroy! + redirect_to_index + end + + private + + def card_params + params.require(:widget_card).permit( + :link_url, :button_text, :button_url, :alignment, :header, :columns, + translation_params(Widget::Card), + image_attributes: image_attributes + ) + end + + def header_card? + params[:header_card].present? + end + + def redirect_to_index + notice = t("admin.site_customization.pages.cards.#{params[:action]}.notice") + + redirect_to index_path, notice: notice + end + + def cards_view_path + "admin/widget/cards" + end +end diff --git a/app/views/admin/site_customization/cards/_card.html.erb b/app/views/admin/site_customization/cards/_card.html.erb index 578b3c01a..94025a7b1 100644 --- a/app/views/admin/site_customization/cards/_card.html.erb +++ b/app/views/admin/site_customization/cards/_card.html.erb @@ -17,8 +17,6 @@ <% end %> - <%= render Admin::TableActionsComponent.new(card, - edit_path: edit_admin_widget_card_path(card, page_id: params[:page_id]) - ) %> + <%= render Admin::TableActionsComponent.new(card) %> diff --git a/app/views/admin/site_customization/cards/index.html.erb b/app/views/admin/site_customization/cards/index.html.erb index 32ccf8fb3..ff94623f5 100644 --- a/app/views/admin/site_customization/cards/index.html.erb +++ b/app/views/admin/site_customization/cards/index.html.erb @@ -8,7 +8,7 @@
<%= link_to t("admin.site_customization.pages.cards.create_card"), - new_admin_widget_card_path(page_id: params[:page_id]), class: "button" %> + new_admin_site_customization_page_widget_card_path(@page), class: "button" %>
<% if @cards.present? %> diff --git a/app/views/admin/site_customization/pages/index.html.erb b/app/views/admin/site_customization/pages/index.html.erb index 6d0d8f6e9..08a7956f8 100644 --- a/app/views/admin/site_customization/pages/index.html.erb +++ b/app/views/admin/site_customization/pages/index.html.erb @@ -30,7 +30,7 @@ <%= render Admin::TableActionsComponent.new(page) do |actions| %> <%= actions.link_to t("admin.site_customization.pages.page.see_cards"), - admin_site_customization_page_cards_path(page), + admin_site_customization_page_widget_cards_path(page), class: "cards-link" %> <% if page.status == "published" %> diff --git a/app/views/admin/widget/cards/_form.html.erb b/app/views/admin/widget/cards/_form.html.erb index e0afe9e47..9b0ef8c34 100644 --- a/app/views/admin/widget/cards/_form.html.erb +++ b/app/views/admin/widget/cards/_form.html.erb @@ -1,6 +1,6 @@ <%= render "shared/globalize_locales", resource: @card %> -<%= translatable_form_for [:admin, @card] do |f| %> +<%= translatable_form_for [:admin, @page, @card] do |f| %> <%= render "shared/errors", resource: @card %>
@@ -42,7 +42,6 @@
<%= f.hidden_field :header, value: @card.header? %> - <%= f.hidden_field :site_customization_page_id, value: @card.site_customization_page_id %>
diff --git a/app/views/admin/widget/cards/edit.html.erb b/app/views/admin/widget/cards/edit.html.erb index fd7260ba7..d7ab58339 100644 --- a/app/views/admin/widget/cards/edit.html.erb +++ b/app/views/admin/widget/cards/edit.html.erb @@ -6,4 +6,4 @@ <% end %> -<%= render "form" %> +<%= render "admin/widget/cards/form" %> diff --git a/app/views/admin/widget/cards/new.html.erb b/app/views/admin/widget/cards/new.html.erb index 9e7ee40b2..d12f8ab7c 100644 --- a/app/views/admin/widget/cards/new.html.erb +++ b/app/views/admin/widget/cards/new.html.erb @@ -6,4 +6,4 @@ <% end %> -<%= render "form" %> +<%= render "admin/widget/cards/form" %> diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 632a91a64..4bc1f098f 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -227,7 +227,7 @@ namespace :admin do namespace :site_customization do resources :pages, except: [:show] do - resources :cards, only: [:index] + resources :cards, except: [:show], as: :widget_cards end resources :images, only: [:index, :update, :destroy] resources :content_blocks, except: [:show] @@ -270,6 +270,10 @@ resolve "Audit" do |audit| [*resource_hierarchy_for(audit.associated || audit.auditable), audit] end +resolve "Widget::Card" do |card, options| + [*resource_hierarchy_for(card.page), card] +end + resolve "Budget::Group" do |group, options| [group.budget, :group, options.merge(id: group)] end diff --git a/spec/routing/polymorphic_routes_spec.rb b/spec/routing/polymorphic_routes_spec.rb index 8ab22512b..729e16d66 100644 --- a/spec/routing/polymorphic_routes_spec.rb +++ b/spec/routing/polymorphic_routes_spec.rb @@ -164,6 +164,19 @@ describe "Polymorphic routes" do expect(admin_polymorphic_path(shift)).to eq(admin_booth_shift_path(booth, shift)) end + it "routes widget cards" do + card = create(:widget_card) + + expect(admin_polymorphic_path(card)).to eq(admin_widget_card_path(card)) + end + + it "routes site customization page widget cards" do + page = create(:site_customization_page) + card = create(:widget_card, page: page) + + expect(admin_polymorphic_path(card)).to eq admin_site_customization_page_widget_card_path(page, card) + end + it "supports routes for actions like edit" do proposal = create(:proposal) milestone = create(:milestone, milestoneable: proposal) diff --git a/spec/system/admin/widgets/cards_spec.rb b/spec/system/admin/widgets/cards_spec.rb index a0315118a..039f7637d 100644 --- a/spec/system/admin/widgets/cards_spec.rb +++ b/spec/system/admin/widgets/cards_spec.rb @@ -163,7 +163,7 @@ describe "Cards", :admin do fill_in "Title", with: "Card for a custom page" click_button "Create card" - expect(page).to have_current_path admin_site_customization_page_cards_path(custom_page) + expect(page).to have_current_path admin_site_customization_page_widget_cards_path(custom_page) expect(page).to have_content "Card for a custom page" end @@ -199,7 +199,7 @@ describe "Cards", :admin do scenario "Edit", :js do create(:widget_card, page: custom_page, title: "Original title") - visit admin_site_customization_page_cards_path(custom_page) + visit admin_site_customization_page_widget_cards_path(custom_page) expect(page).to have_content("Original title") @@ -211,7 +211,7 @@ describe "Cards", :admin do click_button "Save card" - expect(page).to have_current_path admin_site_customization_page_cards_path(custom_page) + expect(page).to have_current_path admin_site_customization_page_widget_cards_path(custom_page) expect(page).to have_content "Updated title" expect(page).not_to have_content "Original title" end @@ -219,7 +219,7 @@ describe "Cards", :admin do scenario "Destroy", :js do create(:widget_card, page: custom_page, title: "Card title") - visit admin_site_customization_page_cards_path(custom_page) + visit admin_site_customization_page_widget_cards_path(custom_page) expect(page).to have_content("Card title") @@ -227,7 +227,7 @@ describe "Cards", :admin do click_link "Delete" end - expect(page).to have_current_path admin_site_customization_page_cards_path(custom_page) + expect(page).to have_current_path admin_site_customization_page_widget_cards_path(custom_page) expect(page).not_to have_content "Card title" end end From b6f133b6c8a0e9752e8e8849524f32d8c5b556f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 20:14:58 +0100 Subject: [PATCH 09/12] Use human attribute name on cards table We were defining the same texts in three places: admin.homepage.cards, admin.site_customization.pages.cards and activerecord attributes. --- app/views/admin/homepage/_cards.html.erb | 6 +++--- app/views/admin/site_customization/cards/_cards.html.erb | 6 +++--- config/locales/en/admin.yml | 9 --------- config/locales/es/admin.yml | 9 --------- 4 files changed, 6 insertions(+), 24 deletions(-) diff --git a/app/views/admin/homepage/_cards.html.erb b/app/views/admin/homepage/_cards.html.erb index 6cc301bd1..ae2fef6d0 100644 --- a/app/views/admin/homepage/_cards.html.erb +++ b/app/views/admin/homepage/_cards.html.erb @@ -1,9 +1,9 @@ - - - + + + diff --git a/app/views/admin/site_customization/cards/_cards.html.erb b/app/views/admin/site_customization/cards/_cards.html.erb index be538c0d0..8d9d87c96 100644 --- a/app/views/admin/site_customization/cards/_cards.html.erb +++ b/app/views/admin/site_customization/cards/_cards.html.erb @@ -1,9 +1,9 @@
<%= t("admin.homepage.cards.title") %><%= t("admin.homepage.cards.description") %><%= t("admin.homepage.cards.link_text") %> / <%= t("admin.homepage.cards.link_url") %><%= Widget::Card.human_attribute_name(:title) %><%= Widget::Card.human_attribute_name(:description) %><%= Widget::Card.human_attribute_name(:link_text) %> / <%= Widget::Card.human_attribute_name(:link_url) %> <%= t("admin.shared.image") %> <%= t("admin.shared.actions") %>
- - - + + + diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 26355ac7d..81348ecf6 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1519,10 +1519,6 @@ en: cards_title: cards create_card: Create card no_cards: There are no cards. - title: Title - description: Description - link_text: Link text - link_url: Link URL columns_help: "Width of the card in number of columns. On mobile screens it's always a width of 100%." create: notice: "Card created successfully!" @@ -1539,11 +1535,6 @@ en: cards_title: Cards create_card: Create card no_cards: There are no cards. - cards: - title: Title - description: Description - link_text: Link text - link_url: Link URL feeds: proposals: Proposals debates: Debates diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index f9b6340de..5e54a3f0f 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1518,10 +1518,6 @@ es: cards_title: tarjetas create_card: Crear tarjeta no_cards: No hay tarjetas. - title: Título - description: Descripción - link_text: Texto del enlace - link_url: URL del enlace columns_help: "Ancho de la tarjeta en número de columnas. En pantallas móviles siempre es un ancho del 100%." create: notice: "¡Tarjeta creada con éxito!" @@ -1538,11 +1534,6 @@ es: cards_title: Tarjetas create_card: Crear tarjeta no_cards: No hay tarjetas. - cards: - title: Título - description: Descripción - link_text: Texto del enlace - link_url: URL del enlace feeds: proposals: Propuestas debates: Debates From 5148919c17a9db340399feabb17c0639c103ab41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 20:05:00 +0100 Subject: [PATCH 10/12] Remove duplication in cards tables We were using the same code in two places, so we're extracting the code into a component in order to share it. --- .../widget/cards/row_component.html.erb} | 0 .../admin/widget/cards/row_component.rb | 7 ++++++ .../widget/cards/table_component.html.erb | 22 +++++++++++++++++++ .../admin/widget/cards/table_component.rb | 8 +++++++ app/views/admin/homepage/_cards.html.erb | 16 -------------- app/views/admin/homepage/show.html.erb | 22 +++++++------------ .../site_customization/cards/_card.html.erb | 22 ------------------- .../site_customization/cards/_cards.html.erb | 16 -------------- .../site_customization/cards/index.html.erb | 11 ++++------ 9 files changed, 49 insertions(+), 75 deletions(-) rename app/{views/admin/homepage/_card.html.erb => components/admin/widget/cards/row_component.html.erb} (100%) create mode 100644 app/components/admin/widget/cards/row_component.rb create mode 100644 app/components/admin/widget/cards/table_component.html.erb create mode 100644 app/components/admin/widget/cards/table_component.rb delete mode 100644 app/views/admin/homepage/_cards.html.erb delete mode 100644 app/views/admin/site_customization/cards/_card.html.erb delete mode 100644 app/views/admin/site_customization/cards/_cards.html.erb diff --git a/app/views/admin/homepage/_card.html.erb b/app/components/admin/widget/cards/row_component.html.erb similarity index 100% rename from app/views/admin/homepage/_card.html.erb rename to app/components/admin/widget/cards/row_component.html.erb diff --git a/app/components/admin/widget/cards/row_component.rb b/app/components/admin/widget/cards/row_component.rb new file mode 100644 index 000000000..fed569949 --- /dev/null +++ b/app/components/admin/widget/cards/row_component.rb @@ -0,0 +1,7 @@ +class Admin::Widget::Cards::RowComponent < ApplicationComponent + attr_reader :card + + def initialize(card) + @card = card + end +end diff --git a/app/components/admin/widget/cards/table_component.html.erb b/app/components/admin/widget/cards/table_component.html.erb new file mode 100644 index 000000000..01a52aec5 --- /dev/null +++ b/app/components/admin/widget/cards/table_component.html.erb @@ -0,0 +1,22 @@ +<% if cards.any? %> +
<%= t("admin.site_customization.pages.cards.title") %><%= t("admin.site_customization.pages.cards.description") %><%= t("admin.site_customization.pages.cards.link_text") %> / <%= t("admin.site_customization.pages.cards.link_url") %><%= Widget::Card.human_attribute_name(:title) %><%= Widget::Card.human_attribute_name(:description) %><%= Widget::Card.human_attribute_name(:link_text) %> / <%= Widget::Card.human_attribute_name(:link_url) %> <%= t("admin.shared.image") %> <%= t("admin.shared.actions") %>
+ + + + + + + + + + + <% cards.each do |card| %> + <%= render Admin::Widget::Cards::RowComponent.new(card) %> + <% end %> + +
<%= ::Widget::Card.human_attribute_name(:title) %><%= ::Widget::Card.human_attribute_name(:description) %><%= ::Widget::Card.human_attribute_name(:link_text) %> / <%= ::Widget::Card.human_attribute_name(:link_url) %><%= t("admin.shared.image") %><%= t("admin.shared.actions") %>
+<% else %> +
+ <%= no_cards_message %> +
+<% end %> diff --git a/app/components/admin/widget/cards/table_component.rb b/app/components/admin/widget/cards/table_component.rb new file mode 100644 index 000000000..74e2112a3 --- /dev/null +++ b/app/components/admin/widget/cards/table_component.rb @@ -0,0 +1,8 @@ +class Admin::Widget::Cards::TableComponent < ApplicationComponent + attr_reader :cards, :no_cards_message + + def initialize(cards, no_cards_message:) + @cards = cards + @no_cards_message = no_cards_message + end +end diff --git a/app/views/admin/homepage/_cards.html.erb b/app/views/admin/homepage/_cards.html.erb deleted file mode 100644 index ae2fef6d0..000000000 --- a/app/views/admin/homepage/_cards.html.erb +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - <% cards.each do |card| %> - <%= render "card", card: card %> - <% end %> - -
<%= Widget::Card.human_attribute_name(:title) %><%= Widget::Card.human_attribute_name(:description) %><%= Widget::Card.human_attribute_name(:link_text) %> / <%= Widget::Card.human_attribute_name(:link_url) %><%= t("admin.shared.image") %><%= t("admin.shared.actions") %>
diff --git a/app/views/admin/homepage/show.html.erb b/app/views/admin/homepage/show.html.erb index b931feff5..3c933c961 100644 --- a/app/views/admin/homepage/show.html.erb +++ b/app/views/admin/homepage/show.html.erb @@ -9,13 +9,10 @@ <%= link_to t("admin.homepage.create_header"), new_admin_widget_card_path(header_card: true), class: "button" %>
- <% if @header.present? %> - <%= render "cards", cards: @header %> - <% else %> -
- <%= t("admin.homepage.no_header") %> -
- <% end %> + <%= render Admin::Widget::Cards::TableComponent.new( + @header, + no_cards_message: t("admin.homepage.no_header") + ) %>

@@ -27,13 +24,10 @@ <%= link_to t("admin.homepage.create_card"), new_admin_widget_card_path, class: "button" %>
- <% if @cards.present? %> - <%= render "cards", cards: @cards %> - <% else %> -
- <%= t("admin.homepage.no_cards") %> -
- <% end %> + <%= render Admin::Widget::Cards::TableComponent.new( + @cards, + no_cards_message: t("admin.homepage.no_cards") + ) %>
diff --git a/app/views/admin/site_customization/cards/_card.html.erb b/app/views/admin/site_customization/cards/_card.html.erb deleted file mode 100644 index 94025a7b1..000000000 --- a/app/views/admin/site_customization/cards/_card.html.erb +++ /dev/null @@ -1,22 +0,0 @@ - - - <%= card.label %>
- <%= card.title %> - - <%= card.description %> - - <%= card.link_text %>
- <%= card.link_url %> - - - - - <% if card.image.present? %> - <%= link_to t("admin.shared.show_image"), card.image_url(:large), - title: card.image.title, target: "_blank" %> - <% end %> - - - <%= render Admin::TableActionsComponent.new(card) %> - - diff --git a/app/views/admin/site_customization/cards/_cards.html.erb b/app/views/admin/site_customization/cards/_cards.html.erb deleted file mode 100644 index 8d9d87c96..000000000 --- a/app/views/admin/site_customization/cards/_cards.html.erb +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - <% cards.each do |card| %> - <%= render "card", card: card %> - <% end %> - -
<%= Widget::Card.human_attribute_name(:title) %><%= Widget::Card.human_attribute_name(:description) %><%= Widget::Card.human_attribute_name(:link_text) %> / <%= Widget::Card.human_attribute_name(:link_url) %><%= t("admin.shared.image") %><%= t("admin.shared.actions") %>
diff --git a/app/views/admin/site_customization/cards/index.html.erb b/app/views/admin/site_customization/cards/index.html.erb index ff94623f5..1957744ff 100644 --- a/app/views/admin/site_customization/cards/index.html.erb +++ b/app/views/admin/site_customization/cards/index.html.erb @@ -11,11 +11,8 @@ new_admin_site_customization_page_widget_card_path(@page), class: "button" %> - <% if @cards.present? %> - <%= render "cards", cards: @cards %> - <% else %> -
- <%= t("admin.site_customization.pages.cards.no_cards") %> -
- <% end %> + <%= render Admin::Widget::Cards::TableComponent.new( + @cards, + no_cards_message: t("admin.site_customization.pages.cards.no_cards") + ) %> From 1f6ca4980fb004b9ffc0804d8d11ed5354391c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Javi=20Mart=C3=ADn?= Date: Wed, 6 Jan 2021 20:18:10 +0100 Subject: [PATCH 11/12] Extract method in cards table component --- app/components/admin/widget/cards/table_component.html.erb | 6 +++--- app/components/admin/widget/cards/table_component.rb | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/app/components/admin/widget/cards/table_component.html.erb b/app/components/admin/widget/cards/table_component.html.erb index 01a52aec5..d7fc9e579 100644 --- a/app/components/admin/widget/cards/table_component.html.erb +++ b/app/components/admin/widget/cards/table_component.html.erb @@ -2,9 +2,9 @@ - - - + + + diff --git a/app/components/admin/widget/cards/table_component.rb b/app/components/admin/widget/cards/table_component.rb index 74e2112a3..eba23de30 100644 --- a/app/components/admin/widget/cards/table_component.rb +++ b/app/components/admin/widget/cards/table_component.rb @@ -5,4 +5,10 @@ class Admin::Widget::Cards::TableComponent < ApplicationComponent @cards = cards @no_cards_message = no_cards_message end + + private + + def attribute_name(attribute) + ::Widget::Card.human_attribute_name(attribute) + end end From 3aaf5ce151a7d673a347d5beb49073167947915e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sen=C3=A9n=20Rodero=20Rodr=C3=ADguez?= Date: Mon, 11 Jan 2021 17:43:46 +0100 Subject: [PATCH 12/12] Add back link to cards form As we normally do in other places. --- .../admin/site_customization/cards_controller.rb | 1 + app/controllers/admin/widget/cards_controller.rb | 1 + app/views/admin/widget/cards/edit.html.erb | 2 ++ app/views/admin/widget/cards/new.html.erb | 2 ++ spec/system/admin/widgets/cards_spec.rb | 10 ++++++++++ 5 files changed, 16 insertions(+) diff --git a/app/controllers/admin/site_customization/cards_controller.rb b/app/controllers/admin/site_customization/cards_controller.rb index 86c229ffc..0e2e2f190 100644 --- a/app/controllers/admin/site_customization/cards_controller.rb +++ b/app/controllers/admin/site_customization/cards_controller.rb @@ -2,6 +2,7 @@ class Admin::SiteCustomization::CardsController < Admin::SiteCustomization::Base include Admin::Widget::CardsActions load_and_authorize_resource :page, class: "::SiteCustomization::Page" load_and_authorize_resource :card, through: :page, class: "Widget::Card" + helper_method :index_path def index end diff --git a/app/controllers/admin/widget/cards_controller.rb b/app/controllers/admin/widget/cards_controller.rb index 5d676e66a..64ea72bb5 100644 --- a/app/controllers/admin/widget/cards_controller.rb +++ b/app/controllers/admin/widget/cards_controller.rb @@ -1,6 +1,7 @@ class Admin::Widget::CardsController < Admin::BaseController include Admin::Widget::CardsActions load_and_authorize_resource :card, class: "Widget::Card" + helper_method :index_path private diff --git a/app/views/admin/widget/cards/edit.html.erb b/app/views/admin/widget/cards/edit.html.erb index d7ab58339..f4f751fd1 100644 --- a/app/views/admin/widget/cards/edit.html.erb +++ b/app/views/admin/widget/cards/edit.html.erb @@ -1,3 +1,5 @@ +<%= back_link_to index_path %> +

<% if @card.header? %> <%= t("admin.homepage.edit.header_title") %> diff --git a/app/views/admin/widget/cards/new.html.erb b/app/views/admin/widget/cards/new.html.erb index d12f8ab7c..f15f0172e 100644 --- a/app/views/admin/widget/cards/new.html.erb +++ b/app/views/admin/widget/cards/new.html.erb @@ -1,3 +1,5 @@ +<%= back_link_to index_path %> +

<% if @card.header? %> <%= t("admin.homepage.new.header_title") %> diff --git a/spec/system/admin/widgets/cards_spec.rb b/spec/system/admin/widgets/cards_spec.rb index 039f7637d..444968b7d 100644 --- a/spec/system/admin/widgets/cards_spec.rb +++ b/spec/system/admin/widgets/cards_spec.rb @@ -5,6 +5,8 @@ describe "Cards", :admin do visit admin_homepage_path click_link "Create card" + expect(page).to have_link("Go back", href: admin_homepage_path) + fill_in "Label (optional)", with: "Card label" fill_in "Title", with: "Card text" fill_in "Description", with: "Card description" @@ -74,6 +76,8 @@ describe "Cards", :admin do click_link "Edit" end + expect(page).to have_link("Go back", href: admin_homepage_path) + within(".translatable-fields") do fill_in "Label (optional)", with: "Card label updated" fill_in "Title", with: "Card text updated" @@ -160,6 +164,9 @@ describe "Cards", :admin do click_link "Create card" + expect(page).to have_link("Go back", + href: admin_site_customization_page_widget_cards_path(custom_page)) + fill_in "Title", with: "Card for a custom page" click_button "Create card" @@ -205,6 +212,9 @@ describe "Cards", :admin do click_link "Edit" + expect(page).to have_link("Go back", + href: admin_site_customization_page_widget_cards_path(custom_page)) + within(".translatable-fields") do fill_in "Title", with: "Updated title" end

<%= ::Widget::Card.human_attribute_name(:title) %><%= ::Widget::Card.human_attribute_name(:description) %><%= ::Widget::Card.human_attribute_name(:link_text) %> / <%= ::Widget::Card.human_attribute_name(:link_url) %><%= attribute_name(:title) %><%= attribute_name(:description) %><%= attribute_name(:link_text) %> / <%= attribute_name(:link_url) %> <%= t("admin.shared.image") %> <%= t("admin.shared.actions") %>