Skip to content

Commit d846cfe

Browse files
committed
feat(router): support non-GET methods in custom actions
1 parent e6811ea commit d846cfe

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

lib/tiny_admin/router.rb

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,10 +148,10 @@ def setup_member_routes(req, slug, options:, repository:)
148148

149149
def setup_custom_actions(req, custom_actions = nil, options:, repository:, slug:, reference: nil)
150150
(custom_actions || []).each_with_object({}) do |custom_action, result|
151-
action_slug, action = custom_action.first
152-
action_class = to_class(action)
151+
action_slug, action_config = custom_action.first
152+
action_class, http_method = parse_action_config(action_config)
153153

154-
req.get action_slug.to_s do
154+
req.public_send(http_method, action_slug.to_s) do
155155
authorize!(:custom_action, action_slug.to_s) do
156156
context = Context.new(
157157
actions: {},
@@ -170,6 +170,16 @@ def setup_custom_actions(req, custom_actions = nil, options:, repository:, slug:
170170
end
171171
end
172172

173+
def parse_action_config(config)
174+
if config.is_a?(Hash)
175+
action_class = to_class(config[:action] || config["action"])
176+
http_method = (config[:method] || config["method"] || "get").to_sym
177+
[action_class, http_method]
178+
else
179+
[to_class(config), :get]
180+
end
181+
end
182+
173183
def authorization
174184
TinyAdmin.settings.authorization_class
175185
end

0 commit comments

Comments
 (0)