Sha256: d9c117b07f5e1d66fbeb00efd6776eab5e45228f1151977fa271a795928f9af2

Contents?: true

Size: 1.64 KB

Versions: 2

Compression:

Stored size: 1.64 KB

Contents

require 'graphql/rails_logger/configuration'
require 'action_controller/log_subscriber'
require 'rouge'

module GraphQL
  module RailsLogger
    class << self
      attr_accessor :configuration
    end

    def self.configuration
      @configuration ||= Configuration.new
    end

    def self.configure
      yield(configuration)
    end

    class Subscriber < ActionController::LogSubscriber
      def start_processing(event)
        return unless logger.info?

        payload = event.payload
        params  = payload[:params].except(*INTERNAL_PARAMS)
        format  = payload[:format]
        format  = format.to_s.upcase if format.is_a?(Symbol)

        config = GraphQL::RailsLogger.configuration

        info "Processing by #{payload[:controller]}##{payload[:action]} as #{format}"

        if config.white_list.fetch(payload[:controller], []).include?(payload[:action])
          formatter = Rouge::Formatters::Terminal256.new(config.theme)
          query_lexer = Rouge::Lexers::GraphQL.new
          variables_lexer = Rouge::Lexers::Ruby.new

          (params['_json'] || [params.slice('query', 'variables')]).each do |data|

            next if config.skip_introspection_query && data['query'].index(/query IntrospectionQuery/)

            query = data['query'].lines.map { |line| "  #{line}" }.join.chomp # add indentation
            variables = PP.pp(data['variables'] || {}, '')
            info "  Variables: #{formatter.format(variables_lexer.lex(variables))}"
            info formatter.format(query_lexer.lex(query))
          end
        else
          info "  Parameters: #{params.inspect}" unless params.empty?
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
graphql-rails_logger-1.2.1 lib/graphql/rails_logger/subscriber.rb
graphql-rails_logger-1.2.0 lib/graphql/rails_logger/subscriber.rb