class ShopifyAPI::Context

Attributes

api_host[R]
api_key[R]
api_secret_key[R]
api_version[R]
host[R]
log_level[R]
logger[R]
old_api_secret_key[R]
private_shop[R]
response_as_struct[R]
scope[R]
user_agent_prefix[R]

Public Class Methods

activate_session(session) click to toggle source
# File lib/shopify_api/context.rb, line 162
def activate_session(session)
  T.must(@active_session).value = session
end
active_session() click to toggle source
# File lib/shopify_api/context.rb, line 157
def active_session
  @active_session&.value
end
deactivate_session() click to toggle source
# File lib/shopify_api/context.rb, line 167
def deactivate_session
  T.must(@active_session).value = nil
end
embedded?() click to toggle source
# File lib/shopify_api/context.rb, line 147
def embedded?
  @is_embedded
end
host_name() click to toggle source
# File lib/shopify_api/context.rb, line 177
def host_name
  T.must(URI(T.must(host)).host)
end
host_scheme() click to toggle source
# File lib/shopify_api/context.rb, line 172
def host_scheme
  T.must(URI.parse(T.must(host)).scheme)
end
load_rest_resources(api_version:) click to toggle source
# File lib/shopify_api/context.rb, line 95
def load_rest_resources(api_version:)
  # Unload any previous instances - mostly useful for tests where we need to reset the version
  @rest_resource_loader&.setup
  @rest_resource_loader&.unload

  # No resources for the unstable version
  return if api_version == "unstable"

  version_folder_name = api_version.gsub("-", "_")
  path = "#{__dir__}/rest/resources/#{version_folder_name}"

  unless Dir.exist?(path)
    unless @notified_missing_resources_folder.key?(api_version)
      @logger.warn("Cannot autoload REST resources for API version '#{version_folder_name}', folder is missing")
      @notified_missing_resources_folder[api_version] = true
    end

    return
  end

  @rest_resource_loader = T.let(Zeitwerk::Loader.new, T.nilable(Zeitwerk::Loader))
  T.must(@rest_resource_loader).enable_reloading
  T.must(@rest_resource_loader).ignore("#{__dir__}/rest/resources")
  T.must(@rest_resource_loader).setup
  T.must(@rest_resource_loader).push_dir(path, namespace: ShopifyAPI)
  T.must(@rest_resource_loader).reload
end
private?() click to toggle source
# File lib/shopify_api/context.rb, line 139
def private?
  @is_private
end
setup( api_key:, api_secret_key:, api_version:, scope:, is_private:, is_embedded:, log_level: :info, logger: ::Logger.new($stdout), host_name: nil, host: ENV["HOST"] || "https:// click to toggle source
# File lib/shopify_api/context.rb, line 50
def setup(
  api_key:,
  api_secret_key:,
  api_version:,
  scope:,
  is_private:,
  is_embedded:,
  log_level: :info,
  logger: ::Logger.new($stdout),
  host_name: nil,
  host: ENV["HOST"] || "https://#{host_name}",
  private_shop: nil,
  user_agent_prefix: nil,
  old_api_secret_key: nil,
  api_host: nil,
  response_as_struct: false
)
  unless ShopifyAPI::AdminVersions::SUPPORTED_ADMIN_VERSIONS.include?(api_version)
    raise Errors::UnsupportedVersionError,
      "Invalid version #{api_version}, supported versions: #{ShopifyAPI::AdminVersions::SUPPORTED_ADMIN_VERSIONS}"
  end

  @api_key = api_key
  @api_secret_key = api_secret_key
  @api_version = api_version
  @api_host = api_host
  @host = T.let(host, T.nilable(String))
  @is_private = is_private
  @scope = Auth::AuthScopes.new(scope)
  @is_embedded = is_embedded
  @logger = logger
  @private_shop = private_shop
  @user_agent_prefix = user_agent_prefix
  @old_api_secret_key = old_api_secret_key
  @response_as_struct = response_as_struct
  @log_level = if valid_log_level?(log_level)
    log_level.to_sym
  else
    :info
  end

  load_rest_resources(api_version: api_version)
end
setup?() click to toggle source
# File lib/shopify_api/context.rb, line 152
def setup?
  [api_key, api_secret_key, T.must(host)].none?(&:empty?)
end

Private Class Methods

valid_log_level?(log_level) click to toggle source
# File lib/shopify_api/context.rb, line 184
def valid_log_level?(log_level)
  return true if ::ShopifyAPI::Logger.levels.include?(log_level.to_sym)

  ShopifyAPI::Logger.warn("#{log_level} is not a valid log_level. "\
    "Valid options are #{::ShopifyAPI::Logger.levels.join(", ")}")

  false
end