Module: ElasticGraph::SchemaDefinition::Mixins::HasDerivedGraphQLTypeCustomizations

Included in:
SchemaElements::EnumType, SchemaElements::ScalarType, SchemaElements::TypeWithSubfields, SchemaElements::UnionType
Defined in:
elasticgraph-schema_definition/lib/elastic_graph/schema_definition/mixins/has_derived_graphql_type_customizations.rb

Overview

Mixin that supports the customization of derived GraphQL types.

For each type you define, ElasticGraph generates a number of derived GraphQL types that are needed to facilitate the ElasticGraph Query API. Methods in this module can be used to customize those derived GraphQL types.

Instance Method Summary collapse

Instance Method Details

#customize_derived_type_fields(type_name, *field_names, &customization_block) ⇒ void

This method returns an undefined value.

Registers a customization block for the named fields on the named derived GraphQL type. The provided block will get run on the named fields of the named derived GraphQL type, allowing them to be customized.

Examples:

Customize named fields of a derived GraphQL type

ElasticGraph.define_schema do |schema|
  schema.object_type "Campaign" do |t|
    t.field "id", "ID!"
    t.index "campaigns"

    t.customize_derived_type_fields "CampaignConnection", "pageInfo", "totalEdgeCount" do |dt|
      # Add a `@deprecated` directive to `CampaignConnection.pageInfo` and `CampaignConnection.totalEdgeCount`.
      dt.directive "deprecated"
    end
  end
end

Parameters:

  • type_name (String)

    name of the derived type containing fields you want to customize

  • field_names (Array<String>)

    names of the fields on the derived types that you wish to customize



77
78
79
80
81
82
83
# File 'elasticgraph-schema_definition/lib/elastic_graph/schema_definition/mixins/has_derived_graphql_type_customizations.rb', line 77

def customize_derived_type_fields(type_name, *field_names, &customization_block)
  customizations_by_field = derived_field_customizations_by_type_and_field_name[type_name]

  field_names.each do |field_name|
    customizations_by_field[field_name] << customization_block
  end
end

#customize_derived_types(*type_names, &customization_block) ⇒ void

This method returns an undefined value.

Registers a customization block for the named derived graphql types. The provided block will get run on the named derived GraphQL types, allowing them to be customized.

Examples:

Customize named derived GraphQL types

ElasticGraph.define_schema do |schema|
  schema.object_type "Campaign" do |t|
    t.field "id", "ID!"
    t.index "campaigns"

    t.customize_derived_types "CampaignFilterInput", "CampaignSortOrderInput" do |dt|
      # Add a `@deprecated` directive to two specific derived types.
      dt.directive "deprecated"
    end
  end
end

Customize all derived GraphQL types

ElasticGraph.define_schema do |schema|
  schema.object_type "Campaign" do |t|
    t.field "id", "ID!"
    t.index "campaigns"

    t.customize_derived_types :all do |dt|
      # Add a `@deprecated` directive to all derived types.
      dt.directive "deprecated"
    end
  end
end

Parameters:

  • type_names (Array<String, :all>)

    names of the derived types to customize, or :all to customize all derived types



48
49
50
51
52
53
54
55
56
# File 'elasticgraph-schema_definition/lib/elastic_graph/schema_definition/mixins/has_derived_graphql_type_customizations.rb', line 48

def customize_derived_types(*type_names, &customization_block)
  if type_names.include?(:all)
    derived_type_customizations_for_all_types << customization_block
  else
    type_names.each do |t|
      derived_type_customizations_by_name[t.to_s] << customization_block
    end
  end
end