Sha256: 4f0010f34290deeb7336aaf548de72a6fe9fab3ce17a21aa1004fe4d5283bde6

Contents?: true

Size: 2 KB

Versions: 13

Compression:

Stored size: 2 KB

Contents

# frozen_string_literal: true

require "rails/generators/base"

module ShopifyApp
  module Generators
    class AddWebhookGenerator < Rails::Generators::Base
      source_root File.expand_path("../templates", __FILE__)
      class_option :topic, type: :string, aliases: "-t", required: true
      class_option :path, type: :string, aliases: "-p", required: true

      hook_for :test_framework, as: :job, in: :rails do |instance, generator|
        instance.invoke(generator, [instance.send(:job_file_name)])
      end

      def init_webhook_config
        initializer = load_initializer
        return if initializer.include?("config.webhooks")

        inject_into_file(
          "config/initializers/shopify_app.rb",
          "  config.webhooks = [\n  ]\n",
          after: /ShopifyApp\.configure.*\n/,
        )
      end

      def inject_webhook_to_shopify_app_initializer
        inject_into_file(
          "config/initializers/shopify_app.rb",
          webhook_config,
          after: "config.webhooks = [",
        )

        initializer = load_initializer

        unless initializer.include?(webhook_config)
          shell.say("Error adding webhook to config. Add this line manually: #{webhook_config}", :red)
        end
      end

      def add_webhook_job
        namespace = ShopifyApp.configuration.webhook_jobs_namespace
        @job_file_name = if namespace.present?
          "#{namespace}/#{job_file_name}_job"
        else
          "#{job_file_name}_job"
        end
        @job_class_name = @job_file_name.classify
        template("webhook_job.rb", "app/jobs/#{@job_file_name}.rb")
      end

      private

      def job_file_name
        path.split("/").last
      end

      def load_initializer
        File.read(File.join(destination_root, "config/initializers/shopify_app.rb"))
      end

      def webhook_config
        "\n    { topic: \"#{topic}\", path: \"#{path}\" },"
      end

      def topic
        options["topic"]
      end

      def path
        options["path"]
      end
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
shopify_app-22.5.2 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.5.1 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.5.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.4.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.3.1 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.3.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.2.1 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.2.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.1.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.0.1 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-22.00.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-21.10.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb
shopify_app-21.9.0 lib/generators/shopify_app/add_webhook/add_webhook_generator.rb