Class: Assistant::TechnicalArticleManagementToolBuilder::TransitionTool

Inherits:
ManagementTool
  • Object
show all
Defined in:
app/services/assistant/technical_article_management_tool_builder.rb

Overview

Applies only defined state-machine events.

Instance Method Summary collapse

Methods inherited from ManagementTool

#initialize

Constructor Details

This class inherits a constructor from Assistant::TechnicalArticleManagementToolBuilder::ManagementTool

Instance Method Details

#execute(id:, event:, confirm: false) ⇒ String

Returns JSON transition result.

Parameters:

  • id (Integer)

    Technical Article ID

  • event (String)

    defined state-machine event

  • confirm (Boolean) (defaults to: false)

    explicit confirmation for visibility/destructive events

Returns:

  • (String)

    JSON transition result



659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 659

def execute(id:, event:, confirm: false, **)
  safely('transition') do
    event = event.to_s
    raise ToolError, "Unknown Technical Article event: #{event}." unless event.in?(TRANSITION_EVENTS)

    article = find_article!(id)
    action = event.in?(APPROVAL_EVENTS) ? :approve : :update
    authorize!(action, article)
    raise ToolError, "Set confirm=true to #{event} Technical Article ##{article.id}." if event.in?(CONFIRMATION_EVENTS) && confirm != true

    if event == 'archive' && (replacement = article.active_replacement_draft)
      raise ToolError, "Review active replacement draft ##{replacement.id} before archiving."
    end
    raise ToolError, "Cannot #{event} a Technical Article in #{article.state} state." unless article.public_send(:"can_#{event}?")

    article.updater_id = require_actor!.id
    article.public_send(:"#{event}!")
    response(article, transition: event)
  end
end

#nameString

Returns stable tool name.

Returns:

  • (String)

    stable tool name



653
# File 'app/services/assistant/technical_article_management_tool_builder.rb', line 653

def name = 'transition_technical_article'