user.rb
3.12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
class User < ActiveRecord::Base
include Clearance::User
has_many :visitors, :class_name => "Visitor", :foreign_key => "site_id"
has_many :questions, :class_name => "Question", :foreign_key => "site_id"
has_many :clicks, :class_name => "Click", :foreign_key => "site_id"
has_many :items, :class_name => "Item", :foreign_key => "site_id"
def default_visitor
visitors.find(:first, :conditions => {:identifier => 'owner'})
end
def create_question(visitor_identifier, question_params)
logger.info "the question_params are #{question_params.inspect}"
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
question = visitor.questions.create(question_params.merge(:site => self))
end
def create_choice(visitor_identifier, question, choice_params = {})
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
raise "Question not found" if question.nil?
#TODO Does this serve a purpose?
if visitor.owns?(question)
choice = question.choices.create!(choice_params.merge(:active => false, :creator => visitor))
elsif question.local_identifier == choice_params[:local_identifier]
choice = question.choices.create!(choice_params.merge(:active => false, :creator => visitor))
else
choice = question.choices.create!(choice_params.merge(:active => false, :creator => visitor))
end
notify_question_owner_that_new_choice_has_been_added(choice)
return choice
end
def record_vote(visitor_identifier, appearance_lookup, prompt, ordinality, time_viewed)
#@click = Click.new(:what_was_clicked => 'on the API level, inside record_vote' + " with prompt id #{prompt.id}, ordinality #{ordinality.to_s}")
#@click.save!
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
visitor.vote_for!(appearance_lookup, prompt, ordinality, time_viewed)
#prompt.choices.each {|c| c.compute_score; c.save!}
end
def record_appearance(visitor_identifier, prompt)
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
a = Appearance.create(:voter => visitor, :prompt => prompt, :question_id => prompt.question_id,
:lookup => Digest::MD5.hexdigest(rand(10000000000).to_s + visitor.id.to_s + prompt.id.to_s) )
end
def record_skip(visitor_identifier, prompt)
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
question = prompt.question
visitor.skip!(prompt)
end
def activate_question(question_id, options)
question = questions.find(question_id)
question.activate!
end
def activate_choice(choice_id, options)
choice = Choice.find(choice_id)
choice.activate!
end
def deactivate_choice(choice_id, options)
choice = Choice.find(choice_id)
choice.deactivate!
end
def deactivate_question(question_id, options)
question = questions.find(question_id)
question.deactivate!
end
def after_create
visitors.create!(:site => self, :identifier => 'owner')
end
private
def notify_question_owner_that_new_choice_has_been_added(choice)
#ChoiceNotifier.deliver_notification(choice) #this may be the responsibility of the client
end
end