This commit is contained in:
Kushal SM 2026-06-27 18:17:28 +02:00 committed by GitHub
commit 3a15af4a18
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 48 additions and 1 deletions

View file

@ -3,7 +3,8 @@
class ConferencesController < ApplicationController
protect_from_forgery with: :null_session
before_action :respond_to_options
load_and_authorize_resource find_by: :short_title, except: :show
load_and_authorize_resource find_by: :short_title, except: [:show, :feed]
skip_authorization_check only: :feed
def index
@current = Conference.upcoming.reorder(start_date: :asc)
@ -108,6 +109,13 @@ class ConferencesController < ApplicationController
end
end
def feed
@conferences = Conference.order(created_at: :desc)
respond_to do |format|
format.rss { render layout: false }
end
end
def code_of_conduct; end
private

View file

@ -0,0 +1,18 @@
xml.instruct! :xml, version: "1.0"
xml.rss version: "2.0" do
xml.channel do
xml.title "#{ENV.fetch('OSEM_NAME', 'OSEM')} - Conferences"
xml.description "Conferences from #{ENV.fetch('OSEM_NAME', 'OSEM')}"
xml.link conferences_url
@conferences.each do |conference|
xml.item do
xml.title conference.title
xml.description conference.description
xml.pubDate conference.created_at.to_fs(:rfc822)
xml.link conference_url(conference.short_title)
xml.guid conference_url(conference.short_title)
end
end
end
end

View file

@ -23,6 +23,9 @@
%span.btn-group
= link_to("Days only", calendar_url(protocol: 'webcal', format: 'ics'), class: 'btn btn-default')
= link_to("Detailed", calendar_url(protocol: 'webcal', format: 'ics', full: true), class: 'btn btn-default')
%p
Subscribe to the RSS feed:
= link_to("RSS Feed", feed_url(format: :rss), class: 'btn btn-default')
-content_for :script_body do
:javascript

View file

@ -7,6 +7,7 @@
%meta{content: '', name: 'author'}
= stylesheet_link_tag "application", media: 'all'
= javascript_include_tag "application"
= auto_discovery_link_tag(:rss, feed_url(format: :rss), title: "#{ENV.fetch('OSEM_NAME', 'OSEM')} Conferences RSS Feed")
= csrf_meta_tags
= content_for(:script_head)

View file

@ -216,6 +216,7 @@ Osem::Application.routes.draw do
get '/admin' => redirect('/admin/conferences')
get '/calendar' => 'conferences#calendar'
get '/feed' => 'conferences#feed'
if ENV.fetch('OSEM_ROOT_CONFERENCE', nil)
root to: redirect("/conferences/#{ENV.fetch('OSEM_ROOT_CONFERENCE')}")

View file

@ -49,4 +49,20 @@ describe ConferencesController do
end
end
describe 'GET #feed' do
render_views
it 'returns RSS feed successfully' do
get :feed, format: :rss
expect(response.response_code).to eq(200)
expect(response.content_type).to include('application/rss+xml')
end
it 'includes conference data in the feed' do
conference # trigger let
get :feed, format: :rss
expect(response.body).to include(conference.title)
end
end
end