Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor ViewPath::Registry into path ActionView::PathRegistry #47487

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -245,7 +245,7 @@ def spot(exc)
def build_backtrace
built_methods = {}

ActionView::ViewPaths::Registry.all_resolvers.each do |resolver|
ActionView::PathRegistry.all_resolvers.each do |resolver|
resolver.built_templates.each do |template|
built_methods[template.method_name] = template
end
Expand Down
1 change: 1 addition & 0 deletions actionview/lib/action_view.rb
Expand Up @@ -40,6 +40,7 @@ module ActionView
autoload :Helpers
autoload :LookupContext
autoload :Layouts
autoload :PathRegistry
autoload :PathSet
autoload :RecordIdentifier
autoload :Rendering
Expand Down
4 changes: 2 additions & 2 deletions actionview/lib/action_view/cache_expiry.rb
Expand Up @@ -13,7 +13,7 @@ def initialize(watcher:, &block)
rebuild_watcher

_self = self
ActionView::ViewPaths::Registry.singleton_class.set_callback(:build_file_system_resolver, :after) do
ActionView::PathRegistry.singleton_class.set_callback(:build_file_system_resolver, :after) do
_self.send(:rebuild_watcher)
end
end
Expand Down Expand Up @@ -59,7 +59,7 @@ def dirs_to_watch
end

def all_view_paths
ActionView::ViewPaths::Registry.all_file_system_resolvers.map(&:path)
ActionView::PathRegistry.all_file_system_resolvers.map(&:path)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion actionview/lib/action_view/lookup_context.rb
Expand Up @@ -71,7 +71,7 @@ def self.details_cache_key(details)
end

def self.clear
ActionView::ViewPaths::Registry.all_resolvers.each do |resolver|
ActionView::PathRegistry.all_resolvers.each do |resolver|
resolver.clear_cache
end
@view_context_class = nil
Expand Down
44 changes: 44 additions & 0 deletions actionview/lib/action_view/path_registry.rb
@@ -0,0 +1,44 @@
# frozen_string_literal: true

module ActionView # :nodoc:
jhawthorn marked this conversation as resolved.
Show resolved Hide resolved
module PathRegistry # :nodoc:
@view_paths_by_class = {}
@file_system_resolvers = Concurrent::Map.new

class << self
include ActiveSupport::Callbacks
define_callbacks :build_file_system_resolver
end

def self.get_view_paths(klass)
@view_paths_by_class[klass] || get_view_paths(klass.superclass)
end

def self.set_view_paths(klass, paths)
@view_paths_by_class[klass] = paths
end

def self.file_system_resolver(path)
path = File.expand_path(path)
resolver = @file_system_resolvers[path]
unless resolver
run_callbacks(:build_file_system_resolver) do
resolver = @file_system_resolvers.fetch_or_store(path) do
FileSystemResolver.new(path)
end
end
end
resolver
end

def self.all_resolvers
resolvers = [all_file_system_resolvers]
resolvers.concat @view_paths_by_class.values.map(&:to_a)
resolvers.flatten.uniq
end

def self.all_file_system_resolvers
@file_system_resolvers.values
end
end
end
2 changes: 1 addition & 1 deletion actionview/lib/action_view/path_set.rb
Expand Up @@ -67,7 +67,7 @@ def typecast(paths)
paths.map do |path|
case path
when Pathname, String
ViewPaths::Registry.file_system_resolver(path.to_s)
ActionView::PathRegistry.file_system_resolver(path.to_s)
when Resolver
path
else
Expand Down
47 changes: 3 additions & 44 deletions actionview/lib/action_view/view_paths.rb
Expand Up @@ -5,19 +5,19 @@ module ViewPaths
extend ActiveSupport::Concern

included do
ViewPaths::Registry.set_view_paths(self, ActionView::PathSet.new.freeze)
ActionView::PathRegistry.set_view_paths(self, ActionView::PathSet.new.freeze)
end

delegate :template_exists?, :any_templates?, :view_paths, :formats, :formats=,
:locale, :locale=, to: :lookup_context

module ClassMethods
def _view_paths
ViewPaths::Registry.get_view_paths(self)
ActionView::PathRegistry.get_view_paths(self)
end

def _view_paths=(paths)
ViewPaths::Registry.set_view_paths(self, paths)
ActionView::PathRegistry.set_view_paths(self, paths)
end

def _prefixes # :nodoc:
Expand Down Expand Up @@ -70,47 +70,6 @@ def local_prefixes
end
end

module Registry # :nodoc:
@view_paths_by_class = {}
@file_system_resolvers = Concurrent::Map.new

class << self
include ActiveSupport::Callbacks
define_callbacks :build_file_system_resolver
end

def self.get_view_paths(klass)
@view_paths_by_class[klass] || get_view_paths(klass.superclass)
end

def self.set_view_paths(klass, paths)
@view_paths_by_class[klass] = paths
end

def self.file_system_resolver(path)
path = File.expand_path(path)
resolver = @file_system_resolvers[path]
unless resolver
run_callbacks(:build_file_system_resolver) do
resolver = @file_system_resolvers.fetch_or_store(path) do
FileSystemResolver.new(path)
end
end
end
resolver
end

def self.all_resolvers
resolvers = [all_file_system_resolvers]
resolvers.concat @view_paths_by_class.values.map(&:to_a)
resolvers.flatten.uniq
end

def self.all_file_system_resolvers
@file_system_resolvers.values
end
end

# The prefixes used in render "foo" shortcuts.
def _prefixes # :nodoc:
self.class._prefixes
Expand Down