metamaps--metamaps/app/controllers/metacode_sets_controller.rb
2018-03-09 15:54:30 -05:00

73 lines
2.3 KiB
Ruby

# frozen_string_literal: true
class MetacodeSetsController < ApplicationController
include MetacodesHelper
before_action :require_admin, except: :index
# GET /metacode_sets
def index
@metacode_sets = MetacodeSet.order('name').all
render json: metacode_sets_json
end
# POST /metacode_sets
def create
@user = current_user
@metacode_set = MetacodeSet.new(metacode_set_params)
@metacode_set.user_id = @user.id
if @metacode_set.save
# create the InMetacodeSet for all the metacodes that were selected for the set
@metacodes = params[:metacodes][:value].split(',')
@metacodes.each do |m|
InMetacodeSet.create(metacode_id: m, metacode_set_id: @metacode_set.id)
end
render json: @metacode_set, status: :created
else
render json: @metacode_set.errors, status: :unprocessable_entity
end
end
# PUT /metacode_sets/1
def update
@metacode_set = MetacodeSet.find(params[:id])
if @metacode_set.update_attributes(metacode_set_params)
# build an array of the IDs of the metacodes currently in the set
current_metacodes = @metacode_set.metacodes.map { |m| m.id.to_s }
# get the list of desired metacodes for the set from the user input and build an array out of it
new_metacodes = params[:metacodes][:value].split(',')
# remove the metacodes that were in it, but now aren't
removed_metacodes = current_metacodes - new_metacodes
removed_metacodes.each do |m|
inmetacodeset = InMetacodeSet.find_by(metacode_id: m, metacode_set_id: @metacode_set.id)
inmetacodeset.destroy
end
# add the new metacodes
added_metacodes = new_metacodes - current_metacodes
added_metacodes.each do |m|
InMetacodeSet.create(metacode_id: m, metacode_set_id: @metacode_set.id)
end
head :no_content
else
render json: @metacode_set.errors, status: :unprocessable_entity
end
end
# DELETE /metacode_sets/1
def destroy
@metacode_set = MetacodeSet.find(params[:id])
# delete everything that tracks what's in the set
@metacode_set.in_metacode_sets.each(&:destroy)
@metacode_set.destroy
head :no_content
end
private
def metacode_set_params
params.require(:metacode_set).permit(:desc, :mapperContributed, :name)
end
end