Sha256: 5071d64382fe967b1596338ae206330972239358067921e6e2f566491dc666a3

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# frozen_string_literal: true

module Spree
  class GraphqlController < ApplicationController
    include ActiveStorage::SetCurrent

    skip_before_action :verify_authenticity_token

    def execute
      render json: SolidusGraphqlApi::Schema.execute(
        params[:query],
        variables: ensure_hash(params[:variables]),
        context: SolidusGraphqlApi::Context.new(request: request).to_h,
        operation_name: params[:operationName]
      )
    rescue StandardError => e
      raise e unless Rails.env.development?

      handle_error_in_development e
    end

    private

    # Handle form data, JSON body, or a blank value
    def ensure_hash(ambiguous_param)
      case ambiguous_param
      when String
        if ambiguous_param.present?
          ensure_hash(JSON.parse(ambiguous_param))
        else
          {}
        end
      when Hash
        ambiguous_param
      when ActionController::Parameters
        ambiguous_param.permit!
      when nil
        {}
      else
        raise ArgumentError, "Unexpected parameter: #{ambiguous_param}"
      end
    end

    def handle_error_in_development(error)
      logger.error error.message
      logger.error error.backtrace.join("\n")

      render json: { error: { message: error.message, backtrace: error.backtrace }, data: {} }, status: 500
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
solidus_graphql_api-0.3.1 app/controllers/spree/graphql_controller.rb
solidus_graphql_api-0.3.0 app/controllers/spree/graphql_controller.rb
solidus_graphql_api-0.2.0 app/controllers/spree/graphql_controller.rb