discourse/app/models/concerns
Gary Pendergast d2516cbdcd
DEV: Centralise user action definitions for reviewables. (#34279)
This change centralises how user actions are defined.

### How It Works

`ReviewableActionBuilder::build_user_actions_bundle` defines all of the
user actions that a reviewable should need.

`ReviewableActionBuilder` also now includes matching `perform_*`
methods, to go with the actions defined in `build_user_actions_bundle`.
There's also an overridable `target_user` method. It defaults to
`target_created_by`, since that's the most common case, but it will
allow different reviewable types to define a different user to target:
for example, `ReviewableUser` would want to have it return `target`.

### Supporting Changes

`Reviewable::build_actions` is temporarily overridden in
`ReviewableActionBuilder`. Because we need `build_actions` to define
both the old and new actions, I've chosen to split these into separate
methods (`build_legacy_combined_actions` and
`build_new_separated_actions`) that reviewables will temporarily need to
define. This allows minimal code churn of the old logic, while we can
build the new logic within its own method. `Reviewable::build_actions`
will ultimately be moved to `ReviewableActionBuilder`.

`Reviewable::create_result` has been copied to
`ReviewableActionBuilder`, and expanded to include the flag-handling
functionality of `ReviewablePost::successful_transition`.
2025-08-26 14:35:53 +10:00
..
reports FIX: Update associated accounts report to handle Discourse Connect (#34462) 2025-08-21 13:51:06 -04:00
anon_cache_invalidator.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
cached_counting.rb DEV: Upgrade the Redis gem to v5.4 2025-03-19 14:34:00 +01:00
category_hashtag.rb DEV: Fix Lint/ShadowingOuterLocalVariable (#32036) 2025-03-27 13:50:24 +01:00
custom_field.rb DEV: Add true_fields method for CustomFields (#24876) 2023-12-14 11:06:21 -06:00
has_custom_fields.rb DEV: Remove logical OR assignment of constants (#29201) 2024-10-16 10:09:07 +08:00
has_deprecated_columns.rb DEV: Remove version-number-based logic (#25482) 2024-01-30 17:34:10 +00:00
has_destroyed_web_hook.rb FEATURE: granular webhooks (#23070) 2023-10-09 03:35:31 +00:00
has_sanitizable_fields.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
has_search_data.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
has_url.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
limited_edit.rb FIX: Always trust admin and moderators with post edits (#25602) 2024-02-08 13:10:26 +10:00
locale_matchable.rb DEV: Use localizable concerns across post, topic, categories (#34137) 2025-08-07 22:12:01 +08:00
localizable.rb FEATURE: Localize topic titles and category names in crawler view (#34212) 2025-08-12 10:57:21 +08:00
positionable.rb FIX: Update position on model when re-positioning record (#24997) 2023-12-21 10:15:10 +08:00
reviewable_action_builder.rb DEV: Centralise user action definitions for reviewables. (#34279) 2025-08-26 14:35:53 +10:00
roleable.rb DEV: Make more group-based settings client: false (#25585) 2024-02-08 09:43:34 +10:00
searchable.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
second_factor_manager.rb Build(deps-dev): Bump rubocop from 1.68.0 to 1.69.0 (#29947) 2024-11-27 01:51:01 +01:00
stats_cacheable.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
topic_tracking_state_publishable.rb DEV: Apply syntax_tree formatting to app/* 2023-01-09 14:14:59 +00:00
trashable.rb DEV: Added .only_deleted scope in the Trashable module (#20196) 2023-02-07 15:28:59 -03:00