Automatic parsing of `ISO8601Date` and other custom types
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 35/100
Línea de trabajo
Empieza aplicando la configuración de recarga del esquema en test/test_query_result.rb y ejecuta bundle exec rake test TEST=test/test_query_result.rb para reproducir los tres fallos de casteo. Inspecciona GraphQL::Client.load_schema y el manejo de los tipos integrados; el trabajo estará terminado cuando ISO8601Date, ISO8601DateTime y los valores de escalares personalizados relacionados se conviertan correctamente sin modificar GraphQL::Schema::BUILT_IN_TYPES mediante monkey-patching.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
We use graphql-ruby and graphql-client to talk to each other. The graphql-ruby library defines a few extra types beyond the standard GraphQL types, e.g. ISO8601Date, ISO8601DateTime, etc, which we make use of.
In the client we've found that the values of these fields are not getting automatically cast back to Date / Time objects, like they do for other types of object.
I was wondering what might be the best way to get automatic casting for these types. At the moment the only way I can see it might work is by monkey-patching the GraphQL::Schema::BUILT_IN_TYPES hash, which is a bit 🤢 .
module GraphQL
class Schema
BUILT_IN_TYPES['ISO8601Date'] = GraphQL::Types::ISO8601Date
BUILT_IN_TYPES['ISO8601DateTime'] = GraphQL::Types::ISO8601DateTime
end
end
Is there a better way of managing this? I can imagine that other GraphQL schemas might have other sorts of custom types, but then how should they be re-interpreted by the client?
Incidentally the tests don't tickle this situation, as the schema is defined using the DSL. To get the datetime/date parsing tests to fail, change test/test_query_result.rb to dump/reload the schema:
ReloadedSchema = GraphQL::Client.load_schema(Schema.execute(GraphQL::Introspection.query(include_deprecated_args: true, include_schema_description: true, include_specified_by_url: true, include_is_repeatable: true)))
def setup
@client = GraphQL::Client.new(schema: ReloadedSchema, execute: Schema, enforce_collocated_callers: true)
end
Then the test fails:
bundle exec rake test TEST=test/test_query_result.rb
Run options: --seed 9819
# Running:
F.........F.......F...................
Finished in 0.077330s, 491.4005 runs/s, 1551.7910 assertions/s.
1) Failure:
TestQueryResult#test_interface_within_union_values [test/test_query_result.rb:592]:
Expected: 1970-01-01 00:00:01 UTC
Actual: "1970-01-01T01:00:01+01:00"
2) Failure:
TestQueryResult#test_date_scalar_casting [test/test_query_result.rb:628]:
--- expected
+++ actual
@@ -1 +1,3 @@
-#<Date: 1970-01-01 ((2440588j,0s,0n),+0s,2299161j)>
+# encoding: US-ASCII
+# valid: true
+"1970-01-01"
3) Failure:
TestQueryResult#test_datetime_scalar_casting [test/test_query_result.rb:610]:
Expected: 1970-01-01 01:00:00 +0100
Actual: "1970-01-01T01:00:00+01:00"
38 runs, 120 assertions, 3 failures, 0 errors, 0 skips
rake aborted!
Adding the "monkey patch" above then re-fixes the tests as the casting happens automatically.
This all feels a bit gross! Is there a better way?
Thanks!
- Lenguaje dominante
- Ruby
- Estrellas
- 78
- Forks
- 228
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de github-community-projects/graphql-client
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 45/100
github-community-projects/graphql-client#78 · 1 comentario ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
github-community-projects/graphql-client#77 · 2 comentarios ·
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
github-community-projects/graphql-client#76 · 4 comentarios · 1 reacción ·
-
Errors not populating correctlyAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
github-community-projects/graphql-client#75 · 1 comentario · 1 reacción ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
github-community-projects/graphql-client#67 · 2 comentarios ·
Todos los issues de github-community-projects/graphql-client
Issues similares
-
DB上でコメント本文がNULLを許容しているAbiertoバグ
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
security
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
IBM/ai-security-baseline#25 ·
-
security
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Mend: dependency security vulnerability
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día