Sha256: f80f0e7ccdb6203a5c9f7876757159c83c2548bfd449fd7c8b981bb159542dce

Contents?: true

Size: 1.8 KB

Versions: 31

Compression:

Stored size: 1.8 KB

Contents

# frozen_string_literal: true

require "cgi"

module ShopifyCLI
  module Theme
    module DevServer
      class Proxy
        class TemplateParamBuilder
          def build
            # Core doesn't support replace_templates
            return {} if core?(current_path)

            (syncer_templates + request_templates)
              .select { |file| file.liquid? || file.json? }
              .uniq(&:relative_path)
              .map { |file| as_param(file) }
              .to_h
          end

          def with_core_endpoints(core_endpoints)
            @core_endpoints = core_endpoints
            self
          end

          def with_syncer(syncer)
            @syncer = syncer
            self
          end

          def with_rack_env(rack_env)
            @rack_env = rack_env
            self
          end

          def with_theme(theme)
            @theme = theme
            self
          end

          private

          def as_param(file)
            ["replace_templates[#{file.relative_path}]", file.read]
          end

          def syncer_templates
            @syncer&.pending_updates || []
          end

          def request_templates
            cookie_sections
              .map { |section| @theme[section] unless @theme.nil? }
              .compact
          end

          def cookie_sections
            CGI::Cookie.parse(cookie)["hot_reload_sections"].join.split(",") || []
          end

          def core?(path)
            core_endpoints.include?(path)
          end

          def current_path
            rack_env["PATH_INFO"]
          end

          def cookie
            rack_env["HTTP_COOKIE"]
          end

          def core_endpoints
            @core_endpoints || []
          end

          def rack_env
            @rack_env || {}
          end
        end
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
shopify-cli-2.24.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.23.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.22.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.21.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.20.1 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.20.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.19.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.18.1 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.18.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.17.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.16.1 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.16.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.6 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.5 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.4 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.3 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.2 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.1 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.15.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb
shopify-cli-2.14.0 lib/shopify_cli/theme/dev_server/proxy/template_param_builder.rb