app/controllers/meta_data_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
# -*- encoding : utf-8 -*-
class MetaDataController < ApplicationController

  def update

    begin
      @media_resource = MediaResource.accessible_by_user(current_user, :edit) \
      .find(params[:media_resource_id])
    rescue ActiveRecord::RecordNotFound
      raise UserForbiddenError
    end
    attributes = {meta_data_attributes: { '0' => 
      { meta_key_label: params[:id], value: params[:value]} }}

    begin
      ActiveRecord::Base.transaction do
        if @media_resource.set_meta_data attributes
          @media_resource.editors << current_user
          @media_resource.touch
          render json: {}
        else
          render json: {}, status: :unprocessable_entity 
        end
      end
    rescue
      raise NotAllowedError
    end
  end

  def update_multiple
    begin 
      @media_resource = MediaResource.accessible_by_user(current_user, :edit) \
      .find(params[:media_resource][:id])
      ActiveRecord::Base.transaction do
        if @media_resource.set_meta_data params[:resource]
          @media_resource.editors << current_user
          @media_resource.touch
          flash[:notice] = "Die Ă„nderungen wurden gespeichert."
        else
          flash[:error] = "Die Ă„nderungen wurden nicht gespeichert."
        end
      end
      redirect_to @media_resource
    rescue ActiveRecord::RecordNotFound 
      raise UserForbiddenError
    end
  end

  def apply_to_all
    if not (@media_resources = MediaResource.accessible_by_user(current_user, :edit).where(:id => MediaResource.by_collection(params[:collection_id]))).blank?

      attributes = {meta_data_attributes: { '0' => 
        { meta_key_label: params[:id], value: params[:value]} }}
      if params[:overwrite] == "false"
        attributes[:meta_data_attributes]["0"][:keep_original_value_if_exists] = true
      end

      begin
        ActiveRecord::Base.transaction do
          @media_resources.each do |media_resource|

            if media_resource.set_meta_data attributes
              media_resource.editors << current_user
              media_resource.touch
            else
              raise media_resource.errors.full_messages.join(", ")
            end
          end
        end
      rescue
        raise UnprocessableEntityError
      end

      render json: {}, status: :ok
    else
      raise NotAllowedError
    end
  end

end