Module: TDiary::RefererManager

Included in:
RefererDiary, Style::BaseDiary
Defined in:
lib/tdiary/referer_manager.rb

Instance Method Summary collapse

Instance Method Details

#add_referer(ref, count = 1) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/tdiary/referer_manager.rb', line 18

def add_referer( ref, count = 1 )
	newer_referer
	ref = ref.sub( /#.*$/, '' ).sub( /\?\d{8}$/, '' )
	if /^([^:]+:\/\/)([^\/]+)/ =~ ref
		ref = $1 + $2.downcase + $'
	end
	begin
		uref = CGI::unescape( ref )
	rescue ::Encoding::CompatibilityError
		return
	end
	if pair = @referers[uref] then
		pair = [pair, ref] if pair.class != Array # for compatibility
		@referers[uref] = [pair[0] + count, pair[1]]
	else
		@referers[uref] = [count, ref]
	end
end

#clear_referersObject



37
38
39
# File 'lib/tdiary/referer_manager.rb', line 37

def clear_referers
	@referers = {}
end

#count_referersObject



41
42
43
# File 'lib/tdiary/referer_manager.rb', line 41

def count_referers
	@referers.size
end

#each_referer(limit = 10) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
# File 'lib/tdiary/referer_manager.rb', line 45

def each_referer( limit = 10 )
	newer_referer
	# dirty workaround to avoid recursive sort that
	# causes SecurityError in @secure=true
	# environment since
	# http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=16081
	@referers.values.sort_by{|e| "%08d_%s" % e}.reverse.each_with_index do |ary,idx|
		break if idx >= limit
		yield ary[0], ary[1]
	end
end