module GlobalID::Locator

def use(app, locator = nil, &locator_block)

end
end
@search_client.search name: gid.model_name, id: gid.model_id
def locate(gid, options = {})
class BarLocator

GlobalID::Locator.use :bar, BarLocator.new

Using a class:

end
FooRemote.const_get(gid.model_name).find(gid.model_id)
GlobalID::Locator.use :foo do |gid, options|

Using a block:

The locator can be either a block or a class.

Useful when different apps collaborate and reference each others' Global IDs.
Tie a locator to an app.
def use(app, locator = nil, &locator_block)
  raise ArgumentError, 'No locator provided. Pass a block or an object that responds to #locate.' unless locator || block_given?
  URI::GID.validate_app(app)
  @locators[normalize_app(app)] = locator || BlockLocator.new(locator_block)
end