Sha256: 5053eda85c4a083f785d3c28ec6d45d4b470d8a18ca5499a6ff39be2781d6df5

Contents?: true

Size: 1.89 KB

Versions: 72

Compression:

Stored size: 1.89 KB

Contents

require "bullet_train/themes/version"
require "bullet_train/themes/engine"
# require "bullet_train/themes/base/theme"

module BulletTrain
  module Themes
    mattr_accessor :themes, default: {}
    mattr_accessor :logo_height, default: 54

    mattr_reader :partial_paths, default: {}

    INVOCATION_PATTERNS = [
      # ❌ This path is included for legacy purposes, but you shouldn't reference partials like this in new code.
      /^account\/shared\//,

      # ✅ This is the correct path to generically reference theme component partials with.
      /^shared\//,
    ]

    def self.theme_invocation_path_for(path)
      # Themes only support `<%= render 'shared/box' ... %>` style calls to `render`, so check `path` is a string first.
      if path.is_a?(String) && (pattern = INVOCATION_PATTERNS.find { _1.match? path })
        path.remove(pattern)
      end
    end

    module Base
      class Theme
        def directory_order
          ["base"]
        end

        def resolved_partial_path_for(lookup_context, path, locals)
          # We disable partial path caching in development so new templates are taken into account without restarting the server.
          partial_paths = {}

          BulletTrain::Themes.partial_paths.fetch(path) do
            if (theme_path = BulletTrain::Themes.theme_invocation_path_for(path))
              # TODO directory_order should probably come from the `Current` model.
              if (partial = lookup_context.find_all(theme_path, directory_order.map { "themes/#{_1}" }, true, locals.keys).first)
                resolved_partial = partial.virtual_path.gsub("/_", "/")
                if Rails.env.development?
                  partial_paths[path] = resolved_partial
                else
                  BulletTrain::Themes.partial_paths[path] = resolved_partial
                end
              end
            end
          end
        end
      end
    end
  end
end

Version data entries

72 entries across 72 versions & 1 rubygems

Version Path
bullet_train-themes-1.6.30 lib/bullet_train/themes.rb
bullet_train-themes-1.6.29 lib/bullet_train/themes.rb
bullet_train-themes-1.6.28 lib/bullet_train/themes.rb
bullet_train-themes-1.6.27 lib/bullet_train/themes.rb
bullet_train-themes-1.6.26 lib/bullet_train/themes.rb
bullet_train-themes-1.6.25 lib/bullet_train/themes.rb
bullet_train-themes-1.6.24 lib/bullet_train/themes.rb
bullet_train-themes-1.6.23 lib/bullet_train/themes.rb
bullet_train-themes-1.6.22 lib/bullet_train/themes.rb
bullet_train-themes-1.6.21 lib/bullet_train/themes.rb
bullet_train-themes-1.6.20 lib/bullet_train/themes.rb
bullet_train-themes-1.6.19 lib/bullet_train/themes.rb
bullet_train-themes-1.6.18 lib/bullet_train/themes.rb
bullet_train-themes-1.6.17 lib/bullet_train/themes.rb
bullet_train-themes-1.6.16 lib/bullet_train/themes.rb
bullet_train-themes-1.6.15 lib/bullet_train/themes.rb
bullet_train-themes-1.6.14 lib/bullet_train/themes.rb
bullet_train-themes-1.6.13 lib/bullet_train/themes.rb
bullet_train-themes-1.6.12 lib/bullet_train/themes.rb
bullet_train-themes-1.6.11 lib/bullet_train/themes.rb