Sha256: 1d3f5b01fcafb12adf902acf8f9ea0172771d90be69d26cef98cf013384755e8

Contents?: true

Size: 1.8 KB

Versions: 41

Compression:

Stored size: 1.8 KB

Contents

module Comee
  module Core
    module Common
      extend ActiveSupport::Concern

      included do
        before_action :set_clazz
        before_action :set_object, only: %i[show update]
      end

      def index
        data = if block_given?
                 yield
               else
                 @clazz.all
               end
        render json: {success: true, data: serialize(data)}
      end

      def show
        render json: {success: true, data: serialize(@obj)}
      end

      def create
        obj = if block_given?
                yield
              else
                @clazz.new(model_params)
              end
        if obj.save
          render json: {success: true, data: serialize(obj)}, status: :created
        else
          render json: {success: false, error: obj.errors.full_messages[0]}, status: :unprocessable_entity
        end
      rescue StandardError => e
        render json: {success: false, error: e.message}
      end

      def update
        obj = if block_given?
                yield
              else
                obj = @obj
              end
        if obj.update(model_params)
          render json: {success: true, data: serialize(obj)}
        else
          render json: {success: false, error: obj.errors.full_messages[0]}, status: :unprocessable_entity
        end
      rescue StandardError => e
        render json: {success: false, error: e.message}
      end

      private

      def serialize(data)
        ActiveModelSerializers::SerializableResource.new(data)
      end

      def set_clazz
        @clazz = "Comee::Core::#{controller_name.classify}".constantize
      end

      def set_object
        @obj = @clazz.find(params[:id])
      end

      # This class should be overridden by respective child controllers
      def model_params; end
    end
  end
end

Version data entries

41 entries across 41 versions & 1 rubygems

Version Path
comee_core-0.1.61 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.60 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.59 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.58 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.57 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.56 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.55 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.54 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.53 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.52 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.51 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.50 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.49 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.48 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.47 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.46 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.45 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.45.pre3 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.45.pre2 app/controllers/concerns/comee/core/common.rb
comee_core-0.1.45.pre app/controllers/concerns/comee/core/common.rb