Browse Source

Maintenance: Refactor handling of GraphQL field names.

Martin Gruner 2 years ago
parent
commit
96c831af6d

+ 4 - 0
app/graphql/gql/concern/has_nested_graphql_name.rb

@@ -10,5 +10,9 @@ module Gql::Concern::HasNestedGraphqlName
 
       subclass.graphql_name(subclass.name.sub(%r{Gql::[^:]+::}, '').gsub('::', '').sub(%r{Type\Z}, ''))
     end
+
+    def self.graphql_field_name
+      graphql_name.camelize(:lower).to_sym
+    end
   end
 end

+ 1 - 2
app/graphql/gql/mutations/base_mutation.rb

@@ -40,8 +40,7 @@ module Gql::Mutations
     end
 
     def self.register_in_schema(schema)
-      field_name = name.sub('Gql::Mutations::', '').gsub('::', '').camelize(:lower).to_sym
-      schema.field field_name, mutation: self
+      schema.field graphql_field_name, mutation: self
     end
 
     def error_response(*errors)

+ 1 - 2
app/graphql/gql/queries/base_query.rb

@@ -11,8 +11,7 @@ module Gql::Queries
     end
 
     def self.register_in_schema(schema)
-      field_name = name.sub('Gql::Queries::', '').gsub('::', '').camelize(:lower).to_sym
-      schema.field field_name, resolver: self
+      schema.field graphql_field_name, resolver: self
     end
 
   end

+ 2 - 4
app/graphql/gql/subscriptions/app_maintenance.rb

@@ -5,6 +5,8 @@ module Gql::Subscriptions
 
     description 'Application update/change events'
 
+    broadcastable true
+
     field :type, Gql::Types::Enum::AppMaintenanceTypeType, null: true, description: 'Maintenance type, may trigger actions in the front end'
 
     def self.authorize(...)
@@ -14,9 +16,5 @@ module Gql::Subscriptions
     def update
       object
     end
-
-    def self.register_in_schema(schema)
-      schema.field field_name, resolver: self, broadcastable: true
-    end
   end
 end

+ 8 - 3
app/graphql/gql/subscriptions/base_subscription.rb

@@ -13,8 +13,13 @@ module Gql::Subscriptions
       ctx.current_user
     end
 
-    def self.field_name
-      name.sub('Gql::Subscriptions::', '').gsub('::', '').camelize(:lower).to_sym
+    # Add DSL to specify if a subscription is broadcastable.
+    def self.broadcastable(broadcastable = nil)
+      if broadcastable.nil?
+        @broadcastable
+      else
+        @broadcastable = broadcastable
+      end
     end
 
     #
@@ -32,7 +37,7 @@ module Gql::Subscriptions
     end
 
     def self.register_in_schema(schema)
-      schema.field field_name, resolver: self
+      schema.field graphql_field_name, resolver: self, broadcastable: !!broadcastable
     end
 
   end

+ 2 - 4
app/graphql/gql/subscriptions/push_messages.rb

@@ -5,6 +5,8 @@ module Gql::Subscriptions
 
     description 'Broadcast messages to all users'
 
+    broadcastable true
+
     field :title, String, null: true, description: 'Message title'
     field :text, String, null: true, description: 'Message text'
 
@@ -15,9 +17,5 @@ module Gql::Subscriptions
     def update
       object
     end
-
-    def self.register_in_schema(schema)
-      schema.field field_name, resolver: self, broadcastable: true
-    end
   end
 end

+ 1 - 1
app/models/setting.rb

@@ -199,7 +199,7 @@ reload config settings
       },
       preferences[:authentication] ? 'authenticated' : 'public'
     )
-    Gql::ZammadSchema.subscriptions.trigger(Gql::Subscriptions::ConfigUpdates.field_name, {}, self)
+    Gql::ZammadSchema.subscriptions.trigger(Gql::Subscriptions::ConfigUpdates.graphql_field_name, {}, self)
     true
   end
 end

+ 1 - 1
app/models/user/triggers_subscriptions.rb

@@ -15,7 +15,7 @@ module User::TriggersSubscriptions
     return true if Setting.get('import_mode')
 
     Gql::ZammadSchema.subscriptions.trigger(
-      Gql::Subscriptions::UserUpdates.field_name,
+      Gql::Subscriptions::UserUpdates.graphql_field_name,
       { user_id: Gql::ZammadSchema.id_from_object(self) },
       self
     )

+ 1 - 1
lib/app_version.rb

@@ -47,7 +47,7 @@ send also reload type to clients
     # broadcast to clients
     Sessions.broadcast(event_data(type), 'public')
 
-    Gql::ZammadSchema.subscriptions.trigger(Gql::Subscriptions::AppMaintenance.field_name, {}, { type: type })
+    Gql::ZammadSchema.subscriptions.trigger(Gql::Subscriptions::AppMaintenance.graphql_field_name, {}, { type: type })
   end
 
   def self.event_data(type = 'app_version')

+ 1 - 1
spec/graphql/gql/subscriptions/push_messages_spec.rb

@@ -22,7 +22,7 @@ RSpec.describe Gql::Subscriptions::PushMessages, type: :graphql do
 
   def trigger_push_message(title, text)
     Gql::ZammadSchema.subscriptions.trigger(
-      described_class.field_name,
+      described_class.graphql_field_name,
       {},
       {
         title: title,

Some files were not shown because too many files changed in this diff