No application code reads ENV, and the wiki has one address again
The API read its environment wherever it happened to need it: `Image` in the model, `RssService` and `WikiService` in class-level constants, the softwares admin page in a sidebar. Two of those wanted the same wiki and disagreed about its name — `RssService::WIKI_URL` against `WikiService::GRAV_URL` — and only the second one is set in docker-compose, so the howtos feed had been linking to the hard-coded default all along. Every `ENV` read is in `config/application.rb` now, as `config.x.site_url`, `config.x.wiki_url` and `config.x.images.container_path`, and the code asks `Rails.configuration.x`. One place says what this app needs from its environment, and a test can override it. `RssService` was three copies of the same twenty-line `RSS::Maker` block. It is `Rss::Feed` plus `Rss::BlogFeed`, `Rss::ReleasesFeed` and `Rss::HowtosFeed`, each of which now only answers what its title, its link and its items are — and the `Time.parse(...) rescue Time.current` modifier, which swallowed everything, is a rescue of ArgumentError and TypeError. `WikiService` becomes `Wiki::Pages` and loses `alias_method :pages, :index`: two names for one method meant the controller and the feeds each called it something different. The admin cookie was a monkey patch — `ApplicationController.class_eval` in an initializer, adding an `after_action` that the three-line controller file gave no hint of. It is a `SyncsAdminCookie` concern the controller includes. And the engine stops reading the host's config keys: the "View on site" link in the softwares admin asked for `Rails.configuration.x.site_url`, which is ours, not its. `c.site_url` is an engine setting now, nil by default, and the link is left out when the host does not set it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,5 +25,9 @@ module Api
|
||||
config.action_controller.forgery_protection_origin_check = false
|
||||
|
||||
config.autoload_lib(ignore: %w[assets tasks])
|
||||
|
||||
config.x.site_url = ENV.fetch("SITE_URL", "https://teletypegames.org")
|
||||
config.x.wiki_url = ENV.fetch("WIKI_GRAV_URL", "https://wiki.teletypegames.org")
|
||||
config.x.images.container_path = ENV.fetch("IMAGE_CONTAINER_PATH", "/images")
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
Rails.application.config.to_prepare do
|
||||
ApplicationController.class_eval do
|
||||
after_action :sync_admin_cookie
|
||||
|
||||
private
|
||||
|
||||
def sync_admin_cookie
|
||||
if current_admin_user
|
||||
cookies[:is_admin] = { value: "1", httponly: false, same_site: :lax, path: "/" }
|
||||
elsif cookies[:is_admin]
|
||||
cookies.delete(:is_admin, path: "/")
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -6,6 +6,8 @@ Rails.application.config.to_prepare do
|
||||
|
||||
c.image_class_name = "Image"
|
||||
|
||||
c.site_url = Rails.configuration.x.site_url
|
||||
|
||||
c.ci_adapter = WarpEngine::CI::Woodpecker::Adapter.new(
|
||||
url: ENV["WOODPECKER_URL"],
|
||||
api_token: ENV["WOODPECKER_API_TOKEN"],
|
||||
|
||||
Reference in New Issue
Block a user