Automatic parsing of `ISO8601Date` and other custom types
还没有人认领这个 Issue。
评估
调研方向
首先应用 test/test_query_result.rb 中的 schema 重新加载设置,并运行 bundle exec rake test TEST=test/test_query_result.rb 以复现三个类型转换失败。检查 GraphQL::Client.load_schema 和内置类型处理;当 ISO8601Date、ISO8601DateTime 及相关自定义标量值能够正确转换,且无需对 GraphQL::Schema::BUILT_IN_TYPES 进行 monkey-patching 时,即表示完成。
由索引模型根据 Issue 内容生成。
描述
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!
- 主要语言
- Ruby
- 星标
- 78
- 派生
- 228
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
github-community-projects/graphql-client 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 45/100
github-community-projects/graphql-client#78 · 1 条评论 ·
-
难度 3/5 1-2 天 新手友好度 35/100
github-community-projects/graphql-client#77 · 2 条评论 ·
-
难度 5/5 一周以上 新手友好度 35/100
github-community-projects/graphql-client#76 · 4 条评论 · 1 个 reaction ·
-
难度 4/5 3-5 天 新手友好度 35/100
github-community-projects/graphql-client#75 · 1 条评论 · 1 个 reaction ·
-
难度 4/5 3-5 天 新手友好度 35/100
github-community-projects/graphql-client#67 · 2 条评论 ·
查看 github-community-projects/graphql-client 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 68/100
ossf/best-practices-badge#3081 ·
维护者通常 1 天内回复
-
documentation
难度 2/5 1-3 小时 新手友好度 66/100
NatLabRockies/OpenStudio-HPXML#2284 ·
-
aikido security:critical
难度 2/5 1-3 小时 新手友好度 75/100
dequelabs/axe-core-gems#532 ·
-
bug
难度 2/5 1-3 小时 新手友好度 67/100
ossia/score-docs#97 · 1 条评论 ·
-
print_table with indent and truncate lets lines run up to indent characters past the width可能已有人在做 @sebxt 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 85/100