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 %>
|
<%= 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 %>
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user