From b4dd8c8d2213298b01a23a847dc843c546218f81 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 15 Jul 2014 23:33:12 +0200 Subject: [PATCH 1/4] Move the footer further down to separate it more from the content --- app/assets/stylesheets/osem.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/assets/stylesheets/osem.css b/app/assets/stylesheets/osem.css index e9af8f12..7ad9dba9 100644 --- a/app/assets/stylesheets/osem.css +++ b/app/assets/stylesheets/osem.css @@ -4,8 +4,8 @@ html { } body { - /* Margin bottom by footer height */ - margin-bottom: 60px; + /* Margin bottom by 2 times the footer height */ + margin-bottom: 120px; /* Margin bottom by navbar height */ padding-top: 60px; } From a76fa8dd59f89415251da8373f04aba8cc59f57c Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Tue, 15 Jul 2014 23:38:47 +0200 Subject: [PATCH 2/4] Fix the layout of the sign in box --- app/views/layouts/_navigation.html.haml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/app/views/layouts/_navigation.html.haml b/app/views/layouts/_navigation.html.haml index ca2df504..31065a46 100644 --- a/app/views/layouts/_navigation.html.haml +++ b/app/views/layouts/_navigation.html.haml @@ -45,12 +45,17 @@ = form_tag user_session_path do = text_field_tag 'user[email]', nil, id: 'user_email_dd' = password_field_tag 'user[password]', nil, id: 'user_password_dd' - %label.checkbox - = check_box_tag 'user[remember_me]' - Remember me - %button.btn.btn-block Sign in - %br - = link_to "Forgot your password?", new_password_path('user') - = link_to 'Sign in with openID', new_user_session_path + %p.text-right + %small + Remember me + = check_box_tag 'user[remember_me]' + %button.btn.btn-success.btn-block Sign in + %p + %small + %ul.list-unstyled + %li + = link_to "Forgot your password?", new_password_path('user') + %li + = link_to 'Sign in with openID', new_user_session_path %li.hidden-lg = link_to('Sign In', new_user_session_path) From 064e0a3fd753875d39c8aa6e461f6c7d0d5694cb Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Wed, 16 Jul 2014 00:01:40 +0200 Subject: [PATCH 3/4] Create default event_types. More event validations. Fixes #319 --- app/models/conference.rb | 16 +++++++++++++++- app/models/event.rb | 16 ++++++++-------- app/models/event_type.rb | 3 +++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/app/models/conference.rb b/app/models/conference.rb index 67b756ba..953fb9a4 100644 --- a/app/models/conference.rb +++ b/app/models/conference.rb @@ -91,6 +91,7 @@ class Conference < ActiveRecord::Base validates_format_of :short_title, :with => /\A[a-zA-Z0-9_-]*\z/ before_create :generate_guid before_create :create_venue + before_create :create_event_types before_create :create_email_settings before_create :add_color @@ -696,13 +697,26 @@ class Conference < ActiveRecord::Base end ## - # Creates a venue and sets self.venue_id to it's id. Used as before_create. + # Creates a Venue for this Conference. Used as before_create. # def create_venue self.venue_id = Venue.create.id true end + ## + # Creates default EventTypes for this Conference. Used as before_create. + # + def create_event_types + event_types << EventType.create(title: 'Talk', length: 30, color: '#FF0000', + minimum_abstract_length: 0, + maximum_abstract_length: 500) + event_types << EventType.create(title: 'Workshop', length: 60, color: '#0000FF', + minimum_abstract_length: 0, + maximum_abstract_length: 500) + true + end + ## # Creates a EmailSettings association proxy. Used as before_create. # diff --git a/app/models/event.rb b/app/models/event.rb index 85ffa892..078b512e 100644 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -33,7 +33,8 @@ class Event < ActiveRecord::Base validate :biography_exists validates :title, presence: true validates :abstract, presence: true - validates :media_type, allow_nil: true, inclusion: { in: Conference.media_types.values } + validates :event_type, presence: true + validates :media_type, inclusion: { in: Conference.media_types.values }, allow_blank: true scope :confirmed, -> { where(state: 'confirmed') } @@ -181,15 +182,14 @@ class Event < ActiveRecord::Base private def abstract_limit + # If we don't have an event type, there is no need to count anything + return unless event_type len = abstract.split.size - max = event_type.maximum_abstract_length - min = event_type.minimum_abstract_length + max_words = event_type.maximum_abstract_length + min_words = event_type.minimum_abstract_length - if len < min - errors.add(:abstract, "cannot have less than #{min} words") - end - - errors.add(:abstract, "cannot have more than #{max} words") if len > max + errors.add(:abstract, "cannot have less than #{min_words} words") if len < min_words + errors.add(:abstract, "cannot have more than #{max_words} words") if len > max_words end def biography_exists diff --git a/app/models/event_type.rb b/app/models/event_type.rb index 26236b11..dfa81a71 100644 --- a/app/models/event_type.rb +++ b/app/models/event_type.rb @@ -3,7 +3,10 @@ class EventType < ActiveRecord::Base belongs_to :conference + validates :title, presence: true validates :length, :numericality => {:greater_than => 0} + validates :minimum_abstract_length, presence: true + validates :maximum_abstract_length, presence: true alias_attribute :name, :title end From 1d3c84c24d258b0c02e1a9f41bf47a9dd0c18f27 Mon Sep 17 00:00:00 2001 From: Henne Vogelsang Date: Wed, 16 Jul 2014 14:11:09 +0200 Subject: [PATCH 4/4] Make the spec aware of our new default event_types --- spec/features/event_types_spec.rb | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/spec/features/event_types_spec.rb b/spec/features/event_types_spec.rb index 589f7daa..c900c65d 100644 --- a/spec/features/event_types_spec.rb +++ b/spec/features/event_types_spec.rb @@ -13,42 +13,45 @@ feature EventType do visit admin_conference_eventtypes_path( conference_id: conference.short_title) + expect(page.all('div.nested-fields').count == 2).to be true # Add event type click_link 'Add event_type' - expect(page.all('div.nested-fields').count == 1).to be true + expect(page.all('div.nested-fields').count == 3).to be true page. - find('div.nested-fields:nth-of-type(1) div:nth-of-type(1) input'). + find('div.nested-fields:nth-of-type(3) div:nth-of-type(1) input'). set('Example event type') page. - find('div.nested-fields:nth-of-type(1) div:nth-of-type(2) input'). + find('div.nested-fields:nth-of-type(3) div:nth-of-type(2) input'). set('60') page. - find('div.nested-fields:nth-of-type(1) div:nth-of-type(3) input'). + find('div.nested-fields:nth-of-type(3) div:nth-of-type(3) input'). set('0') page. - find('div.nested-fields:nth-of-type(1) div:nth-of-type(4) input'). + find('div.nested-fields:nth-of-type(3) div:nth-of-type(4) input'). set('300') click_button 'Update Conference' # Validations expect(flash).to eq('Event types were successfully updated.') - expect(find('div.nested-fields:nth-of-type(1) div:nth-of-type(1) input'). + expect(find('div.nested-fields:nth-of-type(3) div:nth-of-type(1) input'). value).to eq('Example event type') - expect(find('div.nested-fields:nth-of-type(1) div:nth-of-type(2) input'). + expect(find('div.nested-fields:nth-of-type(3) div:nth-of-type(2) input'). value).to eq('60') - expect(find('div.nested-fields:nth-of-type(1) div:nth-of-type(3) input'). + expect(find('div.nested-fields:nth-of-type(3) div:nth-of-type(3) input'). value).to eq('0') - expect(find('div.nested-fields:nth-of-type(1) div:nth-of-type(4) input'). + expect(find('div.nested-fields:nth-of-type(3) div:nth-of-type(4) input'). value).to eq('300') # Remove event type - click_link 'Remove event_type' - expect(page.all('div.nested-fields').count == 0).to be true + within("div.nested-fields:nth-of-type(3)") do + click_link 'Remove event_type' + end + expect(page.all('div.nested-fields').count == 2).to be true click_button 'Update Conference' expect(flash).to eq('Event types were successfully updated.') - expect(page.all('div.nested-fields').count == 0).to be true + expect(page.all('div.nested-fields').count == 2).to be true end end