| Module | Systems::Visit |
| In: |
lib/systems/visit.rb
|
# File lib/systems/visit.rb, line 2 2: def active_visit=(visit) 3: session[:visit_id] = visit.id 4: session[:visit_ip_country_code] = visit.ip_country_code 5: end
# File lib/systems/visit.rb, line 46
46: def clear_prompt_for_question_visit(qid)
47: visit = current_visit
48: qv = ::QuestionsVisit.qv(qid, visit.id)
49: qv.update_attribute(:prompt_id_ext, nil) if qv
50: end
# File lib/systems/visit.rb, line 84
84: def create_visit(locale = false)
85: ip = ip_address
86: visit = ::Visit.new do |v|
87: v.locale = locale if locale
88: v.ip_address = ip
89: v.host = request.env['HTTP_HOST']
90: v.user_agent = request.env['HTTP_USER_AGENT']
91: v.referrer = request.env['HTTP_REFERER']
92: v.request_uri = request.env['REQUEST_URI']
93: end
94: visit = GeoIP.location(ip, visit)
95: visit.save!
96: self.active_visit = visit
97: visit
98: end
# File lib/systems/visit.rb, line 23
23: def current_visit
24: current_visit_id && ::Visit.find(current_visit_id)
25: end
# File lib/systems/visit.rb, line 27
27: def current_visit!
28: (current_visit_id && ::Visit.find(current_visit_id)) || create_visit
29: end
# File lib/systems/visit.rb, line 11
11: def current_visit_id!
12: session[:visit_id] || create_visit.id
13: end
# File lib/systems/visit.rb, line 15
15: def current_visit_ip_country_code
16: session[:visit_ip_country_code]
17: end
# File lib/systems/visit.rb, line 52
52: def fetch_prompt_for_question_visit(qid)
53: visit = current_visit!
54: set_pairwise_from_question_id(qid)
55: voter_id_ext = Pairwise.voter(:ip_address => ip_address).first
56: qv = ::QuestionsVisit.qv(qid, visit.id) || ::QuestionsVisit.create!(
57: :question_id => qid,
58: :visit_id => visit.id,
59: :voter_id_ext => voter_id_ext
60: )
61: @prompt_id, @item_ids, @item_data = Pairwise.prompt(qid, qv.voter_id_ext, 1, false, 2, true)
62: return false if @prompt_id.nil?
63: @prompt_id = @prompt_id.first
64: qv.update_attribute(:prompt_id_ext, @prompt_id)
65: @item_ids = @item_ids.first
66: @item_data = @item_data.first
67: end
# File lib/systems/visit.rb, line 69
69: def fetch_visit
70: unless current_visit
71: visit = ::Visit.first(:conditions => {
72: :ip_address => ip_address,
73: :user_agent => user_agent,
74: :active => true
75: })
76: if visit && !fresh_visit?(visit)
77: visit.update_attribute(:active, false)
78: visit = nil
79: end
80: visit ? self.active_visit = visit : create_visit
81: end
82: end
time out visit if updated_at + const > now
# File lib/systems/visit.rb, line 32
32: def fresh_visit?(visit = nil)
33: visit ||= current_visit
34: visit && visit.updated_at + Const::VISIT_STALE_AFTER > Time.now
35: end
# File lib/systems/visit.rb, line 100
100: def ip_address
101: request.env['HTTP_X_REAL_IP'] || request.env['REMOTE_ADDR']
102: end
# File lib/systems/visit.rb, line 37
37: def prompt_for_question_visit(qid)
38: visit = current_visit!
39: qv = ::QuestionsVisit.qv(qid, visit.id)
40: if qv && @prompt_id = qv.prompt_id_ext
41: @item_ids = Pairwise.get_prompt(@prompt_id).last
42: @item_data = @item_ids.map { |id| Pairwise.get_item(id)[1] }
43: end
44: end