Method: Medea::JasonBase.resolve

Defined in:
lib/medea/jason_base.rb

.resolve(key, mode = :lazy) ⇒ Object

the resolve method takes a key and returns the JasonObject that has that key This is useful when you have the key, but not the class



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/medea/jason_base.rb', line 13

def self.resolve(key, mode=:lazy)
  q = JasonDeferredQuery.new :filters => {:VERSION0 => nil, :FILTER => {:HTTP_X_KEY => key, :HTTP_X_ACTION => :POST}}
  q.filters[:FILTER] ||= {}
  q.filters[:FILTER][:HTTP_X_KEY] = key
  resp = JSON.parse(RestClient.get(q.to_url))
  if resp.has_key? "1"
    #this is the object, figure out its class
    resp["1"]["POST_TO"] =~ /([^\/]+)\/#{key}/
    begin
      result = Kernel.const_get($1).get_by_key key, :lazy
      if result["1"].has_key? "CONTENT"
        result.instance_variable_set(:@__jason_data, result["1"]["CONTENT"])
        result.instance_variable_set(:@__jason_state, :stale)
      end
      if mode == :eager
        result.send(:load)
      end
    rescue
      nil
    end
  end
end