module Rsbe::Client

Constants

VERSION

Public Class Methods

find(url) click to toggle source
# File lib/rsbe/client.rb, line 18
def self.find(url)
  assert_same_origin(url)
  find_and_instantiate(url)
end

Private Class Methods

assert_same_origin(url) click to toggle source
# File lib/rsbe/client.rb, line 23
def self.assert_same_origin(url)
  conn = Rsbe::Client::Connection.new
  unless conn.same_origin?(url)
    raise Rsbe::Client::WrongOriginError.new("incorrect origin: #{url}")
  end
end
find_and_instantiate(url) click to toggle source
# File lib/rsbe/client.rb, line 31
def self.find_and_instantiate(url)
  retval = nil
  [
    Rsbe::Client::Partner,
    Rsbe::Client::Provider,
    Rsbe::Client::Collection,
    Rsbe::Client::Se
  ].each do |klass|
    # UUID Regexp from http://stackoverflow.com/a/14166194
    m = /#{klass.base_path}\/(?<uuid>[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12})\z/i.match(url)
    next if m.nil?
    retval = klass.find(m['uuid'])
    break
  end
  raise Rsbe::Client::UnrecognizedResourceError.new("no matching resource found for #{url}") if retval.nil?
  retval
end