Sha256: 76d93aed737cc8b494ebf956e7558bb722d28757da77674f4ca0d0ed26e90c7d

Contents?: true

Size: 1.44 KB

Versions: 20

Compression:

Stored size: 1.44 KB

Contents

module Extension
  module Forms
    module Questions
      class AskApp
        include ShopifyCli::MethodObject

        property! :ctx
        property :api_key
        property! :prompt,
          converts: :to_proc,
          default: -> { CLI::UI::Prompt.method(:ask) }

        def call(project_details)
          project_details.tap(&method(:prompt_for_app))
        end

        private

        def prompt_for_app(project_details)
          project_details.app =
            api_key.nil? ? choose_interactively(load_apps) : validate_app_ownership(api_key)
        end

        def validate_app_ownership(api_key)
          found_app = Tasks::GetApp.call(context: ctx, api_key: api_key)
          ctx.abort(ctx.message("create.invalid_api_key", api_key)) if found_app.nil?
          found_app
        end

        def choose_interactively(apps)
          prompt.call(ctx.message("create.ask_app")) do |handler|
            apps.each do |app|
              handler.option("#{app.title} by #{app.business_name}") { app }
            end
          end
        end

        def load_apps
          ctx.puts(@ctx.message("create.loading_apps"))
          apps = Tasks::GetApps.call(context: ctx)

          apps.empty? ? abort_no_apps : apps
        end

        def abort_no_apps
          ctx.puts(@ctx.message("create.no_apps"))
          ctx.puts(@ctx.message("create.learn_about_apps"))
          raise ShopifyCli::AbortSilent
        end
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
shopify-cli-2.4.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.3.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.2.2 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.2.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.2.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.1.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.0.2 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.0.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.0.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.14.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.13.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.13.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.12.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.11.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.10.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.9.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.9.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.8.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.7.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-1.7.0 lib/project_types/extension/forms/questions/ask_app.rb