diff options
Diffstat (limited to 'app/graphql/types/global_id_type.rb')
-rw-r--r-- | app/graphql/types/global_id_type.rb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/app/graphql/types/global_id_type.rb b/app/graphql/types/global_id_type.rb index 750bd1bfe8d..79061df7282 100644 --- a/app/graphql/types/global_id_type.rb +++ b/app/graphql/types/global_id_type.rb @@ -23,7 +23,7 @@ module Types A global identifier. A global identifier represents an object uniquely across the application. - An example of such an identifier is "gid://gitlab/User/1". + An example of such an identifier is `"gid://gitlab/User/1"`. Global identifiers are encoded as strings. DESC @@ -67,6 +67,17 @@ module Types graphql_name end + define_singleton_method(:as) do |new_name| + if @renamed && graphql_name != new_name + raise "Conflicting names for ID of #{model_class.name}: " \ + "#{graphql_name} and #{new_name}" + end + + @renamed = true + graphql_name(new_name) + self + end + define_singleton_method(:coerce_result) do |gid, ctx| global_id = ::Gitlab::GlobalId.as_global_id(gid, model_name: model_class.name) |