Prepare relatable concern and relations controller

Allow send Goals and Targets from edit component input field
This commit is contained in:
taitus
2021-01-18 11:44:16 +01:00
parent beda6cb8c8
commit 7b1821fc9b
6 changed files with 53 additions and 20 deletions

View File

@@ -1,7 +1,7 @@
<%= header %> <%= header %>
<%= form_for record, url: update_path do |f| %> <%= form_for record, url: update_path do |f| %>
<%= f.text_field :sdg_target_list %> <%= f.text_field :sdg_related_list %>
<%= f.submit %> <%= f.submit %>
<% end %> <% end %>

View File

@@ -21,7 +21,7 @@ class SDGManagement::RelationsController < SDGManagement::BaseController
end end
def update def update
@record.sdg_target_list = params[@record.class.table_name.singularize][:sdg_target_list] @record.sdg_related_list = params[@record.class.table_name.singularize][:sdg_related_list]
redirect_to({ action: :index }, notice: update_notice) redirect_to({ action: :index }, notice: update_notice)
end end

View File

@@ -50,12 +50,20 @@ module SDG::Relatable
sdg_targets.sort.map(&:code).join(", ") sdg_targets.sort.map(&:code).join(", ")
end end
def sdg_target_list=(codes) def sdg_related_list
targets = codes.tr(" ", "").split(",").map { |code| SDG::Target[code] } sdg_goals.order(:code).map do |goal|
[goal, sdg_targets.where(goal: goal).sort]
end.flatten.map(&:code).join(", ")
end
def sdg_related_list=(codes)
target_codes, goal_codes = codes.tr(" ", "").split(",").partition { |code| code.include?(".") }
targets = target_codes.map { |code| SDG::Target[code] }
goals = goal_codes.map { |code| SDG::Goal[code] }
transaction do transaction do
self.sdg_targets = targets self.sdg_targets = targets
self.sdg_goals = targets.map(&:goal).uniq self.sdg_goals = (targets.map(&:goal) + goals).uniq
end end
end end
end end

View File

@@ -2,7 +2,7 @@ en:
attributes: attributes:
geozone_id: "Scope of operation" geozone_id: "Scope of operation"
results_enabled: "Show results" results_enabled: "Show results"
sdg_target_list: "Targets" sdg_related_list: "Sustainable Development Goals and Targets"
stats_enabled: "Show stats" stats_enabled: "Show stats"
advanced_stats_enabled: "Show advanced stats" advanced_stats_enabled: "Show advanced stats"
name: Name name: Name

View File

@@ -2,7 +2,7 @@ es:
attributes: attributes:
geozone_id: "Ámbito de actuación" geozone_id: "Ámbito de actuación"
results_enabled: "Mostrar resultados" results_enabled: "Mostrar resultados"
sdg_target_list: "Metas" sdg_related_list: "Objetivos de Desarrollo Sostenible y Metas"
stats_enabled: "Mostrar estadísticas" stats_enabled: "Mostrar estadísticas"
advanced_stats_enabled: "Mostrar estadísticas avanzadas" advanced_stats_enabled: "Mostrar estadísticas avanzadas"
name: Nombre name: Nombre

View File

@@ -80,6 +80,15 @@ describe SDG::Relatable do
end end
end end
describe "#sdg_related_list" do
it "orders related list by code" do
relatable.sdg_goals = [SDG::Goal[1], SDG::Goal[3], SDG::Goal[2]]
relatable.sdg_targets = [SDG::Target[2.2], SDG::Target[1.2], SDG::Target[2.1]]
expect(relatable.sdg_related_list).to eq "1, 1.2, 2, 2.1, 2.2, 3"
end
end
describe "#related_sdgs" do describe "#related_sdgs" do
it "returns all related goals and targets" do it "returns all related goals and targets" do
relatable.sdg_goals = [goal, another_goal] relatable.sdg_goals = [goal, another_goal]
@@ -91,29 +100,45 @@ describe SDG::Relatable do
end end
end end
describe "#sdg_target_list=" do describe "#sdg_related_list=" do
it "assigns a single target" do it "assigns a single goal" do
relatable.sdg_target_list = "1.1" relatable.sdg_related_list = "1"
expect(relatable.reload.sdg_targets).to match_array [SDG::Target["1.1"]] expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1]]
end
it "assigns a single target" do
relatable.sdg_related_list = "1.1"
expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1]]
expect(relatable.reload.sdg_targets).to match_array [SDG::Target[1.1]]
end end
it "assigns multiple targets" do it "assigns multiple targets" do
relatable.sdg_target_list = "1.1,2.3" relatable.sdg_related_list = "1.1,2.3"
expect(relatable.reload.sdg_targets).to match_array [SDG::Target["1.1"], SDG::Target["2.3"]] expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1], SDG::Goal[2]]
expect(relatable.reload.sdg_targets).to match_array [SDG::Target[1.1], SDG::Target[2.3]]
end
it "assigns multiple goals" do
relatable.sdg_related_list = "3,2,1"
expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1], SDG::Goal[2], SDG::Goal[3]]
end end
it "ignores trailing spaces and spaces between commas" do it "ignores trailing spaces and spaces between commas" do
relatable.sdg_target_list = " 1.1, 2.3 " relatable.sdg_related_list = " 1.1, 2.3 "
expect(relatable.reload.sdg_targets).to match_array [SDG::Target["1.1"], SDG::Target["2.3"]]
end
it "assigns goals" do
relatable.sdg_target_list = "1.1,1.2,2.3"
expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1], SDG::Goal[2]] expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1], SDG::Goal[2]]
expect(relatable.reload.sdg_targets).to match_array [SDG::Target[1.1], SDG::Target[2.3]]
end
it "assigns goals and targets" do
relatable.sdg_related_list = "1.1,3,4,4.1"
expect(relatable.reload.sdg_goals).to match_array [SDG::Goal[1], SDG::Goal[3], SDG::Goal[4]]
expect(relatable.reload.sdg_targets).to match_array [SDG::Target[1.1], SDG::Target[4.1]]
end end
end end