Class: Discovery

Inherits:
Object
  • Object
show all
Defined in:
lib/yadis/manager.rb

Constant Summary collapse

@@default_suffix =
'auth'
@@prefix =
'_yadis_services_'

Instance Method Summary collapse

Constructor Details

#initialize(session, url, session_key_suffix = nil) ⇒ Discovery

expects a normalized url



38
39
40
41
42
# File 'lib/yadis/manager.rb', line 38

def initialize(session, url, session_key_suffix=nil)
  @session = session
  @url = url
  @session_key = @@prefix + (session_key_suffix or @@default_suffix)
end

Instance Method Details

#create_manager(services, yadis_url = nil) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
108
109
110
# File 'lib/yadis/manager.rb', line 97

def create_manager(services, yadis_url=nil)
  if self.get_manager
    raise ArgumentError, "There is already a manager for #{@url}"
  end

  if services.length > 0
    manager = YadisServiceManager.new(@url, yadis_url, services)
    self.store_manager(manager)
  else
    manager = nil
  end

  return manager
end

#currentObject



80
81
82
83
84
# File 'lib/yadis/manager.rb', line 80

def current
  manager = self.get_manager
  return nil unless manager
  return manager.current
end

#destroy_managerObject



112
113
114
115
116
117
118
119
120
121
122
# File 'lib/yadis/manager.rb', line 112

def destroy_manager
  if self.get_manager
    begin
      @session.delete(@session_key)
    rescue
      # sometimes Hash like session objects don't have a delete
      # method.  We handle that case by assigning nil to the session[key]
      @session[@session_key] = nil
    end
  end
end

#discover(filter = nil) ⇒ Object

The filter argument is a Proc that will be used to call YADIS.filter_services. See the documentation for YADIS.filter_services for more information about writing filters.



131
132
133
134
135
136
137
138
139
140
141
# File 'lib/yadis/manager.rb', line 131

def discover(filter=nil)
  y = YADIS.new(@url)
  
  # a default filter which sends through everything.  you should
  # probably consider writing a custom filter and passing it in.
  unless filter
    filter = lambda {|s| s}
  end

  return [y.uri, y.filter_services(filter)]    
end

#finishObject



71
72
73
74
75
76
77
78
# File 'lib/yadis/manager.rb', line 71

def finish
  manager = self.get_manager
  return nil unless manager

  service = manager.current
  self.destroy_manager
  return service
end

#get_managerObject



86
87
88
89
90
91
92
93
94
95
# File 'lib/yadis/manager.rb', line 86

def get_manager
  manager = @session[@session_key]

  # make sure we've got the right manager here
  if manager and manager.for_url?(@url)
    return manager
  end

  return nil
end

#next_serviceObject



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
# File 'lib/yadis/manager.rb', line 44

def next_service
  manager = self.get_manager
  if manager and manager.length <= 0
    self.destroy_manager
    manager = nil
  end

  unless manager
    begin
      yadis_url, services = self.discover
    rescue YADISParseError, YADISHTTPError
      manager = nil
    else
      manager = self.create_manager(services, yadis_url)   
    end     
  end

  if manager
    service = manager.next
    self.store_manager(manager)
  else
    service = nil
  end
  
  return service
end

#store_manager(manager) ⇒ Object



124
125
126
# File 'lib/yadis/manager.rb', line 124

def store_manager(manager)
  @session[@session_key] = manager
end