Sha256: 4a1e502cb930991cb6121e1c27ead1e9bcb82dd331e103584b1af55872e0de50

Contents?: true

Size: 1.67 KB

Versions: 26

Compression:

Stored size: 1.67 KB

Contents

# frozen_string_literal: true

module Extension
  module Features
    class ArgoConfig
      CONFIG_FILE_NAME = "extension.config.yml"

      class << self
        def parse_yaml(context, permitted_keys = [])
          file_name = File.join(context.root, CONFIG_FILE_NAME)

          return {} unless File.size?(file_name)

          begin
            config = YAML.load_file(file_name)

            # `YAML.load_file` returns nil if the file is not empty
            # but does not contain any parsable yml data, e.g. only comments
            # We consider this valid
            return {} if config.nil?

            unless config.is_a?(Hash)
              raise ShopifyCLI::Abort, ShopifyCLI::Context.message("core.yaml.error.not_hash", CONFIG_FILE_NAME)
            end

            config.transform_keys!(&:to_sym)
            assert_valid_config(config, permitted_keys) unless permitted_keys.empty?

            config
          rescue Psych::SyntaxError => e
            raise(
              ShopifyCLI::Abort,
              ShopifyCLI::Context.message("core.yaml.error.invalid", CONFIG_FILE_NAME, e.message)
            )
          end
        end

        private

        def assert_valid_config(config, permitted_keys)
          unpermitted_keys = config.keys.select do |k|
            !permitted_keys.include?(k)
          end

          unless unpermitted_keys.empty?
            raise(
              ShopifyCLI::Abort,
              ShopifyCLI::Context.message(
                "features.argo.config.unpermitted_keys",
                CONFIG_FILE_NAME,
                unpermitted_keys.map { |k| "\n- #{k}" }.join
              )
            )
          end
        end
      end
    end
  end
end

Version data entries

26 entries across 26 versions & 1 rubygems

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