Skip to content

Instantly share code, notes, and snippets.

@paul
Created July 24, 2008 20:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save paul/2297 to your computer and use it in GitHub Desktop.
Save paul/2297 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'dm-core'
require 'pathname'
require Pathname(__FILE__).dirname + 'lib/ssbe_adapter'
DataMapper.setup(:default, :adapter => :ssbe, :service_descriptor_uri => 'http://core.ssbe.localhost/service_descriptors')
class Client
include DataMapper::Resource
set_service_type "http://systemshepherd.com/services/kernel"
set_resource_name "AllClients"
set_mimetype "application/vnd.absolute-performance.sysshep+json"
property :name, String
end
clients = Client.all
puts clients.inspect
# => [#<Client name="TestClient" href="http://core.ssbe.localhost/clients/TestClient">]
require 'rubygems'
require 'resourceful'
require 'json'
gem 'dm-core', '>=0.9.3'
module DataMapper
module Adapters
class SsbeAdapter < AbstractAdapter
def initialize(name, uri_or_options)
super
@service_descriptor_uri = uri_or_options[:service_descriptor_uri]
@http = Resourceful::HttpAccessor.new(:cache_manager => Resourceful::InMemoryCacheManager.new,
:logger => Resourceful::StdOutLogger.new)
@http.auth_manager.add_auth_handler Resourceful::SSBEAuthenticator.new('dev', 'dev')
@service_descriptor = @http.resource(@service_descriptor_uri).get.body
@service_descriptor = JSON.parse(@service_descriptor)
end
def read_many(query)
service_type = query.model.service_type
resource_name = query.model.resource_name
mimetype = query.model.mimetype
resource_descriptor_uri = @service_descriptor["items"].find { |i| i["service_type"] == service_type }["href"]
resource_descriptor = JSON.parse(@http.resource(resource_descriptor_uri).get.body)
resource_uri = resource_descriptor["resources"].find { |i| i["name"] == resource_name }["href"]
doc = JSON.parse(@http.resource(resource_uri).get(:accept => mimetype).body)
Collection.new(query) do |collection|
doc['items'].each do |item|
collection.load(
query.fields.map { |prop| item[prop.field.to_s] }
)
end
end
end
end
end
module Model
attr_reader :service_type, :resource_name, :mimetype
def set_service_type(uri)
@service_type = uri
end
def set_resource_name(name)
@resource_name = name
end
def set_mimetype(mimetype)
@mimetype = mimetype
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment