설정값이 TC(테마 컴포넌트)에서 변경 불가능(immutable)하므로, Ruby 플러그인에서도 마찬가지라고 잘못 추측했습니다. 해당 방법을 시도해 보겠습니다.
TC에서 설정값을 편집할 수 있으면 좋겠습니다. 현재 저는 플러그인을 통해 이를 해결하고 있는데, 제 사용 사례는 기본적으로 모든 카테고리의 모든 주제와 게시글을 가져와서 특정 작업을 수행하는 것입니다. 하지만 보호된 카테고리(예: excluded_categories 설정)는 포함하지 않기를 원합니다.
만약 설정에 보호된 카테고리를 추가할 수 있고, 이후에 이를 접근할 수 있다면 더 쉬울 것입니다. 이렇게 하면 관리자가 원할 경우 설정에서 해당 카테고리를 제거함으로써 보호된 카테고리를 포함시킬 수 있습니다.
@pfaffman의 아이디어로는 아마도 구현할 수 있겠지만, TC에서는 불가능할 것입니다.
토픽과 게시물을 가져와 GitHub에 마크다운 파일로 게시하는 플러그인(아카이브와 유사하게)을 개발하고 있습니다.
하지만 '비공개’이므로 비공개 카테고리(지금은 이가 올바른 용어인 것 같네요)를 포함하고 싶지 않습니다.
따라서, 사전에 비공개 카테고리가 무엇인지 알 수 없으므로 default 매개변수로 정의할 수 없는 비공개 카테고리 목록으로 설정값을 미리 채우는 방법을 찾고 있습니다.
만약 Ruby에서 SiteSetting을 직접 변경하여 이를 수행할 수 있다면, 테마 컴포넌트(Theme Component)의 settings에도 동일한 작업을 수행할 수 있을까요? 후자가 불변(immutable)이라고 꽤 확신합니다. 테마 컴포넌트에서 이를 변경할 수 있는 방법이 있을까요?
제가 이해한 바로는, 이 “private” 카테고리들을 가져오기 위해 Category.where(...) 메서드를 사용하시는 건 맞나요? 하지만 관리자가 (일부) 카테고리를 포함하려고 한다면 어떻게 해야 할까요? 코드에서 정의된 “private” 카테고리들을 상쇄하는 include categories 설정이 필요할까요? 그렇게 하면 역효과가 나는 건 아닌가요?
A, B, C, D, E라는 5개의 카테고리가 있다고 가정해 보겠습니다. 이제 B와 C가 일부 그룹에만 사용 가능하다고 가정해 보겠습니다. 저장소에 업로드할 때 이곳의 비공개 주제가 공유되지 않도록 방지하기 위해, B와 C를 excluded_categories 설정에 추가합니다. #staff 같은 다른 항목들도 함께 추가하는 식이죠.
이제 사이트 관리자가 B의 주제가 공유되는 것에 문제가 없다고 판단하면, C는 설정에 그대로 두면서 B만 설정에서 제거할 수 있습니다.
따라서 excluded_categories는 시작 시점에 “비공개” 카테고리인 B와 C를 추가하도록 변경되어야 합니다. 이게 말이 되는지 잘 모르겠습니다.
기술적으로는 완전히 가능하지만, 이 접근 방식은 지나치게 복잡하다고 생각합니다. 특히 "시작 시점"을 정의하거나 감지하기가 어렵고, 사이트 관리자가 B를 제거한 후 플러그인이 다시 추가하는 상황을 피해야 하기 때문입니다. 또한 새로운 비공개 카테고리가 추가될 때 플러그인이 설정에 해당 항목을 추가해야 하지만, 새로운 카테고리(추가)와 관리자가 이전에 제거한 카테고리(다시 추가하지 않음)를 구별할 수 있어야 합니다.
저는 include_private_categories 설정을 사용하는 것을 권장합니다. 이 설정은 기본적으로 비어 있으며, 플러그인은 모든 공개 카테고리뿐 아니라 include_private_categories에 포함된 카테고리를 처리하면 됩니다. 이렇게 하면 훨씬 덜 골치가 아플 것입니다.
또한 기능적인 관점에서 보면, 어떤 비공개 카테고리가 공유되고 있는지 파악하기가 더 쉬워집니다. (제안하신 방식에서는 머릿속에 카테고리 목록을 떠올린 뒤, 설정에 있는 목록과 비교하여 누락된 항목을 찾아야 합니다.)