Skip to content

Commit

Permalink
Merge pull request openSNP#19 from tsujigiri/known_phenotypes
Browse files Browse the repository at this point in the history
Nice work, lots of unnecessary stuff is gone
  • Loading branch information
philippbayer committed Mar 28, 2012
2 parents 9ead1af + b053992 commit ce41ad1
Show file tree
Hide file tree
Showing 8 changed files with 67 additions and 97 deletions.
4 changes: 0 additions & 4 deletions app/controllers/phenotypes_controller.rb
Expand Up @@ -39,10 +39,6 @@ def create
redirect_to :action => "new" redirect_to :action => "new"
else else


if @phenotype.known_phenotypes.include?(params[:user_phenotype][:variation]) == false
@phenotype.known_phenotypes << params[:user_phenotype][:variation]
end

@phenotype.save @phenotype.save
@phenotype = Phenotype.find_by_characteristic(params[:phenotype][:characteristic]) @phenotype = Phenotype.find_by_characteristic(params[:phenotype][:characteristic])
Resque.enqueue(Mailnewphenotype, @phenotype.id,current_user.id) Resque.enqueue(Mailnewphenotype, @phenotype.id,current_user.id)
Expand Down
3 changes: 0 additions & 3 deletions app/controllers/user_phenotypes_controller.rb
Expand Up @@ -35,9 +35,6 @@ def create


@phenotype = Phenotype.find_by_id(params[:user_phenotype][:phenotype_id]) @phenotype = Phenotype.find_by_id(params[:user_phenotype][:phenotype_id])


if @phenotype.known_phenotypes.include?(params[:user_phenotype][:variation]) == false
@phenotype.known_phenotypes << params[:user_phenotype][:variation]
end
if @user_phenotype.save if @user_phenotype.save


#check for new achievements #check for new achievements
Expand Down
88 changes: 24 additions & 64 deletions app/controllers/users_controller.rb
Expand Up @@ -46,19 +46,19 @@ def index
@title = "Listing all users" @title = "Listing all users"


@result = [] @result = []
begin begin
@users = User.find(:all) @users = User.find(:all)
@users.each do |u| @users.each do |u|
@user = {} @user = {}
@user["name"] = u.name @user["name"] = u.name
@user["id"] = u.id @user["id"] = u.id
@user["genotypes"] = [] @user["genotypes"] = []
Genotype.find_all_by_user_id(u.id).each do |g| Genotype.find_all_by_user_id(u.id).each do |g|
@genotype = {} @genotype = {}
@genotype["id"] = g.id @genotype["id"] = g.id
@genotype["filetype"] = g.filetype @genotype["filetype"] = g.filetype
@genotype["download_url"] = 'http://opensnp.org/data/' + g.fs_filename @genotype["download_url"] = 'http://opensnp.org/data/' + g.fs_filename
@user["genotypes"] << @genotype @user["genotypes"] << @genotype
end end
@result << @user @result << @user
end end
Expand Down Expand Up @@ -149,22 +149,12 @@ def changepassword
def update def update
@user = User.find(params[:id]) @user = User.find(params[:id])


# check whether the user has deleted phenotypes and change known_phenotypes if params[:user][:user_phenotypes_attributes].present?
@pot_delete_phenotype_ids = []
if params[:user][:user_phenotypes_attributes] != nil

params[:user][:user_phenotypes_attributes].each do |p| params[:user][:user_phenotypes_attributes].each do |p|
@phenotype = Phenotype.find(UserPhenotype.find(p[1]["id"]).phenotype_id) @phenotype = UserPhenotype.find(p[1]["id"]).phenotype

@old_variation = UserPhenotype.find_by_id(p[1]["id"]).variation @old_variation = UserPhenotype.find_by_id(p[1]["id"]).variation
if UserPhenotype.find_all_by_phenotype_id_and_variation(@phenotype.id,@old_variation).length == 1 # TODO: known_phenotypes compare different now
@phenotype.known_phenotypes.delete_if { |entry| entry == @old_variation }
end


@pot_delete_phenotype_ids << @phenotype.id
if @phenotype.known_phenotypes.include?(p[1]["variation"]) == false if @phenotype.known_phenotypes.include?(p[1]["variation"]) == false
@phenotype.known_phenotypes << p[1]["variation"]
@phenotype.number_of_users = UserPhenotype.find_all_by_phenotype_id(@phenotype.id).length @phenotype.number_of_users = UserPhenotype.find_all_by_phenotype_id(@phenotype.id).length
@phenotype.save @phenotype.save
end end
Expand All @@ -175,16 +165,9 @@ def update
@empty_websites = Homepage.find_all_by_user_id_and_url(current_user.id,"") @empty_websites = Homepage.find_all_by_user_id_and_url(current_user.id,"")
@empty_websites.each do |ew| ew.delete end @empty_websites.each do |ew| ew.delete end


if @pot_delete_phenotype_ids != []
@pot_delete_phenotype_ids.each do |pid|
if UserPhenotype.find_all_by_phenotype_id(pid).length == 0
Phenotype.delete(pid)
end
end
end
Resque.enqueue(Recommendvariations) Resque.enqueue(Recommendvariations)
Resque.enqueue(Recommendphenotypes) Resque.enqueue(Recommendphenotypes)
flash[:notice] = "Successfully updated" flash[:notice] = "Successfully updated"


if params[:user][:password] or params[:user][:avatar] if params[:user][:password] or params[:user][:avatar]
Expand Down Expand Up @@ -216,7 +199,7 @@ def check_to_create_phenotype(characteristic, variation, user_id)
@phenotype = Phenotype.find_by_characteristic(characteristic) @phenotype = Phenotype.find_by_characteristic(characteristic)
if @phenotype == nil if @phenotype == nil
# createphenotype if it doesn't exist # createphenotype if it doesn't exist
@phenotype = Phenotype.create(:characteristic => characteristic, :number_of_users => 1, :known_phenotypes => [variation]) @phenotype = Phenotype.create(:characteristic => characteristic, :number_of_users => 1)
end end
@user_phenotype = UserPhenotype.find_by_phenotype_id(@phenotype.id) @user_phenotype = UserPhenotype.find_by_phenotype_id(@phenotype.id)
if @user_phenotype == nil if @user_phenotype == nil
Expand All @@ -232,36 +215,13 @@ def destroy
@user = User.find(params[:id]) @user = User.find(params[:id])
# delete the genotype(s) # delete the genotype(s)
if @user.genotypes.length != 0 if @user.genotypes.length != 0
@user.genotypes.each do |ug| @user.genotypes.each do |ug|
Resque.enqueue(Deletegenotype, ug) Resque.enqueue(Deletegenotype, ug)
File.delete(::Rails.root.to_s+"/public/data/"+ ug.fs_filename) File.delete(::Rails.root.to_s+"/public/data/"+ ug.fs_filename)
ug.delete ug.delete
end
end

@user.user_achievements.each do |ua|
UserAchievement.delete(ua)
end

@messages = Message.find_all_by_user_id(@user_id)

@messages.each do |mt|
Message.delete(mt)
end

@user.user_phenotypes.each do |up|
@phenotype = Phenotype.find_by_id(up.phenotype_id)

if UserPhenotype.find_all_by_phenotype_id_and_variation(@phenotype.id,up.variation).length == 1
@phenotype.known_phenotypes.delete_if { |entry| entry == up.variation }
@phenotype.save
end

if @phenotype.user_phenotypes.length == 1
Phenotype.delete(@phenotype)
end end
UserPhenotype.delete(up)
end end

flash[:notice] = "Thank you for using openSNP. Goodbye!" flash[:notice] = "Thank you for using openSNP. Goodbye!"
User.delete(@user) User.delete(@user)
redirect_to root_url redirect_to root_url
Expand Down
29 changes: 15 additions & 14 deletions app/models/phenotype.rb
@@ -1,18 +1,19 @@
class Phenotype < ActiveRecord::Base class Phenotype < ActiveRecord::Base
has_many :user_phenotypes has_many :user_phenotypes, dependent: :destroy
has_many :phenotype_comments has_many :phenotype_comments, dependent: :destroy
serialize :known_phenotypes


validates_presence_of :characteristic validates_presence_of :characteristic


searchable do searchable do
text :characteristic text :characteristic
end end


after_create :default_array def known_phenotypes

@known_phenotypes ||=
def default_array user_phenotypes.map(&:variation).
self.known_phenotypes ||= [] map(&:downcase).
end uniq.

map(&:camelize)
end

end end
20 changes: 10 additions & 10 deletions app/models/user.rb
Expand Up @@ -11,16 +11,16 @@ class User < ActiveRecord::Base
#after_create :make_standard_phenotypes #after_create :make_standard_phenotypes


# dependent so stuff gets destroyed on delete # dependent so stuff gets destroyed on delete
has_many :user_phenotypes, :dependent => :destroy has_many :user_phenotypes, dependent: :destroy
has_many :phenotypes, :through => :user_phenotypes has_many :phenotypes, through: :user_phenotypes
has_many :genotypes, :dependent => :destroy has_many :genotypes, dependent: :destroy
# user_snps needs some extra-logic to decrease the counters # user_snps needs some extra-logic to decrease the counters
has_many :user_snps, :dependent => :destroy has_many :user_snps, dependent: :destroy
has_many :snps, :through => :user_snps has_many :snps, through: :user_snps
has_many :homepages, :dependent => :destroy has_many :homepages, dependent: :destroy
has_many :messages has_many :messages, dependent: :destroy
has_many :user_achievements, :dependent => :destroy has_many :user_achievements, dependent: :destroy
has_many :achievements, :through => :user_achievements has_many :achievements, through: :user_achievements
has_many :snp_comments has_many :snp_comments
has_many :phenotype_comments has_many :phenotype_comments


Expand Down Expand Up @@ -53,7 +53,7 @@ def check_and_make_standard_phenotypes(charact)
@phen_id = Phenotype.find_by_characteristic(charact).id @phen_id = Phenotype.find_by_characteristic(charact).id
UserPhenotype.create(:phenotype_id => @phen_id, :variation => '', :user_id => id) UserPhenotype.create(:phenotype_id => @phen_id, :variation => '', :user_id => id)
else else
@phen_id = Phenotype.create(:characteristic => charact,:known_phenotypes => []).id @phen_id = Phenotype.create(:characteristic => charact).id
UserPhenotype.create(:phenotype_id => @phen_id, :variation => '', :user_id => id) UserPhenotype.create(:phenotype_id => @phen_id, :variation => '', :user_id => id)
end end
end end
Expand Down
2 changes: 1 addition & 1 deletion app/models/user_phenotype.rb
@@ -1,5 +1,5 @@
class UserPhenotype < ActiveRecord::Base class UserPhenotype < ActiveRecord::Base
belongs_to :phenotype belongs_to :phenotype, dependent: :destroy
belongs_to :user belongs_to :user
validates_presence_of :variation validates_presence_of :variation


Expand Down
1 change: 0 additions & 1 deletion test/factories.rb
Expand Up @@ -28,7 +28,6 @@


Factory.define :phenotype do |p| Factory.define :phenotype do |p|
p.characteristic "Penis length" p.characteristic "Penis length"
p.known_phenotypes [ "foo", "bar" ]
end end


Factory.define :user_phenotype do |up| Factory.define :user_phenotype do |up|
Expand Down
17 changes: 17 additions & 0 deletions test/unit/phenotype_test.rb
@@ -0,0 +1,17 @@
require_relative '../test_helper'

class PhenotypeTest < ActiveSupport::TestCase
context "Phenotype" do
setup do
Sunspot.stubs(:index)
@phenotype = Factory(:phenotype)
@phenotype.instance_variable_set(:@known_phenotypes, nil)
end

should "know some phenotypes" do
@phenotype.user_phenotypes.create(variation: "Ping pong")
@phenotype.user_phenotypes.create(variation: "ping pong")
assert_equal ["Ping pong"], @phenotype.known_phenotypes
end
end
end

0 comments on commit ce41ad1

Please sign in to comment.