3scale/porta

View on GitHub
app/controllers/provider/admin/backend_apis/metrics_controller.rb

Summary

Maintainability
A
40 mins
Test Coverage
# frozen_string_literal: true

class Provider::Admin::BackendApis::MetricsController < Provider::Admin::BackendApis::BaseController
  include MetricParams

  before_action :find_metric, except: %i[new create index]

  activate_menu :backend_api, :methods_metrics
  sublayout 'api/service'

  helper_method :presenter

  attr_reader :backend_api

  delegate :metrics, to: :backend_api, prefix: true

  def index; end

  def new
    @metric = collection.build
  end

  # TODO: DRY this, similar to app/controllers/api/metrics_controller.rb#create
  def create
    @metric = collection.build(create_params)
    if @metric.save
      flash[:notice] = "The #{metric_type} was created"
      redirect_to provider_admin_backend_api_metrics_path(@backend_api, tab: "#{metric_type}s")
    else
      flash[:error] = "#{metric_type.capitalize} could not be created"
      render :new
    end
  end

  def edit; end

  def update
    if @metric.update(update_params)
      flash[:notice] = "The #{metric_type} was updated"
      redirect_to provider_admin_backend_api_metrics_path(@backend_api, tab: "#{metric_type}s")
    else
      flash[:error] = "#{metric_type.capitalize} could not be updated"
      render :edit
    end
  end

  def destroy
    if @metric.destroy
      flash[:notice] = "The #{metric_type} was deleted"
      redirect_to provider_admin_backend_api_metrics_path(@backend_api, tab: "#{metric_type}s")
    else
      flash[:error] = "The #{metric_type} could not be deleted"
      render :edit
    end
  end

  private

  def find_metric
    @metric = backend_api_metrics.find(params[:id])
  end

  def metric_type
    @metric.child? ? 'method' : 'metric'
  end

  def collection
    metric_id = params[:metric_id]
    metric_id ? backend_api_metrics.find(metric_id).children : backend_api_metrics
  end

  def presenter
    @presenter ||= Provider::Admin::BackendApis::MetricsIndexPresenter.new(backend_api: backend_api, params: params)
  end
end