Add a json export of the schedule

This commit is contained in:
Petko Bordjukov 2014-10-31 12:54:11 +02:00
parent 26e523dc2f
commit b5cd1ff8f1
5 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,25 @@
class Schedule
include ActiveModel::Model
attr_accessor :hall, :slots
def self.for_conference(conference)
schedule = {}
conference.halls.each do |hall|
schedule[hall.id] = hall.slots.includes(:event, event: [:speakers]).where('starts_at < ?', Date.tomorrow).where.not(event_id: nil).order(:starts_at).map do |slot|
{
title: slot.event.title,
subtitle: slot.event.subtitle,
startTime: slot.starts_at,
endTime: slot.ends_at,
speakers: slot.event.speakers.map do |speaker|
{
name: speaker.name,
description: speaker.biography
}
end
}
end
end
schedule
end
end

View File

@ -0,0 +1,10 @@
class SchedulesController < ApplicationController
def show
@schedule = Schedule.for_conference Conference.current
headers['Access-Control-Allow-Origin'] = '*'
headers['Access-Control-Allow-Methods'] = 'POST, GET, OPTIONS'
headers['Access-Control-Max-Age'] = "1728000"
respond_to { |format| format.json { render json: @schedule.to_json } }
end
end

View File

@ -11,6 +11,7 @@ class Conference < ActiveRecord::Base
has_many :tracks, -> { order('id asc') } has_many :tracks, -> { order('id asc') }
has_many :events, through: :tracks has_many :events, through: :tracks
has_many :candidate_speakers, through: :events has_many :candidate_speakers, through: :events
has_many :halls
scope :future, -> { where('start_date >= ?', Date.today).order('start_date ASC') } scope :future, -> { where('start_date >= ?', Date.today).order('start_date ASC') }

View File

@ -1,3 +1,4 @@
class Hall < ActiveRecord::Base class Hall < ActiveRecord::Base
belongs_to :conference belongs_to :conference
has_many :slots
end end

View File

@ -11,6 +11,8 @@ Rails.application.routes.draw do
end end
end end
resource :schedule, only: [:show]
devise_for :users, controllers: {registrations: 'registrations', sessions: 'sessions'} devise_for :users, controllers: {registrations: 'registrations', sessions: 'sessions'}
namespace :management do namespace :management do