Sha256: 0739e37b6b1c2fb80ae1c1e6cb4bc1a2fd69f1869b0f4182308ba63e599159df

Contents?: true

Size: 1.44 KB

Versions: 57

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

57 entries across 57 versions & 1 rubygems

Version Path
shopify-cli-2.36.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.35.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.34.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.33.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.33.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.32.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.32.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.31.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.30.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.29.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.28.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.27.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.26.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.25.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.24.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.23.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.22.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.21.0 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.20.1 lib/project_types/extension/forms/questions/ask_app.rb
shopify-cli-2.20.0 lib/project_types/extension/forms/questions/ask_app.rb