class MetacodeSetsController < ApplicationController before_filter :require_admin # GET /metacode_sets # GET /metacode_sets.json def index @metacode_sets = MetacodeSet.order("name").all respond_to do |format| format.html # index.html.erb format.json { render json: @metacode_sets } end end ### SHOW IS NOT CURRENTLY IN USE # GET /metacode_sets/1 # GET /metacode_sets/1.json # def show # @metacode_set = MetacodeSet.find(params[:id]) # # respond_to do |format| # format.html # show.html.erb # format.json { render json: @metacode_set } # end # end # GET /metacode_sets/new # GET /metacode_sets/new.json def new @metacode_set = MetacodeSet.new respond_to do |format| format.html # new.html.erb format.json { render json: @metacode_set } end end # GET /metacode_sets/1/edit def edit @metacode_set = MetacodeSet.find(params[:id]) end # POST /metacode_sets # POST /metacode_sets.json def create @user = current_user @metacode_set = MetacodeSet.new(params[:metacode_set]) @metacode_set.user_id = @user.id respond_to do |format| 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 format.html { redirect_to metacode_sets_url, notice: 'Metacode set was successfully created.' } format.json { render json: @metacode_set, status: :created, location: metacode_sets_url } else format.html { render action: "new" } format.json { render json: @metacode_set.errors, status: :unprocessable_entity } end end end # PUT /metacode_sets/1 # PUT /metacode_sets/1.json def update @metacode_set = MetacodeSet.find(params[:id]) respond_to do |format| if @metacode_set.update_attributes(params[:metacode_set]) # build an array of the IDs of the metacodes currently in the set @currentMetacodes = @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 @newMetacodes = params[:metacodes][:value].split(',') #remove the metacodes that were in it, but now aren't @removedMetacodes = @currentMetacodes - @newMetacodes @removedMetacodes.each do |m| @inmetacodeset = InMetacodeSet.find_by_metacode_id_and_metacode_set_id(m, @metacode_set.id) @inmetacodeset.destroy end # add the new metacodes @addedMetacodes = @newMetacodes - @currentMetacodes @addedMetacodes.each do |m| InMetacodeSet.create(:metacode_id => m, :metacode_set_id => @metacode_set.id) end format.html { redirect_to metacode_sets_url, notice: 'Metacode set was successfully updated.' } format.json { head :no_content } else format.html { render action: "edit" } format.json { render json: @metacode_set.errors, status: :unprocessable_entity } end end end # DELETE /metacode_sets/1 # DELETE /metacode_sets/1.json def destroy @metacode_set = MetacodeSet.find(params[:id]) #delete everything that tracks what's in the set @metacode_set.in_metacode_sets.each do |m| m.destroy end @metacode_set.destroy respond_to do |format| format.html { redirect_to metacode_sets_url } format.json { head :no_content } end end private def metacode_set_params params.require(:metacode_set).permit(:desc, :mapperContributed, :name) end end