Sha256: b1a77bb9d2296c433ebabf2bf835108b99ebe1a28cd58f79c89d39bf2252a1d6

Contents?: true

Size: 1.86 KB

Versions: 43

Compression:

Stored size: 1.86 KB

Contents

# frozen_string_literal: true

module Motor
  class DataController < ApiBaseController
    wrap_parameters :data, except: %i[include fields]

    include Motor::WrapIoParams
    include Motor::LoadAndAuthorizeDynamicResource

    def index
      @resources = Motor::ApiQuery.call(@resources, params)

      render json: {
        data: Motor::ApiQuery::BuildJson.call(@resources, params, current_ability),
        meta: Motor::ApiQuery::BuildMeta.call(@resources, params)
      }
    end

    def show
      render json: { data: Motor::ApiQuery::BuildJson.call(@resource, params, current_ability) }
    end

    def create
      @resource.save!

      render json: { data: Motor::ApiQuery::BuildJson.call(@resource, params, current_ability) }
    rescue ActiveRecord::RecordInvalid
      render json: { errors: @resource.errors }, status: :unprocessable_entity
    end

    def update
      @resource.update!(resource_params)

      render json: { data: Motor::ApiQuery::BuildJson.call(@resource, params, current_ability) }
    rescue ActiveRecord::RecordInvalid
      render json: { errors: @resource.errors }, status: :unprocessable_entity
    end

    def destroy
      if @resource.respond_to?(:deleted_at)
        @resource.update(deleted_at: Time.current)
      else
        @resource.destroy!
      end

      head :ok
    end

    def execute
      resource_preferences = Motor::Resource.find_by(name: @resource.class.name.underscore).preferences
      resource_action = resource_preferences[:actions].find { |a| a[:preferences][:method_name] == params[:method] }

      authorize!(resource_action[:name].to_sym, @resource)

      @resource.public_send(params[:method].to_sym)

      head :ok
    end

    private

    def resource_params
      if params[:data].present?
        params.require(:data).except(resource_class.primary_key).permit!
      else
        {}
      end
    end
  end
end

Version data entries

43 entries across 43 versions & 1 rubygems

Version Path
motor-admin-0.1.104 app/controllers/motor/data_controller.rb
motor-admin-0.1.103 app/controllers/motor/data_controller.rb
motor-admin-0.1.102 app/controllers/motor/data_controller.rb
motor-admin-0.1.101 app/controllers/motor/data_controller.rb
motor-admin-0.1.100 app/controllers/motor/data_controller.rb
motor-admin-0.1.99 app/controllers/motor/data_controller.rb
motor-admin-0.1.98 app/controllers/motor/data_controller.rb
motor-admin-0.1.97 app/controllers/motor/data_controller.rb
motor-admin-0.1.96 app/controllers/motor/data_controller.rb
motor-admin-0.1.93 app/controllers/motor/data_controller.rb
motor-admin-0.1.92 app/controllers/motor/data_controller.rb
motor-admin-0.1.91 app/controllers/motor/data_controller.rb
motor-admin-0.1.90 app/controllers/motor/data_controller.rb
motor-admin-0.1.89 app/controllers/motor/data_controller.rb
motor-admin-0.1.88 app/controllers/motor/data_controller.rb
motor-admin-0.1.87 app/controllers/motor/data_controller.rb
motor-admin-0.1.86 app/controllers/motor/data_controller.rb
motor-admin-0.1.85 app/controllers/motor/data_controller.rb
motor-admin-0.1.84 app/controllers/motor/data_controller.rb
motor-admin-0.1.83 app/controllers/motor/data_controller.rb