From 000e358853cd011bcad97ba9d2130b2b86289c38 Mon Sep 17 00:00:00 2001 From: Pablo Vicente Date: Mon, 4 Nov 2013 21:32:49 +0000 Subject: [PATCH 1/5] Get sessions host Issue #11 --- app/models/sessions.rb | 5 +++++ spec/fabricators/sponsor_session_fabricator.rb | 4 ++++ spec/models/sessions_spec.rb | 7 +++++++ 3 files changed, 16 insertions(+) create mode 100644 spec/fabricators/sponsor_session_fabricator.rb diff --git a/app/models/sessions.rb b/app/models/sessions.rb index 2184c9998..08b1f5536 100644 --- a/app/models/sessions.rb +++ b/app/models/sessions.rb @@ -8,4 +8,9 @@ class Sessions < ActiveRecord::Base scope :upcoming, -> { where("date_and_time >= ?", DateTime.now).order(:date_and_time) } scope :next, -> { upcoming.first } + def host + Sponsor.joins(:sponsor_sessions) + .where('sponsor_sessions.host = ?', true) + .where('sponsor_sessions.sessions_id = ?', self.id).first + end end diff --git a/spec/fabricators/sponsor_session_fabricator.rb b/spec/fabricators/sponsor_session_fabricator.rb new file mode 100644 index 000000000..369665572 --- /dev/null +++ b/spec/fabricators/sponsor_session_fabricator.rb @@ -0,0 +1,4 @@ +Fabricator(:sponsor_session) do + sponsor + sessions +end \ No newline at end of file diff --git a/spec/models/sessions_spec.rb b/spec/models/sessions_spec.rb index ed3b0e117..a509ce3aa 100644 --- a/spec/models/sessions_spec.rb +++ b/spec/models/sessions_spec.rb @@ -25,6 +25,13 @@ it "#next" do Sessions.next.should eq set_upcoming.first end + + describe "#host" do + let(:sponsor) { Fabricate(:sponsor) } + before { Fabricate(:sponsor_session, sponsor: sponsor, sessions: session, host: true) } + + it { expect(session.host).to eq(sponsor) } + end end it "#attending" do From 635ae294f9e7b71636282cedef03f2e421ae871c Mon Sep 17 00:00:00 2001 From: Pablo Vicente Date: Tue, 5 Nov 2013 00:06:24 +0000 Subject: [PATCH 2/5] Ensures sponsor_session has only one host per session Issue #11 --- app/models/sponsor_session.rb | 2 ++ spec/fabricators/sponsor_session_fabricator.rb | 4 ++++ spec/models/sponsor_session_spec.rb | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 spec/models/sponsor_session_spec.rb diff --git a/app/models/sponsor_session.rb b/app/models/sponsor_session.rb index 2ff260e40..d25da9f13 100644 --- a/app/models/sponsor_session.rb +++ b/app/models/sponsor_session.rb @@ -2,4 +2,6 @@ class SponsorSession < ActiveRecord::Base belongs_to :sponsor belongs_to :sessions + validates :host, uniqueness: { scope: :sessions_id } + end diff --git a/spec/fabricators/sponsor_session_fabricator.rb b/spec/fabricators/sponsor_session_fabricator.rb index 369665572..a24e5e4a0 100644 --- a/spec/fabricators/sponsor_session_fabricator.rb +++ b/spec/fabricators/sponsor_session_fabricator.rb @@ -1,4 +1,8 @@ Fabricator(:sponsor_session) do sponsor sessions +end + +Fabricator(:hosted_session, from: :sponsor_session) do + host true end \ No newline at end of file diff --git a/spec/models/sponsor_session_spec.rb b/spec/models/sponsor_session_spec.rb new file mode 100644 index 000000000..6b5045348 --- /dev/null +++ b/spec/models/sponsor_session_spec.rb @@ -0,0 +1,18 @@ +require 'spec_helper' + +describe SponsorSession do + subject(:sponsor_session) { Fabricate(:hosted_session) } + + context 'when the session has more than one host' do + let(:other_sponsor) { Fabricate(:sponsor) } + + let(:anohter_host_session) do + Fabricate.build(:sponsor_session, + sponsor: other_sponsor, + sessions: sponsor_session.sessions, + host: true) + end + + it { anohter_host_session.should have(1).error_on(:host) } + end +end \ No newline at end of file From 3f232e3b6a53e296fb6e1a85e8f30a15d9bb7739 Mon Sep 17 00:00:00 2001 From: Pablo Vicente Date: Tue, 5 Nov 2013 00:29:04 +0000 Subject: [PATCH 3/5] Fixes typo and split long sentence to block Issue #11 --- spec/models/sessions_spec.rb | 4 +++- spec/models/sponsor_session_spec.rb | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/spec/models/sessions_spec.rb b/spec/models/sessions_spec.rb index a509ce3aa..29ec041f5 100644 --- a/spec/models/sessions_spec.rb +++ b/spec/models/sessions_spec.rb @@ -28,7 +28,9 @@ describe "#host" do let(:sponsor) { Fabricate(:sponsor) } - before { Fabricate(:sponsor_session, sponsor: sponsor, sessions: session, host: true) } + before do + Fabricate(:sponsor_session, sponsor: sponsor, sessions: session, host: true) + end it { expect(session.host).to eq(sponsor) } end diff --git a/spec/models/sponsor_session_spec.rb b/spec/models/sponsor_session_spec.rb index 6b5045348..589bba4d5 100644 --- a/spec/models/sponsor_session_spec.rb +++ b/spec/models/sponsor_session_spec.rb @@ -6,13 +6,13 @@ context 'when the session has more than one host' do let(:other_sponsor) { Fabricate(:sponsor) } - let(:anohter_host_session) do + let(:another_host_session) do Fabricate.build(:sponsor_session, sponsor: other_sponsor, sessions: sponsor_session.sessions, host: true) end - it { anohter_host_session.should have(1).error_on(:host) } + it { another_host_session.should have(1).error_on(:host) } end end \ No newline at end of file From fe68e41f8c998baf9dccfe43dea5b950f7e8bad9 Mon Sep 17 00:00:00 2001 From: Pablo Vicente Date: Tue, 5 Nov 2013 18:14:33 +0000 Subject: [PATCH 4/5] Moves and splits sessions host query to sponsor_sessions scopes Issue #11 --- app/models/sessions.rb | 4 +--- app/models/sponsor_session.rb | 2 ++ spec/models/sponsor_session_spec.rb | 14 ++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/models/sessions.rb b/app/models/sessions.rb index 08b1f5536..c32ce5884 100644 --- a/app/models/sessions.rb +++ b/app/models/sessions.rb @@ -9,8 +9,6 @@ class Sessions < ActiveRecord::Base scope :next, -> { upcoming.first } def host - Sponsor.joins(:sponsor_sessions) - .where('sponsor_sessions.host = ?', true) - .where('sponsor_sessions.sessions_id = ?', self.id).first + SponsorSession.hosts.for_session(self.id).first.sponsor end end diff --git a/app/models/sponsor_session.rb b/app/models/sponsor_session.rb index d25da9f13..a05828e22 100644 --- a/app/models/sponsor_session.rb +++ b/app/models/sponsor_session.rb @@ -4,4 +4,6 @@ class SponsorSession < ActiveRecord::Base validates :host, uniqueness: { scope: :sessions_id } + scope :hosts, -> { where('sponsor_sessions.host = ?', true) } + scope :for_session, ->(session_id) { where('sponsor_sessions.sessions_id = ?', session_id) } end diff --git a/spec/models/sponsor_session_spec.rb b/spec/models/sponsor_session_spec.rb index 589bba4d5..4809e56c5 100644 --- a/spec/models/sponsor_session_spec.rb +++ b/spec/models/sponsor_session_spec.rb @@ -15,4 +15,18 @@ it { another_host_session.should have(1).error_on(:host) } end + + context '#scopes' do + let!(:hosted_session) { Fabricate(:hosted_session) } + + it '#hosts' do + expect(SponsorSession.hosts.length).to eq(1) + end + + describe '#for_session' do + let(:session) { hosted_session.sessions } + + it { expect(SponsorSession.for_session(session.id).length).to eq(1) } + end + end end \ No newline at end of file From a244e3a5fdb183f73387493db63b30832454062b Mon Sep 17 00:00:00 2001 From: Pablo Vicente Date: Thu, 7 Nov 2013 18:32:09 +0000 Subject: [PATCH 5/5] Adds avatar to sponsor Issue #11 --- app/models/sponsor.rb | 2 +- db/migrate/20131107182457_add_avatar_to_sponsor.rb | 5 +++++ db/schema.rb | 3 ++- spec/fabricators/sponsor_fabricator.rb | 1 + spec/models/sponsor_spec.rb | 12 ++++++++++-- 5 files changed, 19 insertions(+), 4 deletions(-) create mode 100644 db/migrate/20131107182457_add_avatar_to_sponsor.rb diff --git a/app/models/sponsor.rb b/app/models/sponsor.rb index 3c8a219a5..48d35381b 100644 --- a/app/models/sponsor.rb +++ b/app/models/sponsor.rb @@ -3,5 +3,5 @@ class Sponsor < ActiveRecord::Base has_many :sponsor_sessions has_many :sessions, through: :sponsor_sessions - validates :name, :description, :address, presence: true + validates :name, :description, :address, :avatar, presence: true end \ No newline at end of file diff --git a/db/migrate/20131107182457_add_avatar_to_sponsor.rb b/db/migrate/20131107182457_add_avatar_to_sponsor.rb new file mode 100644 index 000000000..39953f142 --- /dev/null +++ b/db/migrate/20131107182457_add_avatar_to_sponsor.rb @@ -0,0 +1,5 @@ +class AddAvatarToSponsor < ActiveRecord::Migration + def change + add_column :sponsors, :avatar, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 2bed75bc2..53a28dfa0 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20131104030726) do +ActiveRecord::Schema.define(version: 20131107182457) do create_table "addresses", force: true do |t| t.string "flat" @@ -124,6 +124,7 @@ t.text "description" t.datetime "created_at" t.datetime "updated_at" + t.string "avatar" end end diff --git a/spec/fabricators/sponsor_fabricator.rb b/spec/fabricators/sponsor_fabricator.rb index 006d8c329..c9edc15d7 100644 --- a/spec/fabricators/sponsor_fabricator.rb +++ b/spec/fabricators/sponsor_fabricator.rb @@ -1,5 +1,6 @@ Fabricator(:sponsor) do name { Faker::Name.name } description { Faker::Lorem.paragraph } + avatar { Faker::Internet.url } address { Fabricate(:address) } end diff --git a/spec/models/sponsor_spec.rb b/spec/models/sponsor_spec.rb index a10b767d4..6daf6d531 100644 --- a/spec/models/sponsor_spec.rb +++ b/spec/models/sponsor_spec.rb @@ -6,8 +6,9 @@ it { should respond_to(:name) } it { should respond_to(:description) } it { should respond_to(:address) } - it { should respond_to(:sessions)} - it { should respond_to(:sponsor_sessions)} + it { should respond_to(:sessions) } + it { should respond_to(:sponsor_sessions) } + it { should respond_to(:avatar) } it { should be_valid } context 'validations' do @@ -30,6 +31,13 @@ it { should_not be_valid} it { should have(1).error_on(:address) } end + + describe '#avatar' do + before { sponsor.avatar = nil } + + it{ should_not be_valid } + it{ should have(1).error_on(:avatar) } + end end end