Skip to content

Commit eec4976

Browse files
committed
WIP: Fixed error in the user/membership team relationship
1 parent 2ce02e1 commit eec4976

File tree

3 files changed

+35
-20
lines changed

3 files changed

+35
-20
lines changed

app/models/team.rb

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ class Team < ActiveRecord::Base
1616
include TeamSearch
1717
include SearchModule
1818

19-
2019
mount_uploader :avatar, TeamUploader
2120

2221
scope :featured, ->{ where(premium: true, valid_jobs: true, hide_from_featured: false) }
@@ -104,7 +103,7 @@ def self.search(query_string, country, page, per_page, search_type = :query_and_
104103
filter :term, country: country unless country.nil?
105104
sort { by [{ score: 'desc', total_member_count: 'desc', '_score' => {} }] }
106105
end
107-
rescue Tire::Search::SearchRequestFailed => e
106+
rescue Tire::Search::SearchRequestFailed
108107
SearchResultsWrapper.new(nil, "Looks like our teams server is down. Try again soon.")
109108
end
110109
end
@@ -378,16 +377,19 @@ def has_specialties?
378377
def specialties_with_counts
379378
@specialties_with_counts ||= begin
380379
specialties = {}
380+
381381
members.each do |user|
382382
user.speciality_tags.each do |tag|
383383
tag = tag.downcase
384384
specialties[tag] = 0 if specialties[tag].blank?
385385
specialties[tag] += 1
386386
end
387387
end
388-
unless only_one_occurence_of_each = specialties.values.sum == specialties.values.length
388+
389+
unless specialties.values.sum == specialties.values.length
389390
specialties.reject! { |k, v| v <= 1 }
390391
end
392+
391393
specialties.sort_by { |k, v| v }.reverse[0..7]
392394
end
393395
end
@@ -430,6 +432,7 @@ def sorted_members
430432

431433
def add_user(user)
432434
touch!
435+
433436
user.tap do |u|
434437
u.update_attribute(:team_document_id, id.to_s)
435438
u.save!
@@ -439,7 +442,9 @@ def add_user(user)
439442
def add_member(user)
440443
Rails.logger.warn("Called #{self.class.name}#add_member(#{user.inspect}")
441444

442-
return member if member = members.select { |m| m.user_id == user.id }
445+
member = members.select { |m| m.user_id == user.id }.first
446+
return member if member
447+
443448
member = members.create(user_id: user.id)
444449
save!
445450
member
@@ -450,7 +455,9 @@ def remove_member(user)
450455
members.destroy(member)
451456
save!
452457
end
458+
453459
attr_accessor :skip_validations
460+
454461
def touch!
455462
self.updated_at = Time.now.utc
456463
save!(validate: !skip_validations)
@@ -573,7 +580,7 @@ def predominant
573580
def admin?(user)
574581
return false if user.nil?
575582
return true if user.admin?
576-
if everyone_is_an_admin = admins.empty?
583+
if admins.empty?
577584
members.include?(user)
578585
else
579586
admins.include?(user.id)
@@ -781,9 +788,12 @@ def latest_editors
781788
end
782789

783790
def video_url
784-
if self.youtube_url =~ /vimeo\.com\/(\d+)/
791+
youtube_pattern = /(youtube\.com|youtu\.be)\/(watch\?v=)?([\w\-_]{11})/i
792+
vimeo_pattern = /vimeo\.com\/(\d+)/
793+
794+
if self.youtube_url =~ vimeo_pattern
785795
"https://player.vimeo.com/video/#{$1}"
786-
elsif self.youtube_url =~ /(youtube\.com|youtu\.be)\/(watch\?v=)?([\w\-_]{11})/i
796+
elsif self.youtube_url =~ youtube_pattern
787797
"https://www.youtube.com/embed/#{$3}"
788798
else
789799
self.youtube_url

app/models/user.rb

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class User < ActiveRecord::Base
4141
users
4242
}
4343

44+
4445
#TODO maybe we don't need this
4546
BLANK_PROFILE_URL = 'blank-mugshot.png'
4647

@@ -84,6 +85,15 @@ class User < ActiveRecord::Base
8485
has_many :github_repositories, through: :github_profile , source: :repositories
8586

8687
belongs_to :team, class_name: 'Team'
88+
has_one :membership, class_name: 'Teams::Member'
89+
90+
def on_premium_team?
91+
if membership
92+
membership.team.premium?
93+
else
94+
false
95+
end
96+
end
8797

8898
geocoded_by :location, latitude: :lat, longitude: :lng, country: :country, state_code: :state_name
8999
# FIXME: Move to background job
@@ -219,11 +229,6 @@ def team_ids
219229
[team_id]
220230
end
221231

222-
223-
def on_premium_team?
224-
team.try(:premium?) || false
225-
end
226-
227232
def following_team?(team)
228233
followed_teams.collect(&:team_id).include?(team.id.to_s)
229234
end
@@ -903,7 +908,7 @@ def destroy_badges
903908
end
904909

905910
before_create do
906-
self.referral_token ||= SecureRandom.hex(8)
911+
self.referral_token ||= SecureRandom.hex(8)
907912
end
908913

909914
after_save :refresh_dependencies

spec/models/user_spec.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
require 'spec_helper'
2-
3-
RSpec.describe User, type: :model, skip: true do
1+
RSpec.describe User, type: :model do
42
it { is_expected.to have_one :github_profile }
53
it { is_expected.to have_many :github_repositories }
4+
65
before :each do
76
User.destroy_all
87
end
@@ -29,7 +28,7 @@
2928
end
3029

3130
it 'should not allow the username in multiple cases to be use on creation' do
32-
user = Fabricate(:user, username: 'MDEITERS')
31+
Fabricate(:user, username: 'MDEITERS')
3332
lambda do
3433
expect(Fabricate(:user, username: 'mdeiters')).to raise_error('Validation failed: Username has already been taken')
3534
end
@@ -68,7 +67,7 @@
6867
user_with_3_badges = Fabricate :user
6968
badge1 = user_with_3_badges.badges.create!(badge_class_name: Mongoose3.name)
7069
badge2 = user_with_3_badges.badges.create!(badge_class_name: Octopussy.name)
71-
badge3 = user_with_3_badges.badges.create!(badge_class_name: Mongoose.name)
70+
user_with_3_badges.badges.create!(badge_class_name: Mongoose.name)
7271

7372
expect(User.top(1)).to include(user_with_3_badges)
7473
expect(User.top(1)).not_to include(user_with_2_badges)
@@ -84,7 +83,7 @@
8483
it 'returns badges in order created with latest first' do
8584
user = Fabricate :user
8685
badge1 = user.badges.create!(badge_class_name: Mongoose3.name)
87-
badge2 = user.badges.create!(badge_class_name: Octopussy.name)
86+
user.badges.create!(badge_class_name: Octopussy.name)
8887
badge3 = user.badges.create!(badge_class_name: Mongoose.name)
8988

9089
expect(user.badges.first).to eq(badge3)
@@ -217,7 +216,8 @@ class AlsoNotaBadge < BadgeBase
217216

218217
it 'should indicate when user is on a premium team' do
219218
team = Fabricate(:team, premium: true)
220-
team.add_member(user = Fabricate(:user))
219+
member = team.add_member(user = Fabricate(:user))
220+
221221
expect(user.on_premium_team?).to eq(true)
222222
end
223223

0 commit comments

Comments
 (0)