From a578167cf5dd8731eb1d6def624c4097bdf08413 Mon Sep 17 00:00:00 2001 From: Ana Date: Mon, 1 Aug 2016 21:25:12 +0200 Subject: [PATCH] Event model improvements - Drop selected_event_schedule function - Rename scheduled_room and scheduled_start_time to room and time as if there is no selected_schedule, the event is not scheduled. --- app/controllers/proposal_controller.rb | 2 +- app/controllers/schedules_controller.rb | 2 +- app/models/event.rb | 21 ++++++++----------- app/serializers/event_serializer.rb | 8 +++---- app/views/admin/events/_proposal.html.haml | 8 +++---- .../admin/events/registrations.html.haml | 2 +- app/views/admin/tracks/show.html.haml | 2 +- .../_registration_info.html.haml | 2 +- app/views/proposal/_proposal_form.html.haml | 2 +- app/views/proposal/show.html.haml | 4 ++-- app/views/schedules/show.xml.haml | 6 +++--- spec/controllers/schedules_controller_spec.rb | 4 ++-- spec/serializers/event_serializer_spec.rb | 4 ++-- 13 files changed, 32 insertions(+), 35 deletions(-) diff --git a/app/controllers/proposal_controller.rb b/app/controllers/proposal_controller.rb index e9cd028e..b798dea1 100644 --- a/app/controllers/proposal_controller.rb +++ b/app/controllers/proposal_controller.rb @@ -15,7 +15,7 @@ class ProposalController < ApplicationController def show # FIXME: We should show more than the first speaker @speaker = @event.speakers.first || @event.submitter - @event_schedule = @event.selected_event_schedule + @event_schedule = @event.event_schedules.find_by(schedule_id: @program.selected_schedule_id) end def new diff --git a/app/controllers/schedules_controller.rb b/app/controllers/schedules_controller.rb index 4054d52f..91559aa1 100644 --- a/app/controllers/schedules_controller.rb +++ b/app/controllers/schedules_controller.rb @@ -11,7 +11,7 @@ class SchedulesController < ApplicationController redirect_to events_conference_schedule_path(@conference.short_title) end - @events_xml = schedules.map(&:event).group_by{ |event| event.scheduled_start_time.to_date } if schedules + @events_xml = schedules.map(&:event).group_by{ |event| event.time.to_date } if schedules @dates = @conference.start_date..@conference.end_date @step_minutes = EventType::LENGTH_STEP.minutes @conf_start = 9 diff --git a/app/models/event.rb b/app/models/event.rb index 29c3810f..dfc5f664 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -75,7 +75,7 @@ class Event < ActiveRecord::Base # ====Returns # * +true+ or +false+ def scheduled? - selected_event_schedule.present? + event_schedules.find_by(schedule_id: program.selected_schedule_id).present? end def registration_possible? @@ -234,20 +234,17 @@ class Event < ActiveRecord::Base ## # Returns the room in which the event is scheduled # - def scheduled_room - selected_event_schedule.try(:room) + def room + # We use try(:selected_schedule_id) because this function is used for + # validations so program could not be present there + event_schedules.find_by(schedule_id: program.try(:selected_schedule_id)).try(:room) end ## # Returns the start time at which this event is scheduled # - def scheduled_start_time - selected_event_schedule.try(:start_time) - end - - # returns the event_schedule for this event and for the selected_schedule - def selected_event_schedule - event_schedules.find_by(schedule_id: program.try(:selected_schedule_id)) + def time + event_schedules.find_by(schedule_id: program.selected_schedule_id).try(:start_time) end private @@ -255,8 +252,8 @@ class Event < ActiveRecord::Base ## # Do not allow, for the event, more attendees than the size of the room def max_attendees_no_more_than_room_size - return unless scheduled_room && max_attendees_changed? - errors.add(:max_attendees, "cannot be more than the room's capacity (#{scheduled_room.size})") if max_attendees && (max_attendees > scheduled_room.size) + return unless room && max_attendees_changed? + errors.add(:max_attendees, "cannot be more than the room's capacity (#{room.size})") if max_attendees && (max_attendees > room.size) end def abstract_limit diff --git a/app/serializers/event_serializer.rb b/app/serializers/event_serializer.rb index f9c0e2a6..355d2eb7 100644 --- a/app/serializers/event_serializer.rb +++ b/app/serializers/event_serializer.rb @@ -1,10 +1,10 @@ class EventSerializer < ActiveModel::Serializer include ActionView::Helpers::TextHelper - attributes :guid, :title, :length, :scheduled_date, :language, :abstract, :speaker_ids, :type, :scheduled_room, :track + attributes :guid, :title, :length, :scheduled_date, :language, :abstract, :speaker_ids, :type, :room, :track def scheduled_date - t = object.scheduled_start_time + t = object.time t.blank? ? '' : %( #{I18n.l t, format: :short}#{t.formatted_offset(false)} ) end @@ -17,8 +17,8 @@ class EventSerializer < ActiveModel::Serializer object.event_type.try(:title) end - def scheduled_room - object.scheduled_room.try(:guid) + def room + object.room.try(:guid) end def track diff --git a/app/views/admin/events/_proposal.html.haml b/app/views/admin/events/_proposal.html.haml index 9877250c..4414dee6 100644 --- a/app/views/admin/events/_proposal.html.haml +++ b/app/views/admin/events/_proposal.html.haml @@ -106,18 +106,18 @@ %td = @event.language - - unless @event.scheduled_room.nil? + - unless @event.room.nil? %tr %td %b Room %td - = @event.scheduled_room.name - - unless @event.scheduled_start_time.nil? + = @event.room.name + - unless @event.time.nil? %tr %td %b Scheduled time %td - = @event.scheduled_start_time + = @event.time %tr %td %b Submitter diff --git a/app/views/admin/events/registrations.html.haml b/app/views/admin/events/registrations.html.haml index 4a8d27bd..21042349 100644 --- a/app/views/admin/events/registrations.html.haml +++ b/app/views/admin/events/registrations.html.haml @@ -11,7 +11,7 @@ for = @event.title - - if @event.scheduled_room && (@event_registrations.length > @event.scheduled_room.size) + - if @event.room && (@event_registrations.length > @event.room.size) %b Attention: You have more registrations than the capacity of the room! diff --git a/app/views/admin/tracks/show.html.haml b/app/views/admin/tracks/show.html.haml index 18dca9c7..3acb8471 100644 --- a/app/views/admin/tracks/show.html.haml +++ b/app/views/admin/tracks/show.html.haml @@ -27,4 +27,4 @@ %td = event.state %td - = event.scheduled_start_time + = event.time diff --git a/app/views/conference_registrations/_registration_info.html.haml b/app/views/conference_registrations/_registration_info.html.haml index 672e2911..5cdeb536 100644 --- a/app/views/conference_registrations/_registration_info.html.haml +++ b/app/views/conference_registrations/_registration_info.html.haml @@ -11,7 +11,7 @@ .text-muted = registered_text(event) - if event.scheduled? - (Scheduled on: #{event.scheduled_start_time.to_date}) + (Scheduled on: #{event.time.to_date}) %br diff --git a/app/views/proposal/_proposal_form.html.haml b/app/views/proposal/_proposal_form.html.haml index fd46b220..4df88438 100644 --- a/app/views/proposal/_proposal_form.html.haml +++ b/app/views/proposal/_proposal_form.html.haml @@ -49,7 +49,7 @@ = f.inputs 'Enable pre-registration' do = f.input :require_registration, label: 'Require participants to register to your event' - - message = @event.scheduled_room ? "Value must be between 1 and #{@event.scheduled_room.size}" : 'Check room capacity after scheduling.' + - message = @event.room ? "Value must be between 1 and #{@event.room.size}" : 'Check room capacity after scheduling.' = f.input :max_attendees, hint: 'The maximum number of participants. ' + message - if current_user.has_any_role? :admin, { name: :organizer, resource: @conference }, { name: :cfp, resource: @conference } diff --git a/app/views/proposal/show.html.haml b/app/views/proposal/show.html.haml index 4537450f..e350164a 100644 --- a/app/views/proposal/show.html.haml +++ b/app/views/proposal/show.html.haml @@ -75,8 +75,8 @@ .col-md-12 %dt Room: %dd - - if @event.scheduled_room - = @event.scheduled_room.name + - if @event.room + = @event.room.name .col-md-12 %dt Conference: %dd= @event.program.conference.title diff --git a/app/views/schedules/show.xml.haml b/app/views/schedules/show.xml.haml index 72c6ca88..953a331f 100644 --- a/app/views/schedules/show.xml.haml +++ b/app/views/schedules/show.xml.haml @@ -16,10 +16,10 @@ %room{ name: room.name } - events_in_rooms[room].each do |event| %event{ guid: event.guid, id: event.id } - %date= event.scheduled_start_time.iso8601 - %start= event.scheduled_start_time.strftime('%H:%M') + %date= event.time.iso8601 + %start= event.time.strftime('%H:%M') %duration= length_timestamp(event.event_type.length) - %room= event.scheduled_room.name + %room= event.room.name %type= event.event_type.name %language= ISO_639.find_by_english_name(event.language).third if event.language %slug= "#{event.id} #{event.title}".parameterize diff --git a/spec/controllers/schedules_controller_spec.rb b/spec/controllers/schedules_controller_spec.rb index 35c3603a..975ea92e 100644 --- a/spec/controllers/schedules_controller_spec.rb +++ b/spec/controllers/schedules_controller_spec.rb @@ -16,8 +16,8 @@ describe SchedulesController do it 'assigns variables' do expect(assigns(:conference)).to eq conference - expect(assigns(:events_xml)).to eq conference.selected_event_schedules.map(&:event) - .group_by{ |event| event.scheduled_start_time.to_date } + expect(assigns(:events_xml)).to eq conference.program.selected_event_schedules.map(&:event) + .group_by{ |event| event.time.to_date } end it 'renders successfully' do diff --git a/spec/serializers/event_serializer_spec.rb b/spec/serializers/event_serializer_spec.rb index 979f8b5d..e4f96e53 100644 --- a/spec/serializers/event_serializer_spec.rb +++ b/spec/serializers/event_serializer_spec.rb @@ -15,7 +15,7 @@ describe EventSerializer, type: :serializer do abstract: '

Lorem ipsum dolor sit amet

', speaker_ids: [], type: 'Example Event Type', - scheduled_room: nil, + room: nil, track: nil } }.to_json @@ -47,7 +47,7 @@ describe EventSerializer, type: :serializer do abstract: '

Lorem ipsum dolor sit amet

', speaker_ids: [speaker.user.id], type: 'Example Event Type', - scheduled_room: room.guid, + room: room.guid, track: track.guid } }.to_json