user.rb
2.69 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
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"
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(options)
visitor_identifier = options.delete(:visitor_identifier)
if visitor_identifier.nil?
visitor = default_visitor
else
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
end
visitor.vote_for!(options)
end
def record_appearance(visitor, prompt)
a = Appearance.create(:voter => visitor, :prompt => prompt, :question_id => prompt.question_id, :site_id => self.id, :lookup => Digest::MD5.hexdigest(rand(10000000000).to_s + visitor.id.to_s + prompt.id.to_s) )
end
def record_skip(options)
visitor_identifier = options.delete(:visitor_identifier)
if visitor_identifier.nil?
visitor = default_visitor
else
visitor = visitors.find_or_create_by_identifier(visitor_identifier)
end
visitor.skip!(options)
end
def activate_question(question_id, options)
question = questions.find(question_id)
question.activate!
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