C0 code coverage information
Generated on Fri Jul 11 15:55:35 -0700 2008 with rcov 0.7.0
Code reported as executed by Ruby looks like this...
and this: this line is also marked as covered.
Lines considered as run by rcov, but not reported by Ruby, look like this,
and this: these lines were inferred by rcov (using simple heuristics).
Finally, here's a line marked as not executed.
1 module OpenID
2 class Consumer
3
4 # A set of discovered services, for tracking which providers have
5 # been attempted for an OpenID identifier
6 class DiscoveredServices
7 attr_reader :current
8
9 def initialize(starting_url, yadis_url, services)
10 @starting_url = starting_url
11 @yadis_url = yadis_url
12 @services = services.dup
13 @current = nil
14 end
15
16 def next
17 @current = @services.shift
18 end
19
20 def for_url?(url)
21 [@starting_url, @yadis_url].member?(url)
22 end
23
24 def started?
25 !@current.nil?
26 end
27
28 def empty?
29 @services.empty?
30 end
31 end
32
33 # Manages calling discovery and tracking which endpoints have
34 # already been attempted.
35 class DiscoveryManager
36 def initialize(session, url, session_key_suffix=nil)
37 @url = url
38
39 @session = session
40 @session_key_suffix = session_key_suffix || 'auth'
41 end
42
43 def get_next_service
44 manager = get_manager
45 if !manager.nil? && manager.empty?
46 destroy_manager
47 manager = nil
48 end
49
50 if manager.nil?
51 yadis_url, services = yield @url
52 manager = create_manager(yadis_url, services)
53 end
54
55 if !manager.nil?
56 service = manager.next
57 store(manager)
58 else
59 service = nil
60 end
61
62 return service
63 end
64
65 def cleanup(force=false)
66 manager = get_manager(force)
67 if !manager.nil?
68 service = manager.current
69 destroy_manager(force)
70 else
71 service = nil
72 end
73 return service
74 end
75
76 protected
77
78 def get_manager(force=false)
79 manager = load
80 if force || manager.nil? || manager.for_url?(@url)
81 return manager
82 else
83 return nil
84 end
85 end
86
87 def create_manager(yadis_url, services)
88 manager = get_manager
89 if !manager.nil?
90 raise StandardError, "There is already a manager for #{yadis_url}"
91 end
92 if services.empty?
93 return nil
94 end
95 manager = DiscoveredServices.new(@url, yadis_url, services)
96 store(manager)
97 return manager
98 end
99
100 def destroy_manager(force=false)
101 if !get_manager(force).nil?
102 destroy!
103 end
104 end
105
106 def session_key
107 'OpenID::Consumer::DiscoveredServices::' + @session_key_suffix
108 end
109
110 def store(manager)
111 @session[session_key] = manager
112 end
113
114 def load
115 @session[session_key]
116 end
117
118 def destroy!
119 @session[session_key] = nil
120 end
121 end
122 end
123 end
Generated using the rcov code coverage analysis tool for Ruby version 0.7.0.