Sha256: 566493fa05cfd6b0b4d8dba40287bd1b88af437eb400947558546aec10ea4da7

Contents?: true

Size: 1.29 KB

Versions: 14

Compression:

Stored size: 1.29 KB

Contents

# frozen_string_literal: true
module GraphQL
  class Schema
    # A two-level map with fields as the last values.
    # The first level is type names, which point to a second map.
    # The second level is field names, which point to fields.
    #
    # The catch is, the fields in this map _may_ have been modified by being instrumented.
    class InstrumentedFieldMap
      # Build a map using types from `schema` and instrumenters in `field_instrumenters`
      # @param schema [GraphQL::Schema]
      # @param field_instrumenters [Array<#instrument(type, field)>]
      def initialize(schema, field_instrumenters)
        @storage = Hash.new { |h, k| h[k] = {} }
        schema.types.each do |type_name, type|
          if type.kind.fields?
            type.all_fields.each do |field_defn|
              instrumented_field_defn = field_instrumenters.reduce(field_defn) do |defn, inst|
                inst.instrument(type, defn)
              end
              self.set(type.name, field_defn.name, instrumented_field_defn)
            end
          end
        end
      end

      def set(type_name, field_name, field)
        @storage[type_name][field_name] = field
      end

      def get(type_name, field_name)
        type = @storage[type_name]
        type && type[field_name]
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
graphql-1.5.7.1 lib/graphql/schema/instrumented_field_map.rb
graphql-1.5.8 lib/graphql/schema/instrumented_field_map.rb
graphql-1.5.7 lib/graphql/schema/instrumented_field_map.rb
graphql-1.5.6 lib/graphql/schema/instrumented_field_map.rb
graphql-1.5.5 lib/graphql/schema/instrumented_field_map.rb
graphql-1.5.4 lib/graphql/schema/instrumented_field_map.rb
graphql-1.5.3 lib/graphql/schema/instrumented_field_map.rb
graphql-1.4.5 lib/graphql/schema/instrumented_field_map.rb
graphql-1.4.4 lib/graphql/schema/instrumented_field_map.rb
graphql-1.4.3 lib/graphql/schema/instrumented_field_map.rb
graphql-1.4.2 lib/graphql/schema/instrumented_field_map.rb
graphql-1.4.1 lib/graphql/schema/instrumented_field_map.rb
graphql-1.4.0 lib/graphql/schema/instrumented_field_map.rb
graphql-1.3.0 lib/graphql/schema/instrumented_field_map.rb