Skip to content

Commit

Permalink
[Admin] Use Rails.application.mounted_helpers in base component
Browse files Browse the repository at this point in the history
Rather than implementing routing proxies ourselves, we can use what
Rails offers.

Fixes solidusio#6038
  • Loading branch information
mamhoff committed Dec 20, 2024
1 parent 77f8302 commit 48fcb3b
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 29 deletions.
18 changes: 0 additions & 18 deletions admin/app/components/solidus_admin/base_component.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,5 @@ def self.stimulus_id
end

delegate :stimulus_id, to: :class

class << self
private

def engines_with_routes
Rails::Engine.subclasses.map(&:instance).reject do |engine|
engine.routes.empty?
end
end
end

# For each engine with routes, define a method that returns the routes proxy.
# This allows us to use the routes in the context of a component class.
engines_with_routes.each do |engine|
define_method(engine.engine_name) do
engine.routes.url_helpers
end
end
end
end
6 changes: 6 additions & 0 deletions admin/lib/solidus_admin/engine.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,11 @@ class Engine < ::Rails::Engine
SolidusAdmin::Engine.root.join("app/components"),
]
end

initializer "solidus_admin.routing_proxies" do |app|
ActiveSupport.on_load(:after_routes_loaded) do
SolidusAdmin::BaseComponent.include app.routes.mounted_helpers
end
end
end
end
18 changes: 7 additions & 11 deletions admin/spec/components/solidus_admin/base_component_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,19 @@ def call

describe "#spree" do
it "gives access to spree routing helpers" do
without_partial_double_verification do
allow(Spree::Core::Engine.routes.url_helpers).to receive(:foo_path).and_return("/foo/bar")
end
component = described_class.new

expect(component.spree.foo_path).to eq("/foo/bar")
expect(described_class.new).to respond_to(:spree)
end
end

describe "#solidus_admin" do
it "gives access to solidus_admin routing helpers" do
without_partial_double_verification do
allow(SolidusAdmin::Engine.routes.url_helpers).to receive(:foo_path).and_return("/foo/bar")
end
component = described_class.new
expect(described_class.new).to respond_to(:solidus_admin)
end
end

expect(component.solidus_admin.foo_path).to eq("/foo/bar")
describe "#main_app" do
it "gives access to main_app routing helpers" do
expect(described_class.new).to respond_to(:main_app)
end
end

Expand Down

0 comments on commit 48fcb3b

Please sign in to comment.