Skip to content

Add PageSubjectsLookup for page-level subject predicates#795

Draft
JeroenDeDauw wants to merge 1 commit intomasterfrom
page-subjects-lookup
Draft

Add PageSubjectsLookup for page-level subject predicates#795
JeroenDeDauw wants to merge 1 commit intomasterfrom
page-subjects-lookup

Conversation

@JeroenDeDauw
Copy link
Copy Markdown
Member

For #789

pageHasMainSubject and pageHasSubjects previously lived on ViewHtmlBuilder, even though neither rendered any HTML. Reaching them via newViewHtmlBuilder() forced consumers (the internal hook code, and external code such as #781's RedHerb sidebar) to traverse a factory named after view-HTML construction to ask a domain question.

SubjectContentRepository was rejected as a destination: SubjectContent is a MediaWiki JsonContent slot wrapper, a persistence detail not in the glossary, and the predicates take/return only domain types.

Introduce Application/PageSubjectsLookup, a small concrete class that depends on the existing SubjectRepository interface and exposes the two predicates against PageId. Both are one-line delegates to PageSubjects::hasSubjects() / hasMainSubject().

Add PageSubjects::hasMainSubject() to mirror the existing hasSubjects() predicate and dedup the recurring getMainSubject() !== null check.

Drop the predicates from ViewHtmlBuilder and remove their tests; the behavior is now covered by PageSubjectsLookupTest.

Addresses one of the two breach points raised in #789. The other (NeoWikiHooks::addNeoWikiModules called from a foreign extension's SpecialPage) lives on the frontend-extensibility branch and will follow up after #754 lands.

Doesn't claim to close #789 — that issue's broader question of whether NeoWiki should commit to a documented PHP API surface is unresolved on the issue thread.

`pageHasMainSubject` and `pageHasSubjects` previously lived on
`ViewHtmlBuilder`, even though neither rendered any HTML. Reaching them
via `newViewHtmlBuilder()` forced consumers (the internal hook code, and
external code such as #781's RedHerb sidebar) to traverse a factory
named after view-HTML construction to ask a domain question.

`SubjectContentRepository` was rejected as a destination: `SubjectContent`
is a MediaWiki `JsonContent` slot wrapper, a persistence detail not in
the glossary, and the predicates take/return only domain types.

Introduce `Application/PageSubjectsLookup`, a small concrete class that
depends on the existing `SubjectRepository` interface and exposes the
two predicates against `PageId`. Both are one-line delegates to
`PageSubjects::hasSubjects()` / `hasMainSubject()`.

Add `PageSubjects::hasMainSubject()` to mirror the existing
`hasSubjects()` predicate and dedup the recurring
`getMainSubject() !== null` check.

Drop the predicates from `ViewHtmlBuilder` and remove their tests; the
behavior is now covered by `PageSubjectsLookupTest`.

Addresses one of the two breach points raised in #789. The other
(`NeoWikiHooks::addNeoWikiModules` called from a foreign extension's
SpecialPage) lives on the `frontend-extensibility` branch and will
follow up after #754 lands.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Establish public PHP API surface for extensions consuming NeoWiki services

1 participant