Class: ShopifyClient::CreateAllWebhooks

Inherits:
Object
  • Object
show all
Defined in:
lib/shopify-client/create_all_webhooks.rb

Instance Method Summary collapse

Instance Method Details

#call(client) ⇒ Array<String>

Create all registered webhooks for a shop.

Parameters:

Returns:

  • (Array<String>)

    GraphQL IDs

Raises:



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/shopify-client/create_all_webhooks.rb', line 10

def call(client)
  raise ConfigError, 'webhook_uri is not set' unless ShopifyClient.config.webhook_uri

  webhooks_with_index = ShopifyClient.webhooks.each_with_index

  return [] unless webhooks_with_index.any?

  client.graphql(%(
    mutation webhookSubscriptionCreate(
      #{webhooks_with_index.map { |_, i| %(
        $topic#{i}: WebhookSubscriptionTopic!
        $webhookSubscription#{i}: WebhookSubscriptionInput!
      )}.join("\n")}
    ) {
      #{webhooks_with_index.map { |_, i| %(
        webhookSubscriptionCreate#{i}: webhookSubscriptionCreate(
          topic: $topic#{i}
          webhookSubscription: $webhookSubscription#{i}
        ) {
          userErrors {
            field
            message
          }
          webhookSubscription {
            id
          }
        }
      )}.join("\n")}
    }
  ), webhooks_with_index.each_with_object({}) do |((topic, options), i), variables|
    variables["topic#{i}"] = topic_to_graphql(topic)
    variables["webhookSubscription#{i}"] = {}.tap do |subscription|
      subscription['callbackUrl'] = ShopifyClient.config.webhook_uri
      subscription['includeFields'] = options[:fields] unless options[:fields].empty?
    end
  end).data['data'].map do |_, mutation|
    mutation['webhookSubscription']['id']
  end
end