diff --git a/Gemfile.lock b/Gemfile.lock index 15ab80f..2ebe229 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - rbexy (2.0.0.rc2) + rbexy (2.0.0.rc3) actionview (>= 6, < 7.2) activesupport (>= 6, < 7.2) diff --git a/docker-compose.yml b/docker-compose.yml index 6525999..afc76a2 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -25,3 +25,5 @@ services: - 3000:3000 environment: - RAILS_LOG_STDOUT=1 + tty: true + stdin_open: true diff --git a/gemfiles/rails_6_1.gemfile.lock b/gemfiles/rails_6_1.gemfile.lock index e4c2523..603248b 100644 --- a/gemfiles/rails_6_1.gemfile.lock +++ b/gemfiles/rails_6_1.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - rbexy (2.0.0.rc2) + rbexy (2.0.0.rc3) actionview (>= 6, < 7.2) activesupport (>= 6, < 7.2) diff --git a/gemfiles/rails_7_0.gemfile.lock b/gemfiles/rails_7_0.gemfile.lock index b71b33d..87b6d21 100644 --- a/gemfiles/rails_7_0.gemfile.lock +++ b/gemfiles/rails_7_0.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - rbexy (2.0.0.rc2) + rbexy (2.0.0.rc3) actionview (>= 6, < 7.2) activesupport (>= 6, < 7.2) diff --git a/gemfiles/rails_7_1.gemfile.lock b/gemfiles/rails_7_1.gemfile.lock index 894bccc..590a0eb 100644 --- a/gemfiles/rails_7_1.gemfile.lock +++ b/gemfiles/rails_7_1.gemfile.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - rbexy (2.0.0.rc2) + rbexy (2.0.0.rc3) actionview (>= 6, < 7.2) activesupport (>= 6, < 7.2) diff --git a/gemfiles/rails_master.gemfile.lock b/gemfiles/rails_master.gemfile.lock index 1b5246a..843a2ba 100644 --- a/gemfiles/rails_master.gemfile.lock +++ b/gemfiles/rails_master.gemfile.lock @@ -93,7 +93,7 @@ GIT PATH remote: .. specs: - rbexy (2.0.0.rc2) + rbexy (2.0.0.rc3) actionview (>= 6, < 7.2) activesupport (>= 6, < 7.2) diff --git a/lib/rbexy/rails/engine.rb b/lib/rbexy/rails/engine.rb index c27e343..61f1544 100644 --- a/lib/rbexy/rails/engine.rb +++ b/lib/rbexy/rails/engine.rb @@ -1,6 +1,31 @@ require "rbexy/rails" require "action_view/dependency_tracker" +# Rails 7.1 implements development-mode template caching in a way that only works with view paths registered as +# strings with `prepend_view_path`. Since we register our view paths as `ComponentTemplateResolver` instances (which +# are subclasses of Rails `FileSytemResolver`), we have to monkey-patch Rails to make it think our custom resolvers +# are file system resolvers and thus should be supported by its caching mechanism. +if ActionView.version >= Gem::Version.new("7.1") + require "action_view/path_registry" + module ActionView + module PathRegistry + class << self + alias_method :_original_cast_file_system_resolvers, :cast_file_system_resolvers + end + + def self.cast_file_system_resolvers(paths) + Array(paths).each do |path| + next unless path.is_a?(Rbexy::Rails::ComponentTemplateResolver) + @file_system_resolvers[path] ||= path + file_system_resolver_hooks.each(&:call) + end + + _original_cast_file_system_resolvers(paths) + end + end + end +end + module Rbexy module Rails class Engine < ::Rails::Engine