konsento/konsento

View on GitHub
app/controllers/requirement_values_controller.rb

Summary

Maintainability
A
0 mins
Test Coverage
class RequirementValuesController < ApplicationController
  before_action :set_requirement_value, only: [:show, :edit, :update, :destroy]
  before_action :is_user_valid, only: [:new, :create]

  def index
    @requirement_values = current_user.requirement_values
    add_breadcrumb RequirementValue.model_name.human(count: 2)
  end

  # GET /requirement_values/new
  def new
    requirable = params[:requirable_type].constantize.find(params[:requirable_id])
    current_user.empty_requirement_values = current_user.empty_requirement_values_for(requirable)
  end

  # POST /requirement_values
  def create
    requirable = params[:requirable_type].constantize.find(params[:requirable_id])
    ActiveRecord::Base.transaction do
      user_params[:requirement_values].each do |r|
        current_user.requirement_values.create(r)
      end
      current_user.subscriptions.create(subscriptable: requirable, role: 'default')
    end

    case requirable.model_name
      when 'Location'
        redirect_to requirable
      when 'Team'
        TeamInvitation.find_by(email: current_user.email, team: requirable).update(accepted: true)
        redirect_to teams_path
    end
  end

  # PATCH/PUT /requirement_values/1
  def update
    if @requirement_value.update(requirement_value_params)
      respond_with @requirement_value
    else
      render :edit
    end
  end

  # DELETE /requirement_values/1
  def destroy
    @requirement_value.destroy
    redirect_to requirement_values_url
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_requirement_value
      @requirement_value = RequirementValue.find(params[:id])
    end

    def is_user_valid
      if current_user.id.to_s != params[:user_id].to_s
        raise 'Invalid user'
      end
    end

    def user_params
      params.require(:user).permit(
        requirement_values: [
          :join_requirement_id,
          :user_id,
          :value
        ]
      )
    end
end