elasticgraph-schema_definition 0.18.0.4 → 0.19.0.0.rc1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/elasticgraph-schema_definition.gemspec +1 -1
- data/lib/elastic_graph/schema_definition/api.rb +4 -4
- data/lib/elastic_graph/schema_definition/factory.rb +11 -14
- data/lib/elastic_graph/schema_definition/indexing/derived_indexed_type.rb +2 -2
- data/lib/elastic_graph/schema_definition/indexing/field_type/object.rb +2 -2
- data/lib/elastic_graph/schema_definition/indexing/index.rb +5 -5
- data/lib/elastic_graph/schema_definition/mixins/has_subtypes.rb +3 -3
- data/lib/elastic_graph/schema_definition/mixins/has_type_info.rb +2 -2
- data/lib/elastic_graph/schema_definition/mixins/implements_interfaces.rb +2 -2
- data/lib/elastic_graph/schema_definition/mixins/verifies_graphql_name.rb +2 -2
- data/lib/elastic_graph/schema_definition/results.rb +10 -10
- data/lib/elastic_graph/schema_definition/schema_elements/built_in_types.rb +36 -53
- data/lib/elastic_graph/schema_definition/schema_elements/enum_type.rb +3 -3
- data/lib/elastic_graph/schema_definition/schema_elements/enum_value_namer.rb +2 -2
- data/lib/elastic_graph/schema_definition/schema_elements/field.rb +33 -14
- data/lib/elastic_graph/schema_definition/schema_elements/object_type.rb +1 -1
- data/lib/elastic_graph/schema_definition/schema_elements/relationship.rb +2 -2
- data/lib/elastic_graph/schema_definition/schema_elements/scalar_type.rb +9 -9
- data/lib/elastic_graph/schema_definition/schema_elements/type_namer.rb +7 -7
- data/lib/elastic_graph/schema_definition/schema_elements/type_reference.rb +4 -4
- data/lib/elastic_graph/schema_definition/schema_elements/type_with_subfields.rb +3 -4
- data/lib/elastic_graph/schema_definition/schema_elements/union_type.rb +3 -3
- data/lib/elastic_graph/schema_definition/scripting/file_system_repository.rb +5 -5
- data/lib/elastic_graph/schema_definition/state.rb +4 -4
- data/lib/elastic_graph/schema_definition/test_support.rb +2 -2
- metadata +38 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b41786d54c947a50ab0b4cba23f68d2a70c4a49341b12e0733acc5a79bbe1e8
|
4
|
+
data.tar.gz: 1b4315922c6310b88773120c22a94bb2de7ae16087d2f1e6bd14efa3b2da3529
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00d281410236882efb20f17a8293b372b682803da9603693b4eb6a8a6c11f0b6790d887f65ae977c7355ee26dfbc32769ae7151c01ad0a66dd879aa8f5fea5de
|
7
|
+
data.tar.gz: d00c0bbc950752e1b05cc122febd33db82368795b4af81c22ee71efcb5e5deaf4f3c9105dad5bfd469df051d074a22c0815c898ff9e3a267345889dc97552f2a
|
@@ -16,7 +16,7 @@ ElasticGraphGemspecHelper.define_elasticgraph_gem(gemspec_file: __FILE__, catego
|
|
16
16
|
spec.add_dependency "elasticgraph-json_schema", eg_version
|
17
17
|
spec.add_dependency "elasticgraph-schema_artifacts", eg_version
|
18
18
|
spec.add_dependency "elasticgraph-support", eg_version
|
19
|
-
spec.add_dependency "graphql", "~> 2.
|
19
|
+
spec.add_dependency "graphql", "~> 2.4.5"
|
20
20
|
spec.add_dependency "rake", "~> 13.2"
|
21
21
|
|
22
22
|
spec.add_development_dependency "elasticgraph-admin", eg_version
|
@@ -6,7 +6,7 @@
|
|
6
6
|
#
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
|
-
require "elastic_graph/
|
9
|
+
require "elastic_graph/errors"
|
10
10
|
require "elastic_graph/schema_artifacts/runtime_metadata/extension"
|
11
11
|
require "elastic_graph/schema_definition/mixins/has_readable_to_s_and_inspect"
|
12
12
|
require "elastic_graph/schema_definition/results"
|
@@ -26,7 +26,7 @@ module ElasticGraph
|
|
26
26
|
if (api_instance = ::Thread.current[:ElasticGraph_SchemaDefinition_API_instance])
|
27
27
|
yield api_instance
|
28
28
|
else
|
29
|
-
raise SchemaError, "No active `SchemaDefinition::API` instance is available. " \
|
29
|
+
raise Errors::SchemaError, "No active `SchemaDefinition::API` instance is available. " \
|
30
30
|
"Let ElasticGraph load the schema definition files."
|
31
31
|
end
|
32
32
|
end
|
@@ -314,11 +314,11 @@ module ElasticGraph
|
|
314
314
|
# end
|
315
315
|
def json_schema_version(version)
|
316
316
|
if !version.is_a?(Integer) || version < 1
|
317
|
-
raise SchemaError, "`json_schema_version` must be a positive integer. Specified version: #{version}"
|
317
|
+
raise Errors::SchemaError, "`json_schema_version` must be a positive integer. Specified version: #{version}"
|
318
318
|
end
|
319
319
|
|
320
320
|
if @state.json_schema_version
|
321
|
-
raise SchemaError, "`json_schema_version` can only be set once on a schema. Previously-set version: #{@state.json_schema_version}"
|
321
|
+
raise Errors::SchemaError, "`json_schema_version` can only be set once on a schema. Previously-set version: #{@state.json_schema_version}"
|
322
322
|
end
|
323
323
|
|
324
324
|
@state.json_schema_version = version
|
@@ -141,7 +141,7 @@ module ElasticGraph
|
|
141
141
|
t.documentation <<~EOS
|
142
142
|
Input type used to specify filters on `#{source_type}` fields.
|
143
143
|
|
144
|
-
Will
|
144
|
+
Will match all documents if passed as an empty object (or as `null`).
|
145
145
|
EOS
|
146
146
|
|
147
147
|
t.field @state.schema_elements.any_of, "[#{t.name}!]" do |f|
|
@@ -149,17 +149,17 @@ module ElasticGraph
|
|
149
149
|
Matches records where any of the provided sub-filters evaluate to true.
|
150
150
|
This works just like an OR operator in SQL.
|
151
151
|
|
152
|
-
|
153
|
-
part of the filter
|
152
|
+
When `null` is passed, matches all documents.
|
153
|
+
When an empty list is passed, this part of the filter matches no documents.
|
154
154
|
EOS
|
155
155
|
end
|
156
156
|
|
157
157
|
t.field @state.schema_elements.not, t.name do |f|
|
158
158
|
f.documentation <<~EOS
|
159
|
-
Matches records where the provided sub-filter
|
159
|
+
Matches records where the provided sub-filter evaluates to false.
|
160
160
|
This works just like a NOT operator in SQL.
|
161
161
|
|
162
|
-
|
162
|
+
When `null` or an empty object is passed, matches no documents.
|
163
163
|
EOS
|
164
164
|
end
|
165
165
|
|
@@ -285,10 +285,7 @@ module ElasticGraph
|
|
285
285
|
it usually differs from the true distinct value count by less than 7%.
|
286
286
|
EOS
|
287
287
|
|
288
|
-
f.
|
289
|
-
empty_bucket_value: 0,
|
290
|
-
function: :cardinality
|
291
|
-
)
|
288
|
+
f.runtime_metadata_computation_detail empty_bucket_value: 0, function: :cardinality
|
292
289
|
end
|
293
290
|
|
294
291
|
yield type
|
@@ -306,7 +303,7 @@ module ElasticGraph
|
|
306
303
|
f.documentation <<~EOS
|
307
304
|
Matches records where any of the list elements match the provided sub-filter.
|
308
305
|
|
309
|
-
|
306
|
+
When `null` or an empty object is passed, matches all documents.
|
310
307
|
EOS
|
311
308
|
end
|
312
309
|
|
@@ -318,7 +315,7 @@ module ElasticGraph
|
|
318
315
|
be provided on a single `#{t.name}` input because of collisions between key names. For example, if you want to provide
|
319
316
|
multiple `#{any_satisfy}: ...` filters, you could do `#{all_of}: [{#{any_satisfy}: ...}, {#{any_satisfy}: ...}]`.
|
320
317
|
|
321
|
-
|
318
|
+
When `null` or an empty list is passed, matches all documents.
|
322
319
|
EOS
|
323
320
|
end
|
324
321
|
|
@@ -333,7 +330,7 @@ module ElasticGraph
|
|
333
330
|
t.documentation <<~EOS
|
334
331
|
Input type used to specify filters on elements of a `[#{source_type}]` field.
|
335
332
|
|
336
|
-
Will
|
333
|
+
Will match all documents if passed as an empty object (or as `null`).
|
337
334
|
EOS
|
338
335
|
|
339
336
|
# While we support `not: {any_satisfy: ...}` we do not support `any_satisfy: {not ...}` at this time.
|
@@ -377,7 +374,7 @@ module ElasticGraph
|
|
377
374
|
or transitively from a list field that has been configured to index each leaf field as
|
378
375
|
its own flattened list of values.
|
379
376
|
|
380
|
-
Will
|
377
|
+
Will match all documents if passed as an empty object (or as `null`).
|
381
378
|
EOS
|
382
379
|
|
383
380
|
source_type.graphql_fields_by_name.each do |field_name, field|
|
@@ -427,7 +424,7 @@ module ElasticGraph
|
|
427
424
|
f.documentation <<~EOS
|
428
425
|
Used to filter on the number of non-null elements in this list field.
|
429
426
|
|
430
|
-
|
427
|
+
When `null` or an empty object is passed, matches all documents.
|
431
428
|
EOS
|
432
429
|
end
|
433
430
|
end
|
@@ -173,7 +173,7 @@ module ElasticGraph
|
|
173
173
|
# end
|
174
174
|
def immutable_value(field_name, from:, nullable: true, can_change_from_null: false)
|
175
175
|
if !nullable && can_change_from_null
|
176
|
-
raise SchemaError, "`can_change_from_null: true` is not allowed with `nullable: false` (as there would be no `null` values to change from)."
|
176
|
+
raise Errors::SchemaError, "`can_change_from_null: true` is not allowed with `nullable: false` (as there would be no `null` values to change from)."
|
177
177
|
end
|
178
178
|
|
179
179
|
fields << DerivedFields::ImmutableValue.new(
|
@@ -280,7 +280,7 @@ module ElasticGraph
|
|
280
280
|
|
281
281
|
def generate_script
|
282
282
|
if fields.empty?
|
283
|
-
raise SchemaError, "`derive_indexed_type_fields` definition for #{destination_type_ref} (from #{source_type.name}) " \
|
283
|
+
raise Errors::SchemaError, "`derive_indexed_type_fields` definition for #{destination_type_ref} (from #{source_type.name}) " \
|
284
284
|
"has no derived field definitions."
|
285
285
|
end
|
286
286
|
|
@@ -6,7 +6,7 @@
|
|
6
6
|
#
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
|
-
require "elastic_graph/
|
9
|
+
require "elastic_graph/errors"
|
10
10
|
require "elastic_graph/support/hash_util"
|
11
11
|
require "elastic_graph/support/memoizable_data"
|
12
12
|
|
@@ -101,7 +101,7 @@ module ElasticGraph
|
|
101
101
|
return if problem_fields.empty?
|
102
102
|
|
103
103
|
field_descriptions = problem_fields.map(&:name).sort.map { |f| "`#{f}`" }.join(", ")
|
104
|
-
raise SchemaError,
|
104
|
+
raise Errors::SchemaError,
|
105
105
|
"`#{type_name}` has #{problem_fields.size} field(s) (#{field_descriptions}) that are `sourced_from` " \
|
106
106
|
"another type and also have JSON schema customizations. Instead, put the JSON schema " \
|
107
107
|
"customizations on the source type's field definitions."
|
@@ -47,7 +47,7 @@ module ElasticGraph
|
|
47
47
|
# @api private
|
48
48
|
def initialize(name, settings, schema_def_state, indexed_type)
|
49
49
|
if name.include?(ROLLOVER_INDEX_INFIX_MARKER)
|
50
|
-
raise SchemaError, "`#{name}` is an invalid index definition name since it contains " \
|
50
|
+
raise Errors::SchemaError, "`#{name}` is an invalid index definition name since it contains " \
|
51
51
|
"`#{ROLLOVER_INDEX_INFIX_MARKER}` which ElasticGraph treats as special."
|
52
52
|
end
|
53
53
|
|
@@ -124,11 +124,11 @@ module ElasticGraph
|
|
124
124
|
|
125
125
|
unless date_and_datetime_types.include?(timestamp_field_path.type.fully_unwrapped.name)
|
126
126
|
date_or_datetime_description = date_and_datetime_types.map { |t| "`#{t}`" }.join(" or ")
|
127
|
-
raise SchemaError, "rollover field `#{timestamp_field_path.full_description}` cannot be used for rollover since it is not a #{date_or_datetime_description} field."
|
127
|
+
raise Errors::SchemaError, "rollover field `#{timestamp_field_path.full_description}` cannot be used for rollover since it is not a #{date_or_datetime_description} field."
|
128
128
|
end
|
129
129
|
|
130
130
|
if timestamp_field_path.type.list?
|
131
|
-
raise SchemaError, "rollover field `#{timestamp_field_path.full_description}` cannot be used for rollover since it is a list field."
|
131
|
+
raise Errors::SchemaError, "rollover field `#{timestamp_field_path.full_description}` cannot be used for rollover since it is a list field."
|
132
132
|
end
|
133
133
|
|
134
134
|
timestamp_field_path.path_parts.each { |f| f.json_schema nullable: false }
|
@@ -172,7 +172,7 @@ module ElasticGraph
|
|
172
172
|
routing_field_path = public_field_path(routing_field_path_name, explanation: "it is referenced as an index `route_with` field")
|
173
173
|
|
174
174
|
unless routing_field_path.type.leaf?
|
175
|
-
raise SchemaError, "shard routing field `#{routing_field_path.full_description}` cannot be used for routing since it is not a leaf field."
|
175
|
+
raise Errors::SchemaError, "shard routing field `#{routing_field_path.full_description}` cannot be used for routing since it is not a leaf field."
|
176
176
|
end
|
177
177
|
|
178
178
|
self.routing_field_path = routing_field_path
|
@@ -304,7 +304,7 @@ module ElasticGraph
|
|
304
304
|
error_msg += " Note: the `#{indexed_type.name}.#{path_parts.first}` definition must come before the `index` call."
|
305
305
|
end
|
306
306
|
|
307
|
-
raise SchemaError, error_msg
|
307
|
+
raise Errors::SchemaError, error_msg
|
308
308
|
end
|
309
309
|
|
310
310
|
def date_and_datetime_types
|
@@ -6,7 +6,7 @@
|
|
6
6
|
#
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
|
-
require "elastic_graph/
|
9
|
+
require "elastic_graph/errors"
|
10
10
|
require "elastic_graph/schema_definition/indexing/field_type/union"
|
11
11
|
require "elastic_graph/schema_definition/schema_elements/list_counts_state"
|
12
12
|
|
@@ -79,7 +79,7 @@ module ElasticGraph
|
|
79
79
|
defs << "on #{st.name}:\n#{field.to_sdl.strip} mapping: #{field.resolve_mapping.inspect}" if st.graphql_fields_by_name.key?(field_name)
|
80
80
|
end
|
81
81
|
|
82
|
-
raise SchemaError,
|
82
|
+
raise Errors::SchemaError,
|
83
83
|
"Conflicting definitions for field `#{field_name}` on the subtypes of `#{name}`. " \
|
84
84
|
"Their definitions must agree. Defs:\n\n#{def_strings.join("\n\n")}"
|
85
85
|
end
|
@@ -102,7 +102,7 @@ module ElasticGraph
|
|
102
102
|
"#{name}: indexed? = #{value}"
|
103
103
|
end
|
104
104
|
|
105
|
-
raise SchemaError,
|
105
|
+
raise Errors::SchemaError,
|
106
106
|
"The #{self.class.name} #{name} has some indexed subtypes, and some non-indexed subtypes. " \
|
107
107
|
"All subtypes must be indexed or all must NOT be indexed. Subtypes:\n" \
|
108
108
|
"#{descriptions.join("\n")}"
|
@@ -103,7 +103,7 @@ module ElasticGraph
|
|
103
103
|
param_diff = (options.keys.to_set - CUSTOMIZABLE_DATASTORE_PARAMS).to_a
|
104
104
|
|
105
105
|
unless param_diff.empty?
|
106
|
-
raise SchemaError, "Some configured mapping overrides are unsupported: #{param_diff.inspect}"
|
106
|
+
raise Errors::SchemaError, "Some configured mapping overrides are unsupported: #{param_diff.inspect}"
|
107
107
|
end
|
108
108
|
|
109
109
|
mapping_options.update(options)
|
@@ -170,7 +170,7 @@ module ElasticGraph
|
|
170
170
|
validatable_json_schema = Support::HashUtil.stringify_keys(options)
|
171
171
|
|
172
172
|
if (error_msg = JSONSchema.strict_meta_schema_validator.validate_with_error_message(validatable_json_schema))
|
173
|
-
raise SchemaError, "Invalid JSON schema options set on #{self}:\n\n#{error_msg}"
|
173
|
+
raise Errors::SchemaError, "Invalid JSON schema options set on #{self}:\n\n#{error_msg}"
|
174
174
|
end
|
175
175
|
|
176
176
|
json_schema_options.update(options)
|
@@ -6,7 +6,7 @@
|
|
6
6
|
#
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
|
-
require "elastic_graph/
|
9
|
+
require "elastic_graph/errors"
|
10
10
|
|
11
11
|
module ElasticGraph
|
12
12
|
module SchemaDefinition
|
@@ -99,7 +99,7 @@ module ElasticGraph
|
|
99
99
|
end
|
100
100
|
|
101
101
|
unless schema_error_messages.empty?
|
102
|
-
raise SchemaError, schema_error_messages.join("\n\n")
|
102
|
+
raise Errors::SchemaError, schema_error_messages.join("\n\n")
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
@@ -27,10 +27,10 @@ module ElasticGraph
|
|
27
27
|
#
|
28
28
|
# @param name [String] name of GraphQL schema element
|
29
29
|
# @return [void]
|
30
|
-
# @raise [InvalidGraphQLNameError] if the name is invalid
|
30
|
+
# @raise [Errors::InvalidGraphQLNameError] if the name is invalid
|
31
31
|
def self.verify_name!(name)
|
32
32
|
return if GRAPHQL_NAME_PATTERN.match?(name)
|
33
|
-
raise InvalidGraphQLNameError, "Not a valid GraphQL name: `#{name}`. #{GRAPHQL_NAME_VALIDITY_DESCRIPTION}"
|
33
|
+
raise Errors::InvalidGraphQLNameError, "Not a valid GraphQL name: `#{name}`. #{GRAPHQL_NAME_VALIDITY_DESCRIPTION}"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -7,7 +7,7 @@
|
|
7
7
|
# frozen_string_literal: true
|
8
8
|
|
9
9
|
require "elastic_graph/constants"
|
10
|
-
require "elastic_graph/
|
10
|
+
require "elastic_graph/errors"
|
11
11
|
require "elastic_graph/schema_artifacts/runtime_metadata/schema"
|
12
12
|
require "elastic_graph/schema_artifacts/artifacts_helper_methods"
|
13
13
|
require "elastic_graph/schema_definition/indexing/event_envelope"
|
@@ -47,10 +47,10 @@ module ElasticGraph
|
|
47
47
|
|
48
48
|
# @param version [Integer] desired JSON schema version
|
49
49
|
# @return [Hash<String, Object>] the JSON schema for the requested version, if available
|
50
|
-
# @raise [NotFoundError] if the requested JSON schema version is not available
|
50
|
+
# @raise [Errors::NotFoundError] if the requested JSON schema version is not available
|
51
51
|
def json_schemas_for(version)
|
52
52
|
unless available_json_schema_versions.include?(version)
|
53
|
-
raise NotFoundError, "The requested json schema version (#{version}) is not available. Available versions: #{available_json_schema_versions.to_a.join(", ")}."
|
53
|
+
raise Errors::NotFoundError, "The requested json schema version (#{version}) is not available. Available versions: #{available_json_schema_versions.to_a.join(", ")}."
|
54
54
|
end
|
55
55
|
|
56
56
|
@latest_versioned_json_schema ||= merge_field_metadata_into_json_schema(current_public_json_schema).json_schema
|
@@ -241,7 +241,7 @@ module ElasticGraph
|
|
241
241
|
end
|
242
242
|
|
243
243
|
unless full_errors.empty?
|
244
|
-
raise SchemaError, full_errors.join("\n\n")
|
244
|
+
raise Errors::SchemaError, full_errors.join("\n\n")
|
245
245
|
end
|
246
246
|
end
|
247
247
|
end
|
@@ -263,7 +263,7 @@ module ElasticGraph
|
|
263
263
|
def build_public_json_schema
|
264
264
|
json_schema_version = state.json_schema_version
|
265
265
|
if json_schema_version.nil?
|
266
|
-
raise SchemaError, "`json_schema_version` must be specified in the schema. To resolve, add `schema.json_schema_version 1` in a schema definition block."
|
266
|
+
raise Errors::SchemaError, "`json_schema_version` must be specified in the schema. To resolve, add `schema.json_schema_version 1` in a schema definition block."
|
267
267
|
end
|
268
268
|
|
269
269
|
indexed_type_names = state.object_types_by_name.values
|
@@ -319,7 +319,7 @@ module ElasticGraph
|
|
319
319
|
"- The set of #{set.to_a} forms a circular reference chain."
|
320
320
|
end
|
321
321
|
|
322
|
-
raise SchemaError, "Your schema has self-referential types, which are not allowed, since " \
|
322
|
+
raise Errors::SchemaError, "Your schema has self-referential types, which are not allowed, since " \
|
323
323
|
"it prevents the datastore mapping and GraphQL schema generation from terminating:\n" \
|
324
324
|
"#{descriptions.join("\n")}"
|
325
325
|
end
|
@@ -362,13 +362,13 @@ module ElasticGraph
|
|
362
362
|
end
|
363
363
|
|
364
364
|
unless (unknown_type_names = registered_type.derived_type_customizations_by_name.keys - types.map(&:name)).empty?
|
365
|
-
raise SchemaError,
|
365
|
+
raise Errors::SchemaError,
|
366
366
|
"`customize_derived_types` was called on `#{registered_type.name}` with some unrecognized type names " \
|
367
367
|
"(#{unknown_type_names.join(", ")}). Maybe some of the derived GraphQL types are misspelled?"
|
368
368
|
end
|
369
369
|
|
370
370
|
unless (unknown_type_names = registered_type.derived_field_customizations_by_type_and_field_name.keys - types.map(&:name)).empty?
|
371
|
-
raise SchemaError,
|
371
|
+
raise Errors::SchemaError,
|
372
372
|
"`customize_derived_type_fields` was called on `#{registered_type.name}` with some unrecognized type names " \
|
373
373
|
"(#{unknown_type_names.join(", ")}). Maybe some of the derived GraphQL types are misspelled?"
|
374
374
|
end
|
@@ -378,7 +378,7 @@ module ElasticGraph
|
|
378
378
|
field_customizations_by_name = registered_type.derived_field_customizations_by_name_for_type(type)
|
379
379
|
|
380
380
|
if field_customizations_by_name.any? && !type.respond_to?(:graphql_fields_by_name)
|
381
|
-
raise SchemaError,
|
381
|
+
raise Errors::SchemaError,
|
382
382
|
"`customize_derived_type_fields` was called on `#{registered_type.name}` with a type that can " \
|
383
383
|
"never have fields: `#{type.name}`."
|
384
384
|
end
|
@@ -394,7 +394,7 @@ module ElasticGraph
|
|
394
394
|
end
|
395
395
|
|
396
396
|
unless unknown_field_names.empty?
|
397
|
-
raise SchemaError,
|
397
|
+
raise Errors::SchemaError,
|
398
398
|
"`customize_derived_type_fields` was called on `#{registered_type.name}` with some unrecognized field names " \
|
399
399
|
"(#{unknown_field_names.join(", ")}). Maybe one of the field names was misspelled?"
|
400
400
|
end
|
@@ -216,7 +216,7 @@ module ElasticGraph
|
|
216
216
|
f.documentation <<~EOS
|
217
217
|
Matches records where the field value matches the provided value using full text search.
|
218
218
|
|
219
|
-
|
219
|
+
When `null` is passed, matches all documents.
|
220
220
|
EOS
|
221
221
|
|
222
222
|
f.directive "deprecated", reason: "Use `#{names.matches_query}` instead."
|
@@ -228,7 +228,7 @@ module ElasticGraph
|
|
228
228
|
This is more lenient than `#{names.matches_phrase}`: the order of terms is ignored, and,
|
229
229
|
by default, only one search term is required to be in the field value.
|
230
230
|
|
231
|
-
|
231
|
+
When `null` is passed, matches all documents.
|
232
232
|
EOS
|
233
233
|
end
|
234
234
|
|
@@ -238,7 +238,7 @@ module ElasticGraph
|
|
238
238
|
full text search. This is stricter than `#{names.matches_query}`: all terms must match
|
239
239
|
and be in the same order as the provided phrase.
|
240
240
|
|
241
|
-
|
241
|
+
When `null` is passed, matches all documents.
|
242
242
|
EOS
|
243
243
|
end
|
244
244
|
end.each do |input_type|
|
@@ -246,7 +246,7 @@ module ElasticGraph
|
|
246
246
|
input_type.documentation <<~EOS
|
247
247
|
Input type used to specify filters on `#{field_type}` fields that have been indexed for full text search.
|
248
248
|
|
249
|
-
Will
|
249
|
+
Will match all documents if passed as an empty object (or as `null`).
|
250
250
|
EOS
|
251
251
|
|
252
252
|
register_input_type(input_type)
|
@@ -256,7 +256,7 @@ module ElasticGraph
|
|
256
256
|
t.documentation <<~EOS
|
257
257
|
Input type used to specify parameters for the `#{names.matches_query}` filtering operator.
|
258
258
|
|
259
|
-
|
259
|
+
When `null` is passed, matches all documents.
|
260
260
|
EOS
|
261
261
|
|
262
262
|
t.field names.query, "String!" do |f|
|
@@ -280,18 +280,30 @@ module ElasticGraph
|
|
280
280
|
|
281
281
|
f.default false
|
282
282
|
end
|
283
|
+
|
284
|
+
# any_of/not don't really make sense on this filter because it doesn't make sense to
|
285
|
+
# apply an OR operator or negation to the fields of this type since they are all an
|
286
|
+
# indivisible part of a single filter operation on a specific field. So we remove them
|
287
|
+
# here.
|
288
|
+
remove_any_of_and_not_filter_operators_on(t)
|
283
289
|
end
|
284
290
|
|
285
291
|
register_filter "MatchesPhrase" do |t|
|
286
292
|
t.documentation <<~EOS
|
287
293
|
Input type used to specify parameters for the `#{names.matches_phrase}` filtering operator.
|
288
294
|
|
289
|
-
|
295
|
+
When `null` is passed, matches all documents.
|
290
296
|
EOS
|
291
297
|
|
292
298
|
t.field names.phrase, "String!" do |f|
|
293
299
|
f.documentation "The input phrase to search for."
|
294
300
|
end
|
301
|
+
|
302
|
+
# any_of/not don't really make sense on this filter because it doesn't make sense to
|
303
|
+
# apply an OR operator or negation to the fields of this type since they are all an
|
304
|
+
# indivisible part of a single filter operation on a specific field. So we remove them
|
305
|
+
# here.
|
306
|
+
remove_any_of_and_not_filter_operators_on(t)
|
295
307
|
end
|
296
308
|
|
297
309
|
# This is defined as a built-in ElasticGraph type so that we can leverage Elasticsearch/OpenSearch GeoLocation features
|
@@ -329,7 +341,7 @@ module ElasticGraph
|
|
329
341
|
Matches records where the field's geographic location is within a specified distance from the
|
330
342
|
location identified by `#{names.latitude}` and `#{names.longitude}`.
|
331
343
|
|
332
|
-
|
344
|
+
When `null` or an empty object is passed, matches all documents.
|
333
345
|
EOS
|
334
346
|
end
|
335
347
|
end.each { |input_filter| register_input_type(input_filter) }
|
@@ -551,10 +563,7 @@ module ElasticGraph
|
|
551
563
|
t.customize_aggregated_values_type do |avt|
|
552
564
|
# not nullable, since sum(empty_set) == 0
|
553
565
|
avt.field names.approximate_sum, "Float!", graphql_only: true do |f|
|
554
|
-
f.
|
555
|
-
empty_bucket_value: 0,
|
556
|
-
function: :sum
|
557
|
-
)
|
566
|
+
f.runtime_metadata_computation_detail empty_bucket_value: 0, function: :sum
|
558
567
|
|
559
568
|
f.documentation <<~EOS
|
560
569
|
The sum of the field values within this grouping.
|
@@ -574,10 +583,7 @@ module ElasticGraph
|
|
574
583
|
end
|
575
584
|
|
576
585
|
avt.field names.approximate_avg, "Float", graphql_only: true do |f|
|
577
|
-
f.
|
578
|
-
empty_bucket_value: nil,
|
579
|
-
function: :avg
|
580
|
-
)
|
586
|
+
f.runtime_metadata_computation_detail empty_bucket_value: nil, function: :avg
|
581
587
|
|
582
588
|
f.documentation <<~EOS
|
583
589
|
The average (mean) of the field values within this grouping.
|
@@ -666,7 +672,11 @@ module ElasticGraph
|
|
666
672
|
t.type_ref.as_list_element_filter_input.to_final_form(as_input: true).name
|
667
673
|
) do |ft|
|
668
674
|
ft.field names.time_of_day, date_time_time_of_day_ref.as_filter_input.name do |f|
|
669
|
-
f.documentation
|
675
|
+
f.documentation <<~EOS
|
676
|
+
Matches records based on the time-of-day of the `DateTime` values.
|
677
|
+
|
678
|
+
When `null` is passed, matches all documents.
|
679
|
+
EOS
|
670
680
|
end
|
671
681
|
end
|
672
682
|
|
@@ -683,7 +693,7 @@ module ElasticGraph
|
|
683
693
|
t.documentation <<~EOS
|
684
694
|
Input type used to specify filters on the time-of-day of `DateTime` fields.
|
685
695
|
|
686
|
-
Will
|
696
|
+
Will match all documents if passed as an empty object (or as `null`).
|
687
697
|
EOS
|
688
698
|
|
689
699
|
fixup_doc = ->(doc_string) do
|
@@ -855,10 +865,7 @@ module ElasticGraph
|
|
855
865
|
t.customize_aggregated_values_type do |avt|
|
856
866
|
# not nullable, since sum(empty_set) == 0
|
857
867
|
avt.field names.approximate_sum, "Float!", graphql_only: true do |f|
|
858
|
-
f.
|
859
|
-
empty_bucket_value: 0,
|
860
|
-
function: :sum
|
861
|
-
)
|
868
|
+
f.runtime_metadata_computation_detail empty_bucket_value: 0, function: :sum
|
862
869
|
|
863
870
|
f.documentation <<~EOS
|
864
871
|
The (approximate) sum of the field values within this grouping.
|
@@ -870,10 +877,7 @@ module ElasticGraph
|
|
870
877
|
end
|
871
878
|
|
872
879
|
avt.field names.exact_sum, "JsonSafeLong", graphql_only: true do |f|
|
873
|
-
f.
|
874
|
-
empty_bucket_value: 0,
|
875
|
-
function: :sum
|
876
|
-
)
|
880
|
+
f.runtime_metadata_computation_detail empty_bucket_value: 0, function: :sum
|
877
881
|
|
878
882
|
f.documentation <<~EOS
|
879
883
|
The exact sum of the field values within this grouping, if it fits in a `JsonSafeLong`.
|
@@ -902,10 +906,7 @@ module ElasticGraph
|
|
902
906
|
names.exact_max => [:max, "maximum", names.approximate_max, "largest"]
|
903
907
|
}.each do |exact_name, (func, full_name, approx_name, adjective)|
|
904
908
|
avt.field approx_name, "LongString", graphql_only: true do |f|
|
905
|
-
f.
|
906
|
-
empty_bucket_value: nil,
|
907
|
-
function: func
|
908
|
-
)
|
909
|
+
f.runtime_metadata_computation_detail empty_bucket_value: nil, function: func
|
909
910
|
|
910
911
|
f.documentation <<~EOS
|
911
912
|
The #{full_name} of the field values within this grouping.
|
@@ -920,10 +921,7 @@ module ElasticGraph
|
|
920
921
|
end
|
921
922
|
|
922
923
|
avt.field names.approximate_avg, "Float", graphql_only: true do |f|
|
923
|
-
f.
|
924
|
-
empty_bucket_value: nil,
|
925
|
-
function: :avg
|
926
|
-
)
|
924
|
+
f.runtime_metadata_computation_detail empty_bucket_value: nil, function: :avg
|
927
925
|
|
928
926
|
f.documentation <<~EOS
|
929
927
|
The average (mean) of the field values within this grouping.
|
@@ -1424,10 +1422,7 @@ module ElasticGraph
|
|
1424
1422
|
scalar_type.customize_aggregated_values_type do |t|
|
1425
1423
|
# not nullable, since sum(empty_set) == 0
|
1426
1424
|
t.field names.approximate_sum, "Float!", graphql_only: true do |f|
|
1427
|
-
f.
|
1428
|
-
empty_bucket_value: 0,
|
1429
|
-
function: :sum
|
1430
|
-
)
|
1425
|
+
f.runtime_metadata_computation_detail empty_bucket_value: 0, function: :sum
|
1431
1426
|
|
1432
1427
|
f.documentation <<~EOS
|
1433
1428
|
The (approximate) sum of the field values within this grouping.
|
@@ -1439,10 +1434,7 @@ module ElasticGraph
|
|
1439
1434
|
end
|
1440
1435
|
|
1441
1436
|
t.field names.exact_sum, long_type, graphql_only: true do |f|
|
1442
|
-
f.
|
1443
|
-
empty_bucket_value: 0,
|
1444
|
-
function: :sum
|
1445
|
-
)
|
1437
|
+
f.runtime_metadata_computation_detail empty_bucket_value: 0, function: :sum
|
1446
1438
|
|
1447
1439
|
f.documentation <<~EOS
|
1448
1440
|
The exact sum of the field values within this grouping, if it fits in a `#{long_type}`.
|
@@ -1461,10 +1453,7 @@ module ElasticGraph
|
|
1461
1453
|
end
|
1462
1454
|
|
1463
1455
|
t.field names.approximate_avg, "Float", graphql_only: true do |f|
|
1464
|
-
f.
|
1465
|
-
empty_bucket_value: nil,
|
1466
|
-
function: :avg
|
1467
|
-
)
|
1456
|
+
f.runtime_metadata_computation_detail empty_bucket_value: nil, function: :avg
|
1468
1457
|
|
1469
1458
|
f.documentation <<~EOS
|
1470
1459
|
The average (mean) of the field values within this grouping.
|
@@ -1481,10 +1470,7 @@ module ElasticGraph
|
|
1481
1470
|
define_exact_min_and_max_on_aggregated_values(aggregated_values_type, scalar_type, &block)
|
1482
1471
|
|
1483
1472
|
aggregated_values_type.field names.approximate_avg, scalar_type, graphql_only: true do |f|
|
1484
|
-
f.
|
1485
|
-
empty_bucket_value: nil,
|
1486
|
-
function: :avg
|
1487
|
-
)
|
1473
|
+
f.runtime_metadata_computation_detail empty_bucket_value: nil, function: :avg
|
1488
1474
|
|
1489
1475
|
f.documentation <<~EOS
|
1490
1476
|
The average (mean) of the field values within this grouping.
|
@@ -1501,10 +1487,7 @@ module ElasticGraph
|
|
1501
1487
|
discussion = yield(adjective: adjective, full_name: full_name)
|
1502
1488
|
|
1503
1489
|
aggregated_values_type.field name, scalar_type, graphql_only: true do |f|
|
1504
|
-
f.
|
1505
|
-
empty_bucket_value: nil,
|
1506
|
-
function: func
|
1507
|
-
)
|
1490
|
+
f.runtime_metadata_computation_detail empty_bucket_value: nil, function: func
|
1508
1491
|
|
1509
1492
|
f.documentation ["The #{full_name} of the field values within this grouping.", discussion].compact.join("\n\n")
|
1510
1493
|
end
|
@@ -89,11 +89,11 @@ module ElasticGraph
|
|
89
89
|
value_name = schema_def_state.enum_value_namer.name_for(name, value_name.to_s)
|
90
90
|
|
91
91
|
if values_by_name.key?(value_name)
|
92
|
-
raise SchemaError, "Duplicate value on Enum::Type #{name}: #{value_name}"
|
92
|
+
raise Errors::SchemaError, "Duplicate value on Enum::Type #{name}: #{value_name}"
|
93
93
|
end
|
94
94
|
|
95
95
|
if value_name.length > DEFAULT_MAX_KEYWORD_LENGTH
|
96
|
-
raise SchemaError, "Enum value `#{name}.#{value_name}` is too long: it is #{value_name.length} characters but cannot exceed #{DEFAULT_MAX_KEYWORD_LENGTH} characters."
|
96
|
+
raise Errors::SchemaError, "Enum value `#{name}.#{value_name}` is too long: it is #{value_name.length} characters but cannot exceed #{DEFAULT_MAX_KEYWORD_LENGTH} characters."
|
97
97
|
end
|
98
98
|
|
99
99
|
values_by_name[value_name] = schema_def_state.factory.new_enum_value(value_name, alternate_original_name, &block)
|
@@ -127,7 +127,7 @@ module ElasticGraph
|
|
127
127
|
# @return [String] GraphQL SDL form of the enum type
|
128
128
|
def to_sdl
|
129
129
|
if values_by_name.empty?
|
130
|
-
raise SchemaError, "Enum type #{name} has no values, but enums must have at least one value."
|
130
|
+
raise Errors::SchemaError, "Enum type #{name} has no values, but enums must have at least one value."
|
131
131
|
end
|
132
132
|
|
133
133
|
<<~EOS
|