Prepare relatable concern and relations controller
Allow send Goals and Targets from edit component input field
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
<%= header %>
|
||||
|
||||
<%= form_for record, url: update_path do |f| %>
|
||||
<%= f.text_field :sdg_target_list %>
|
||||
<%= f.text_field :sdg_related_list %>
|
||||
|
||||
<%= f.submit %>
|
||||
<% end %>
|
||||
|
||||
@@ -21,7 +21,7 @@ class SDGManagement::RelationsController < SDGManagement::BaseController
|
||||
end
|
||||
|
||||
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)
|
||||
end
|
||||
|
||||
@@ -50,12 +50,20 @@ module SDG::Relatable
|
||||
sdg_targets.sort.map(&:code).join(", ")
|
||||
end
|
||||
|
||||
def sdg_target_list=(codes)
|
||||
targets = codes.tr(" ", "").split(",").map { |code| SDG::Target[code] }
|
||||
def sdg_related_list
|
||||
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
|
||||
self.sdg_targets = targets
|
||||
self.sdg_goals = targets.map(&:goal).uniq
|
||||
self.sdg_goals = (targets.map(&:goal) + goals).uniq
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ en:
|
||||
attributes:
|
||||
geozone_id: "Scope of operation"
|
||||
results_enabled: "Show results"
|
||||
sdg_target_list: "Targets"
|
||||
sdg_related_list: "Sustainable Development Goals and Targets"
|
||||
stats_enabled: "Show stats"
|
||||
advanced_stats_enabled: "Show advanced stats"
|
||||
name: Name
|
||||
|
||||
@@ -2,7 +2,7 @@ es:
|
||||
attributes:
|
||||
geozone_id: "Ámbito de actuación"
|
||||
results_enabled: "Mostrar resultados"
|
||||
sdg_target_list: "Metas"
|
||||
sdg_related_list: "Objetivos de Desarrollo Sostenible y Metas"
|
||||
stats_enabled: "Mostrar estadísticas"
|
||||
advanced_stats_enabled: "Mostrar estadísticas avanzadas"
|
||||
name: Nombre
|
||||
|
||||
@@ -80,6 +80,15 @@ describe SDG::Relatable do
|
||||
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
|
||||
it "returns all related goals and targets" do
|
||||
relatable.sdg_goals = [goal, another_goal]
|
||||
@@ -91,29 +100,45 @@ describe SDG::Relatable do
|
||||
end
|
||||
end
|
||||
|
||||
describe "#sdg_target_list=" do
|
||||
it "assigns a single target" do
|
||||
relatable.sdg_target_list = "1.1"
|
||||
describe "#sdg_related_list=" do
|
||||
it "assigns a single goal" do
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
it "ignores trailing spaces and spaces between commas" do
|
||||
relatable.sdg_target_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"
|
||||
relatable.sdg_related_list = " 1.1, 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 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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user