From df79b9d8173bcda130a17400f3fddc4f0003a770 Mon Sep 17 00:00:00 2001 From: Rhet Date: Wed, 7 Jul 2021 09:46:40 -0600 Subject: [PATCH 1/4] Use concern to prepare view paths --- lib/coprl/presenters/dsl/definition.rb | 4 +-- lib/coprl/presenters/dsl/user_interface.rb | 4 +-- .../rails/concerns/coprl_view_paths.rb | 33 +++++++++++++++++++ lib/coprl/presenters/rails/engine.rb | 5 +++ .../web_client/plugin_views_path.rb | 10 +++--- .../config/initializers/presenters.rb | 3 +- 6 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 lib/coprl/presenters/rails/concerns/coprl_view_paths.rb diff --git a/lib/coprl/presenters/dsl/definition.rb b/lib/coprl/presenters/dsl/definition.rb index 0d9121fa..a4047211 100644 --- a/lib/coprl/presenters/dsl/definition.rb +++ b/lib/coprl/presenters/dsl/definition.rb @@ -17,8 +17,8 @@ def build self end - def expand(router: , context:{}, &block) - presenter = UserInterface.new(router: router, context: context, name: @name, namespace: @namespace, &@block) + def expand(router: , context:{}, plugins: [], &block) + presenter = UserInterface.new(router: router, context: context, plugins: plugins, name: @name, namespace: @namespace, &@block) yield(presenter) if block presenter.expand_instance end diff --git a/lib/coprl/presenters/dsl/user_interface.rb b/lib/coprl/presenters/dsl/user_interface.rb index ac9ad956..aa72c169 100644 --- a/lib/coprl/presenters/dsl/user_interface.rb +++ b/lib/coprl/presenters/dsl/user_interface.rb @@ -25,7 +25,7 @@ class UserInterface private :context, :router, :namespace alias params context - def initialize(context:, parent: nil, router: nil, name: nil, namespace: [], &block) + def initialize(context:, parent: nil, router: nil, name: nil, plugins: [], namespace: [], &block) @parent = parent @router = router || @parent&.send(:router) @context = context || {} @@ -36,7 +36,7 @@ def initialize(context:, parent: nil, router: nil, name: nil, namespace: [], &bl @footer = nil @name = name @namespace = namespace - @plugins = [] + @plugins = plugins || [] @csrf_meta_tags = authenticity_token_meta_tags(@context.fetch(:session, nil)) add_global_helpers initialize_plugins diff --git a/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb b/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb new file mode 100644 index 00000000..6a262652 --- /dev/null +++ b/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb @@ -0,0 +1,33 @@ +module Coprl + module Presenters + module Rails + module Concerns + module CoprlViewPaths + extend ActiveSupport::Concern + + included do + before_action :set_view_path + end + + + module ClassMethods + def presenter_plugin(*plugins) + @plugins = Array(plugins) + end + + def plugins + @plugins || [] + end + end + + def set_view_path + paths = Coprl::Presenters::WebClient::PluginViewsPath.new(pom: nil, plugins: self.class.plugins).render + paths.each do |path| + prepend_view_path path + end + end + end + end + end + end +end diff --git a/lib/coprl/presenters/rails/engine.rb b/lib/coprl/presenters/rails/engine.rb index 077b865d..5747fbda 100644 --- a/lib/coprl/presenters/rails/engine.rb +++ b/lib/coprl/presenters/rails/engine.rb @@ -12,6 +12,11 @@ class Engine < ::Rails::Engine # TODO: should rename these since they are common names that are likely going to collide app.middleware.use ::ActionDispatch::Static, File.join(root, '..', 'public') end + + ActiveSupport.on_load(:action_controller) do + include Concerns::CoprlViewPaths + end + end end end diff --git a/lib/coprl/presenters/web_client/plugin_views_path.rb b/lib/coprl/presenters/web_client/plugin_views_path.rb index ba9c492a..2880c1ae 100644 --- a/lib/coprl/presenters/web_client/plugin_views_path.rb +++ b/lib/coprl/presenters/web_client/plugin_views_path.rb @@ -8,17 +8,17 @@ class PluginViewsPath extend Pluggable include_plugins(:WebClientComponents) - def initialize(pom:) + def initialize(pom: nil, plugins: nil) @pom = pom + @plugins = plugins || [] initialize_plugins end def render results = [] - ((@plugins||[]) + Coprl::Presenters::Settings.config.presenters.plugins).each do |plugin| + (@plugins + Coprl::Presenters::Settings.config.presenters.plugins).each do |plugin| view_dir_method = :"view_dir_#{plugin}" - results << send(view_dir_method, - @pom) if respond_to?(view_dir_method) + results << send(view_dir_method, @pom) if respond_to?(view_dir_method) end results end @@ -26,7 +26,7 @@ def render private def initialize_plugins - @plugins = @pom.send(:plugins) + @plugins << @pom.send(:plugins) if @pom self.class.include_plugins(:WebClientComponents, plugins: @plugins) end end diff --git a/rails-engine/config/initializers/presenters.rb b/rails-engine/config/initializers/presenters.rb index fde15ece..4c1fc645 100644 --- a/rails-engine/config/initializers/presenters.rb +++ b/rails-engine/config/initializers/presenters.rb @@ -30,7 +30,8 @@ def presenter_template(source) presenter = Coprl::Presenters::App[presenter_name].call context = params.dup.to_unsafe_hash router = Coprl::Presenters::WebClient::Router.new(base_url: request.base_url) - @pom = presenter.expand(router: router, context: context) + plugins = self.controller.class.plugins + @pom = presenter.expand(router: router, context: context, plugins: plugins) end #{source} end From d31100cc93b5f8aafb60f1f49a0500e5abb41b4e Mon Sep 17 00:00:00 2001 From: Rhet Date: Wed, 7 Jul 2021 09:46:52 -0600 Subject: [PATCH 2/4] Fix Rails 5 bug when adding Rails URL helpers --- lib/coprl/presenters/dsl/components/base.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/coprl/presenters/dsl/components/base.rb b/lib/coprl/presenters/dsl/components/base.rb index a5ef2059..e78ac31e 100644 --- a/lib/coprl/presenters/dsl/components/base.rb +++ b/lib/coprl/presenters/dsl/components/base.rb @@ -42,6 +42,10 @@ def expand! private + def default_url_options + {} + end + def initialize_plugins self.class.include_plugins(:DSLComponents, :DSLHelpers, plugins: _plugins_) end From e3b763d00c8427098d947e83a07000027575a692 Mon Sep 17 00:00:00 2001 From: Rhet Date: Wed, 7 Jul 2021 09:48:38 -0600 Subject: [PATCH 3/4] fix unnecessary space --- lib/coprl/presenters/rails/concerns/coprl_view_paths.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb b/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb index 6a262652..8cc021a8 100644 --- a/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb +++ b/lib/coprl/presenters/rails/concerns/coprl_view_paths.rb @@ -8,8 +8,7 @@ module CoprlViewPaths included do before_action :set_view_path end - - + module ClassMethods def presenter_plugin(*plugins) @plugins = Array(plugins) From 6cff1a3cee50e58328710eca019d0199bb529c88 Mon Sep 17 00:00:00 2001 From: Rhet Date: Thu, 8 Jul 2021 14:46:34 -0600 Subject: [PATCH 4/4] remove default_url_options method --- lib/coprl/presenters/dsl/components/base.rb | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/coprl/presenters/dsl/components/base.rb b/lib/coprl/presenters/dsl/components/base.rb index e78ac31e..1059dbe8 100644 --- a/lib/coprl/presenters/dsl/components/base.rb +++ b/lib/coprl/presenters/dsl/components/base.rb @@ -42,10 +42,6 @@ def expand! private - def default_url_options - {} - end - def initialize_plugins self.class.include_plugins(:DSLComponents, :DSLHelpers, plugins: _plugins_) end @@ -79,7 +75,6 @@ def context alias params context - def yield_block return @_yield_block_ if @_yield_block_ @parent.send(:yield_block)