<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>lib/cloudkit/exceptions.rb</filename>
    </added>
    <added>
      <filename>lib/cloudkit/store/memory_table.rb</filename>
    </added>
    <added>
      <filename>lib/cloudkit/store/resource.rb</filename>
    </added>
    <added>
      <filename>lib/cloudkit/uri.rb</filename>
    </added>
    <added>
      <filename>spec/memory_table_spec.rb</filename>
    </added>
    <added>
      <filename>spec/resource_spec.rb</filename>
    </added>
    <added>
      <filename>spec/uri_spec.rb</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -1 +1,2 @@
 .DS_Store
+*.tdb</diff>
      <filename>.gitignore</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@ task :default =&gt; :spec
 
 desc &quot;Run all examples (or a specific spec with TASK=xxxx)&quot;
 Spec::Rake::SpecTask.new('spec') do |t|
-  t.spec_opts  = [&quot;-cfs&quot;]
+  t.spec_opts  = [&quot;-c&quot;]
   t.spec_files = begin
     if ENV[&quot;TASK&quot;] 
       ENV[&quot;TASK&quot;].split(',').map { |task| &quot;spec/**/#{task}_spec.rb&quot; }</diff>
      <filename>Rakefile</filename>
    </modified>
    <modified>
      <diff>@@ -76,9 +76,6 @@ Gem::Specification.new do |s|
   s.add_dependency 'rack', '~&gt; 0.9'
   s.add_dependency 'rack-config', '&gt;= 0.9'
   s.add_dependency 'uuid', '= 2.0.1'
-  s.add_dependency 'dm-core', '~&gt; 0.9.10'
-  s.add_dependency 'dm-aggregates', '~&gt; 0.9.10'
-  s.add_dependency 'dm-validations', '~&gt; 0.9.10'
   s.add_dependency 'oauth', '~&gt; 0.3'
   s.add_dependency 'ruby-openid', '= 2.1.2'
   s.add_dependency 'json', '= 1.1.3'</diff>
      <filename>cloudkit.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -3,9 +3,7 @@ require 'erb'
 require 'json'
 require 'md5'
 require 'openid'
-require 'dm-core'
-require 'dm-aggregates'
-require 'dm-validations'
+require 'rufus/tokyo'
 require 'time'
 require 'uuid'
 require 'rack'
@@ -16,9 +14,11 @@ require 'oauth/request_proxy/rack_request'
 require 'oauth/server'
 require 'oauth/signature'
 require 'cloudkit/constants'
+require 'cloudkit/exceptions'
 require 'cloudkit/util'
-require 'cloudkit/store/document'
-require 'cloudkit/store/extraction_view'
+require 'cloudkit/uri'
+require 'cloudkit/store/memory_table'
+require 'cloudkit/store/resource'
 require 'cloudkit/store/response'
 require 'cloudkit/store/response_helpers'
 require 'cloudkit/store'
@@ -37,6 +37,14 @@ include CloudKit::Constants
 
 module CloudKit
   VERSION = '0.11.0'
+
+  def self.setup_storage_adapter(tc_table_instance=nil)
+    @storage_adapter = tc_table_instance || CloudKit::MemoryTable.new # Rufus::Tokyo::Table.new('cloudkit.tdb') #
+  end
+
+  def self.storage_adapter
+    @storage_adapter
+  end
 end
 
 class Object</diff>
      <filename>lib/cloudkit.rb</filename>
    </modified>
    <modified>
      <diff>@@ -23,14 +23,8 @@ module CloudKit
     # The 'via' key for the OpenID filter.
     CLOUDKIT_OPENID_FILTER_KEY = 'cloudkit.filter.openid'.freeze
 
-    # The key used to store the shared storage URI for the stack.
-    CLOUDKIT_STORAGE_URI = 'cloudkit.storage.uri'.freeze
-
-    # This key references the same piece of configuration as
-    # CLOUDKIT_STORAGE_URI. Because DataMapper can use either a URI or an
-    # options hash, this key is provided for code clarity when using
-    # Rack::Config.
-    CLOUDKIT_STORAGE_OPTIONS = 'cloudkit.storage.uri'.freeze
+    # The key used to store the shared Rufus Tokyo instance for the stack.
+    CLOUDKIT_STORAGE = 'cloudkit.storage'.freeze
 
     # The key for the login URL used in OpenID and OAuth middleware
     # components.
@@ -39,8 +33,5 @@ module CloudKit
     # The key for the logout URL used in OpenID and OAuth middleware
     # components.
     CLOUDKIT_LOGOUT_URL = 'cloudkit.filter.openid.url.logout'.freeze
-
-    # The outer namespace key for the JSON store.
-    CLOUDKIT_STORE = :cloudkit_json_store.freeze
   end
 end</diff>
      <filename>lib/cloudkit/constants.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,9 +14,7 @@ module CloudKit
 
     # Access a value, then forget it.
     def [](k)
-      v = @values[k]
-      @values[k] = nil
-      v
+      @values.delete(k)
     end
   end
 end</diff>
      <filename>lib/cloudkit/flash_session.rb</filename>
    </modified>
    <modified>
      <diff>@@ -31,7 +31,7 @@ module CloudKit
 
     def call(env)
       @@lock.synchronize do
-        @@store = OAuthStore.new(env[CLOUDKIT_STORAGE_URI])
+        @@store = OAuthStore.new#(env[CLOUDKIT_STORAGE_URI])
       end unless @@store
 
       request = Request.new(env)
@@ -82,8 +82,7 @@ module CloudKit
     def create_request_token(request)
       return challenge(request, 'invalid nonce') unless valid_nonce?(request)
 
-      consumer_result = @@store.get(
-        &quot;/cloudkit_oauth_consumers/#{request[:oauth_consumer_key]}&quot;)
+      consumer_result = @@store.get(&quot;/cloudkit_oauth_consumers/#{request[:oauth_consumer_key]}&quot;)
       unless consumer_result.status == 200
         return challenge(request, 'invalid consumer')
       end
@@ -105,8 +104,7 @@ module CloudKit
     def request_authorization(request)
       return login_redirect(request) unless request.current_user
 
-      request_token_result = @@store.get(
-        &quot;/cloudkit_oauth_request_tokens/#{request[:oauth_token]}&quot;)
+      request_token_result = @@store.get(&quot;/cloudkit_oauth_request_tokens/#{request[:oauth_token]}&quot;)
       unless request_token_result.status == 200
         return challenge(request, 'invalid request token')
       end
@@ -118,8 +116,7 @@ module CloudKit
     def authorize_request_token(request)
       return login_redirect(request) unless request.current_user
 
-      request_token_response = @@store.get(
-        &quot;/cloudkit_oauth_request_tokens/#{request.last_path_element}&quot;)
+      request_token_response = @@store.get(&quot;/cloudkit_oauth_request_tokens/#{request.last_path_element}&quot;)
       request_token = request_token_response.parsed_content
       if request_token['authorized_at']
         return challenge(request, 'invalid request token')
@@ -138,8 +135,7 @@ module CloudKit
     def deny_request_token(request)
       return login_redirect(request) unless request.current_user
 
-      request_token_response = @@store.get(
-        &quot;/cloudkit_oauth_request_tokens/#{request.last_path_element}&quot;)
+      request_token_response = @@store.get(&quot;/cloudkit_oauth_request_tokens/#{request.last_path_element}&quot;)
       @@store.delete(
         &quot;/cloudkit_oauth_request_tokens/#{request.last_path_element}&quot;,
         :etag =&gt; request_token_response.etag)
@@ -149,15 +145,13 @@ module CloudKit
     def create_access_token(request)
       return challenge(request, 'invalid nonce') unless valid_nonce?(request)
 
-      consumer_response = @@store.get(
-        &quot;/cloudkit_oauth_consumers/#{request[:oauth_consumer_key]}&quot;)
+      consumer_response = @@store.get(&quot;/cloudkit_oauth_consumers/#{request[:oauth_consumer_key]}&quot;)
       unless consumer_response.status == 200
         return challenge(request, 'invalid consumer')
       end
 
       consumer = consumer_response.parsed_content
-      request_token_response = @@store.get(
-        &quot;/cloudkit_oauth_request_tokens/#{request[:oauth_token]}&quot;)
+      request_token_response = @@store.get(&quot;/cloudkit_oauth_request_tokens/#{request[:oauth_token]}&quot;)
       unless request_token_response.status == 200
         return challenge(request, 'invalid request token')
       end
@@ -180,9 +174,7 @@ module CloudKit
         :consumer_key    =&gt; request[:oauth_consumer_key],
         :consumer_secret =&gt; consumer['secret'],
         :user_id         =&gt; request_token['user_id'])
-      @@store.put(
-        &quot;/cloudkit_oauth_tokens/#{token_id}&quot;,
-        :json =&gt; token_data)
+      @@store.put(&quot;/cloudkit_oauth_tokens/#{token_id}&quot;, :json =&gt; token_data)
       @@store.delete(
         &quot;/cloudkit_oauth_request_tokens/#{request[:oauth_token]}&quot;,
         :etag =&gt; request_token_response.etag)</diff>
      <filename>lib/cloudkit/oauth_filter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -14,27 +14,28 @@ module CloudKit
           :cloudkit_oauth_nonces,
           :cloudkit_oauth_tokens,
           :cloudkit_oauth_request_tokens,
-          :cloudkit_oauth_consumers],
-        :adapter =&gt; DataMapper.setup(
-          :default,
-          uri || 'sqlite3::memory:')) unless @@store
+          :cloudkit_oauth_consumers]
+        # :adapter =&gt; DataMapper.setup(
+        #           :default,
+        #           uri || 'sqlite3::memory:')
+        ) unless @@store
       load_static_consumer
     end
 
     def get(uri, options={}) #:nodoc:
-      @@store.get(uri, options)
+      @@store.get(CloudKit::URI.new(uri), options)
     end
 
     def post(uri, options={}) #:nodoc:
-      @@store.post(uri, options)
+      @@store.post(CloudKit::URI.new(uri), options)
     end
 
     def put(uri, options={}) #:nodoc:
-      @@store.put(uri, options)
+      @@store.put(CloudKit::URI.new(uri), options)
     end
 
     def delete(uri, options={}) #:nodoc:
-      @@store.delete(uri, options)
+      @@store.delete(CloudKit::URI.new(uri), options)
     end
 
     # Return the version number for this store.
@@ -44,7 +45,7 @@ module CloudKit
     # See the OAuth Discovery spec for more info on static consumers.
     def load_static_consumer
       json = JSON.generate(:secret =&gt; '')
-      @@store.put('/cloudkit_oauth_consumers/cloudkitconsumer', :json =&gt; json)
+      @@store.put(CloudKit::URI.new('/cloudkit_oauth_consumers/cloudkitconsumer'), :json =&gt; json)
     end
   end
 end</diff>
      <filename>lib/cloudkit/oauth_store.rb</filename>
    </modified>
    <modified>
      <diff>@@ -26,9 +26,9 @@ module CloudKit
 
     def call(env)
       @@lock.synchronize do
-        @@store = OpenIDStore.new(env[CLOUDKIT_STORAGE_URI])
-        @users  = UserStore.new(env[CLOUDKIT_STORAGE_URI])
-        @@store.get_association('x') rescue nil # refresh sqlite3
+        @@store = OpenIDStore.new#(env[CLOUDKIT_STORAGE_URI])
+        @users  = UserStore.new#(env[CLOUDKIT_STORAGE_URI])
+        # @@store.get_association('x') rescue nil # refresh sqlite3
       end unless @@store
 
       request = Request.new(env)</diff>
      <filename>lib/cloudkit/openid_filter.rb</filename>
    </modified>
    <modified>
      <diff>@@ -9,23 +9,16 @@ module CloudKit
     # Initialize an OpenIDStore and its required views.
     def initialize(uri=nil)
       unless @@store
-        association_view = ExtractionView.new(
-          :cloudkit_openid_server_handles,
-          :observe =&gt; :cloudkit_openid_associations,
-          :extract =&gt; [:server_url, :handle])
         @@store = Store.new(
           :collections =&gt; [:cloudkit_openid_associations, :cloudkit_openid_nonces],
-          :views       =&gt; [association_view],
-          :adapter     =&gt; DataMapper.setup(
-            :default,
-            uri || 'sqlite3::memory:'))
+          :adapter     =&gt; uri)
       end
     end
 
     def get_association(server_url, handle=nil) #:nodoc:
       options = {:server_url =&gt; server_url}
       options.merge!(:handle =&gt; Base64.encode64(handle)) if (handle &amp;&amp; handle != '')
-      result = @@store.get('/cloudkit_openid_server_handles', options)
+      result = @@store.get(CloudKit::URI.new('/cloudkit_openid_associations'), options)
       return nil unless result.status == 200
       return nil if result.parsed_content['total'] == 0
 
@@ -44,7 +37,7 @@ module CloudKit
 
     def remove_association(server_url, handle) #:nodoc:
       result = @@store.get(
-        '/cloudkit_openid_server_handles',
+        CloudKit::URI.new('/cloudkit_openid_associations'),
         :server_url =&gt; server_url,
         :handle     =&gt; Base64.encode64(handle))
       return nil unless result.status == 200
@@ -54,7 +47,7 @@ module CloudKit
 
       uris = result.parsed_content['uris']
       responses.each_with_index do |r, index|
-        @@store.delete(uris[index], :etag =&gt; r.etag)
+        @@store.delete(CloudKit::URI.new(uris[index]), :etag =&gt; r.etag)
       end
     end
 
@@ -67,18 +60,18 @@ module CloudKit
         :issued     =&gt; association.issued.to_i,
         :lifetime   =&gt; association.lifetime,
         :assoc_type =&gt; association.assoc_type)
-      result = @@store.post('/cloudkit_openid_associations', :json =&gt; json)
+      result = @@store.post(CloudKit::URI.new('/cloudkit_openid_associations'), :json =&gt; json)
       return (result.status == 201)
     end
 
     def use_nonce(server_url, timestamp, salt) #:nodoc:
       return false if (timestamp - Time.now.to_i).abs &gt; OpenID::Nonce.skew
 
-      fragment = URI.escape(
+      fragment = ::URI.escape(
         [server_url, timestamp, salt].join('-'), 
-        Regexp.union(URI::REGEXP::UNSAFE, '/', ':'))
+        Regexp.union(::URI::REGEXP::UNSAFE, '/', ':'))
       uri    = &quot;/cloudkit_openid_nonces/#{fragment}&quot;
-      result = @@store.put(uri, :json =&gt; '{}')
+      result = @@store.put(CloudKit::URI.new(uri), :json =&gt; '{}')
       return (result.status == 201)
     end
 
@@ -100,7 +93,7 @@ module CloudKit
     protected
 
     def resolve_associations(parsed_content) #:nodoc:
-      uri_list = parsed_content['uris']
+      uri_list = parsed_content['uris'].map! { |u| CloudKit::URI.new(u) }
       association_responses = @@store.resolve_uris(uri_list)
       return association_responses, association_responses.map{|a| a.parsed_content}
     end</diff>
      <filename>lib/cloudkit/openid_store.rb</filename>
    </modified>
    <modified>
      <diff>@@ -20,6 +20,10 @@ module CloudKit
       self.body.read
     end
 
+    def uri
+      @uri ||= CloudKit::URI.new(self.path_info)
+    end
+
     # Return true if method, path, and required_params match.
     def match?(method, path, required_params=[])
       (request_method == method) &amp;&amp;
@@ -66,7 +70,7 @@ module CloudKit
 
     # Unescape a value according to the OAuth spec.
     def unescape(value)
-      URI.unescape(value.gsub('+', '%2B'))
+      ::URI.unescape(value.gsub('+', '%2B'))
     end
 
     # Return the last path element in the request URI.</diff>
      <filename>lib/cloudkit/request.rb</filename>
    </modified>
    <modified>
      <diff>@@ -29,6 +29,8 @@ module CloudKit
 
     @@lock = Mutex.new
 
+    attr_reader :store
+
     def initialize(app, options)
       @app         = app
       @collections = options[:collections]
@@ -37,9 +39,7 @@ module CloudKit
     def call(env)
       @@lock.synchronize do
         @store = Store.new(
-          :adapter     =&gt; DataMapper.setup(
-            :default,
-            env[CLOUDKIT_STORAGE_URI] || 'sqlite3::memory:'),
+          :adapter     =&gt; env[CLOUDKIT_STORAGE],
           :collections =&gt; @collections)
       end unless @store
 
@@ -57,7 +57,7 @@ module CloudKit
 
     def get(request)
       response = @store.get(
-        request.path_info,
+        request.uri,
         {}.filter_merge!(
           :remote_user =&gt; request.current_user,
           :offset      =&gt; request['offset'],
@@ -71,14 +71,14 @@ module CloudKit
         return send(request['_method'].downcase)
       end
       @store.post(
-        request.path_info,
+        request.uri,
         {:json =&gt; request.json}.filter_merge!(
           :remote_user =&gt; request.current_user)).to_rack
     end
 
     def put(request)
       @store.put(
-        request.path_info,
+        request.uri,
         {:json =&gt; request.json}.filter_merge!(
           :remote_user =&gt; request.current_user,
           :etag        =&gt; request.if_match)).to_rack
@@ -86,7 +86,7 @@ module CloudKit
 
     def delete(request)
       @store.delete(
-        request.path_info,
+        request.uri,
         {}.filter_merge!(
           :remote_user =&gt; request.current_user,
           :etag        =&gt; request.if_match)).to_rack
@@ -94,7 +94,7 @@ module CloudKit
 
     def head(request)
       response = @store.head(
-        request.path_info,
+        request.uri,
         {}.filter_merge!(
           :remote_user =&gt; request.current_user,
           :offset      =&gt; request['offset'],
@@ -104,15 +104,15 @@ module CloudKit
     end
 
     def options(request)
-      @store.options(request.path_info).to_rack
+      @store.options(request.uri).to_rack
     end
 
     def inject_link_headers(request, response)
-      response['Link'] = versions_link_header(request) if @store.resource_uri?(request.path_info)
-      response['Link'] = resolved_link_header(request) if @store.resource_collection_uri?(request.path_info)
-      response['Link'] = index_link_header(request)    if @store.resolved_resource_collection_uri?(request.path_info)
-      response['Link'] = resolved_link_header(request) if @store.version_collection_uri?(request.path_info)
-      response['Link'] = index_link_header(request)    if @store.resolved_version_collection_uri?(request.path_info)
+      response['Link'] = versions_link_header(request) if request.uri.resource_uri?
+      response['Link'] = resolved_link_header(request) if request.uri.resource_collection_uri?
+      response['Link'] = index_link_header(request)    if request.uri.resolved_resource_collection_uri?
+      response['Link'] = resolved_link_header(request) if request.uri.version_collection_uri?
+      response['Link'] = index_link_header(request)    if request.uri.resolved_version_collection_uri?
     end
 
     def versions_link_header(request)
@@ -149,7 +149,7 @@ module CloudKit
 
     def bypass?(request)
       collection = @collections.detect{|type| request.path_info.match(&quot;/#{type.to_s}&quot;)}
-      !collection &amp;&amp; !@store.meta_uri?(request.path_info)
+      !collection &amp;&amp; !request.uri.meta_uri?
     end
   end
 end</diff>
      <filename>lib/cloudkit/service.rb</filename>
    </modified>
    <modified>
      <diff>@@ -5,35 +5,27 @@ module CloudKit
     include ResponseHelpers
     include CloudKit::Util
 
-    # Initialize a new Store, creating its schema if needed. All resources in a
-    # Store are automatically versioned.
+    # Initialize a new Store. All resources in a Store are automatically
+    # versioned.
     #
     # ===Options
-    # - :adapter - Optional. A DataMapper Adapter. Defaults to in-memory SQLite.
+    # - :adapter - Optional. A Moneta instance. Defaults to Moneta::Memory.
     # - :collections - Array of resource collections to manage.
-    # - :views - Optional. Array of views to be updated based on JSON content.
     #
     # ===Example
     #   store = CloudKit::Store.new(:collections =&gt; [:foos, :bars])
     #
     # ===Example
-    #   adapter = DataMapper.setup(:default, 'mysql://user:pass@localhost/my_db')
-    #   fruit_color_view = CloudKit::ExtractionView.new(
-    #     :fruits_by_color_and_season,
-    #     :observe =&gt; :fruits,
-    #     :extract =&gt; [:color, :season])
+    #   adapter = Moneta::Tyrant.new(:host =&gt; &quot;localhost&quot;, :port =&gt; 1978)
     #   store = CloudKit::Store.new(
-    #     :adapter     =&gt; adapter,
-    #     :collections =&gt; [:foos, :fruits],
-    #     :views       =&gt; [fruit_color_view])
+    #     :adapter     =&gt; moneta_instance,
+    #     :collections =&gt; [:foos, :fruits])
     #
-    # See also: Adapter, ExtractionView, Response
+    # See also: Response
     #
     def initialize(options)
-      @db          = options[:adapter] || DataMapper.setup(:default, 'sqlite3::memory:')
+      CloudKit.setup_storage_adapter unless CloudKit.storage_adapter
       @collections = options[:collections]
-      @views       = options[:views]
-      DataMapper.auto_upgrade!
     end
 
     # Retrieve a resource or collection of resources based on a URI.
@@ -56,7 +48,6 @@ module CloudKit
     #   /{collection}/{uuid}/versions
     #   /{collection}/{uuid}/versions/_resolved
     #   /{collection}/{uuid}/versions/{etag}
-    #   /{view}
     #
     # ===Examples
     #   get('/cloudkit-meta')
@@ -66,20 +57,18 @@ module CloudKit
     #   get('/foos/123')
     #   get('/foos/123/versions')
     #   get('/foos/123/versions/abc')
-    #   get('/shiny_foos', :color =&gt; 'green')
     #
     # See also: {REST API}[http://getcloudkit.com/rest-api.html]
     #
     def get(uri, options={})
-      return invalid_entity_type                        if !valid_collection_type?(collection_type(uri))
-      return meta                                       if meta_uri?(uri)
-      return resource_collection(uri, options)          if resource_collection_uri?(uri)
-      return resolved_resource_collection(uri, options) if resolved_resource_collection_uri?(uri)
-      return resource(uri, options)                     if resource_uri?(uri)
-      return version_collection(uri, options)           if version_collection_uri?(uri)
-      return resolved_version_collection(uri, options)  if resolved_version_collection_uri?(uri)
-      return resource_version(uri, options)             if resource_version_uri?(uri)
-      return view(uri, options)                         if view_uri?(uri)
+      return invalid_entity_type                        if !valid_collection_type?(uri.collection_type)
+      return meta                                       if uri.meta_uri?
+      return resource_collection(uri, options)          if uri.resource_collection_uri?
+      return resolved_resource_collection(uri, options) if uri.resolved_resource_collection_uri?
+      return resource(uri, options)                     if uri.resource_uri?
+      return version_collection(uri, options)           if uri.version_collection_uri?
+      return resolved_version_collection(uri, options)  if uri.resolved_version_collection_uri?
+      return resource_version(uri, options)             if uri.resource_version_uri?
       status_404
     end
 
@@ -88,11 +77,11 @@ module CloudKit
     # to the way CloudKit stores its ETags and Last-Modified information on
     # write.
     def head(uri, options={})
-      return invalid_entity_type unless @collections.include?(collection_type(uri))
-      if resource_uri?(uri) || resource_version_uri?(uri)
+      return invalid_entity_type unless @collections.include?(uri.collection_type)
+      if uri.resource_uri? || uri.resource_version_uri?
         # ETag and Last-Modified are already stored for single items, so a slight
         # optimization can be made for HEAD requests.
-        result = CloudKit::Document.first(options.merge(:uri =&gt; uri))
+        result = CloudKit::Resource.first(options.merge(:uri =&gt; uri.string))
         return status_404.head unless result
         return status_410.head if result.deleted?
         return response(200, '', result.etag, result.last_modified)
@@ -106,7 +95,7 @@ module CloudKit
     def put(uri, options={})
       methods = methods_for_uri(uri)
       return status_405(methods) unless methods.include?('PUT')
-      return invalid_entity_type unless @collections.include?(collection_type(uri))
+      return invalid_entity_type unless @collections.include?(uri.collection_type)
       return data_required       unless options[:json]
       current_resource = resource(uri, options.excluding(:json, :etag, :remote_user))
       return update_resource(uri, options) if current_resource.status == 200
@@ -118,9 +107,8 @@ module CloudKit
     def post(uri, options={})
       methods = methods_for_uri(uri)
       return status_405(methods) unless methods.include?('POST')
-      return invalid_entity_type unless @collections.include?(collection_type(uri))
+      return invalid_entity_type unless @collections.include?(uri.collection_type)
       return data_required       unless options[:json]
-      uri = &quot;#{collection_uri_fragment(uri)}/#{UUID.generate}&quot;
       create_resource(uri, options)
     end
 
@@ -128,31 +116,15 @@ module CloudKit
     def delete(uri, options={})
       methods = methods_for_uri(uri)
       return status_405(methods) unless methods.include?('DELETE')
-      return invalid_entity_type unless @collections.include?(collection_type(uri))
+      return invalid_entity_type unless @collections.include?(uri.collection_type)
       return etag_required       unless options[:etag]
-      original = CloudKit::Document.first(options.excluding(:etag).merge(:uri =&gt; uri))
-      return status_404 unless (original &amp;&amp; (original.remote_user == options[:remote_user]))
-      return status_410 if original.deleted?
-      return status_412 if original.etag != options[:etag]
-      version_uri = &quot;#{original.uri}/versions/#{original.etag}&quot;
-
-      CloudKit::Document.transaction do
-        original.update_attributes(
-          :uri      =&gt; version_uri,
-          :archived =&gt; true)
-        gone = CloudKit::Document.create(
-          :uri                  =&gt; uri,
-          :collection_reference =&gt; original.collection_reference,
-          :resource_reference   =&gt; original.resource_reference,
-          :remote_user          =&gt; original.remote_user,
-          :content              =&gt; original.content,
-          :deleted              =&gt; true)
-        gone.update_attributes(:etag =&gt; nil)
-      end
-
-      unmap(uri)
+      resource = CloudKit::Resource.first(options.excluding(:etag).merge(:uri =&gt; uri.string))
+      return status_404 unless (resource &amp;&amp; (resource.remote_user == options[:remote_user]))
+      return status_410 if resource.deleted?
+      return status_412 if resource.etag != options[:etag]
 
-      return json_meta_response(200, version_uri, original.etag, original.last_modified)
+      resource.delete
+      return json_meta_response(200, resource.uri.string, resource.etag, resource.last_modified)
     end
 
     # Build a response containing the allowed methods for a given URI.
@@ -163,13 +135,13 @@ module CloudKit
 
     # Return a list of allowed methods for a given URI.
     def methods_for_uri(uri)
-      return meta_methods                         if meta_uri?(uri)
-      return resource_collection_methods          if resource_collection_uri?(uri)
-      return resolved_resource_collection_methods if resolved_resource_collection_uri?(uri)
-      return resource_methods                     if resource_uri?(uri)
-      return version_collection_methods           if version_collection_uri?(uri)
-      return resolved_version_collection_methods  if resolved_version_collection_uri?(uri)
-      return resource_version_methods             if resource_version_uri?(uri)
+      return meta_methods                         if uri.meta_uri?
+      return resource_collection_methods          if uri.resource_collection_uri?
+      return resolved_resource_collection_methods if uri.resolved_resource_collection_uri?
+      return resource_methods                     if uri.resource_uri?
+      return version_collection_methods           if uri.version_collection_uri?
+      return resolved_version_collection_methods  if uri.resolved_version_collection_uri?
+      return resource_version_methods             if uri.resource_version_uri?
     end
 
     # Return the list of methods allowed for the cloudkit-meta URI.
@@ -217,85 +189,18 @@ module CloudKit
       ['GET', 'HEAD', 'POST', 'PUT', 'DELETE', 'OPTIONS']
     end
 
-    # Return the resource collection URI fragment.
-    # Example: collection_uri_fragment('/foos/123') =&gt; '/foos
-    def collection_uri_fragment(uri)
-      &quot;/#{uri_components(uri)[0]}&quot; rescue nil
-    end
-
-    # Return the resource collection referenced by a URI.
-    # Example: collection_type('/foos/123') =&gt; :foos
-    def collection_type(uri)
-      uri_components(uri)[0].to_sym rescue nil
-    end
-
-    # Return the URI for the current version of a resource.
-    # Example: current_resource_uri('/foos/123/versions/abc') =&gt; '/foos/123'
-    def current_resource_uri(uri)
-      &quot;/#{uri_components(uri)[0..1].join('/')}&quot; rescue nil
-    end
-
-    # Splits a URI into its components
-    def uri_components(uri)
-      uri.split('/').reject{|x| x == '' || x == nil} rescue []
-    end
-
-    # Returns true if URI matches /cloudkit-meta
-    def meta_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 1 &amp;&amp; c[0] == 'cloudkit-meta'
-    end
-
-    # Returns true if URI matches /{collection}
-    def resource_collection_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 1 &amp;&amp; @collections.include?(c[0].to_sym)
-    end
-
-    # Returns true if URI matches /{collection}/_resolved
-    def resolved_resource_collection_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 2 &amp;&amp; @collections.include?(c[0].to_sym) &amp;&amp; c[1] == '_resolved'
-    end
-
-    # Returns true if URI matches /{collection}/{uuid}
-    def resource_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 2 &amp;&amp; @collections.include?(c[0].to_sym) &amp;&amp; c[1] != '_resolved'
-    end
-
-    # Returns true if URI matches /{collection}/{uuid}/versions
-    def version_collection_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 3 &amp;&amp; @collections.include?(c[0].to_sym) &amp;&amp; c[2] == 'versions'
-    end
-
-    # Returns true if URI matches /{collection}/{uuid}/versions/_resolved
-    def resolved_version_collection_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 4 &amp;&amp; @collections.include?(c[0].to_sym) &amp;&amp; c[2] == 'versions' &amp;&amp; c[3] == '_resolved'
-    end
-
-    # Returns true if URI matches /{collection}/{uuid}/versions/{etag}
-    def resource_version_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 4 &amp;&amp; @collections.include?(c[0].to_sym) &amp;&amp; c[2] == 'versions' &amp;&amp; c[3] != '_resolved'
-    end
-
-    # Returns true if URI matches /{view}
-    def view_uri?(uri)
-      c = uri_components(uri)
-      return c.size == 1 &amp;&amp; @views &amp;&amp; @views.map{|v| v.name}.include?(c[0].to_sym)
-    end
-
     # Return an array containing the response for each URI in a list.
-    def resolve_uris(uris)
+    def resolve_uris(uris) # TODO - remove if no longer needed
       result = []
       uris.each do |uri|
         result &lt;&lt; get(uri)
       end
       result
     end
+    
+    def storage_adapter
+      CloudKit.storage_adapter
+    end
 
     # Return the version number of this Store.
     def version; 1; end
@@ -312,120 +217,85 @@ module CloudKit
     # Last-Modified date in descending order.
     def resource_collection(uri, options)
       filter = options.excluding(:offset, :limit).merge(
-        :deleted.not          =&gt; true,
-        :collection_reference =&gt; collection_uri_fragment(uri),
-        :archived.not         =&gt; true,
-        :order                =&gt; [:id.desc])
-      result = CloudKit::Document.all(filter)
-      bundle_collection_result(uri, options, result)
+        :deleted              =&gt; false,
+        :collection_reference =&gt; uri.collection_uri_fragment,
+        :archived             =&gt; false)
+      result = CloudKit::Resource.current(filter)
+      bundle_collection_result(uri.string, options, result)
     end
 
     # Return all documents and their associated metadata for the given
     # collection URI.
     def resolved_resource_collection(uri, options)
-      result = CloudKit::Document.all(
+      result = CloudKit::Resource.current(
         options.excluding(:offset, :limit).merge(
-          :deleted.not          =&gt; true,
-          :collection_reference =&gt; collection_uri_fragment(uri),
-          :archived.not         =&gt; true,
-          :order                =&gt; [:id.desc]))
+          :collection_reference =&gt; uri.collection_uri_fragment))
       bundle_resolved_collection_result(uri, options, result)
     end
 
     # Return the resource for the given URI. Return 404 if not found or if
     # protected and unauthorized, 410 if authorized but deleted.
     def resource(uri, options)
-      if resource = CloudKit::Document.first(options.merge!(:uri =&gt; uri))
+      if resource = CloudKit::Resource.first(options.merge!(:uri =&gt; uri.string))
         return status_410 if resource.deleted?
-        return response(200, resource.content, resource.etag, resource.last_modified)
+        return response(200, resource.json, resource.etag, resource.last_modified)
       end
       status_404
     end
 
     # Return a collection of URIs for all versions of a resource including the
-    #current version. Sorted by Last-Modified date in descending order.
+    # current version. Sorted by Last-Modified date in descending order.
     def version_collection(uri, options)
-      found = CloudKit::Document.first(
+      found = CloudKit::Resource.first(
         options.excluding(:offset, :limit).merge(
-          :uri =&gt; current_resource_uri(uri)))
+          :uri =&gt; uri.current_resource_uri))
       return status_404 unless found
-      result = CloudKit::Document.all(
+      result = CloudKit::Resource.all( # TODO - just use found.versions
         options.excluding(:offset, :limit).merge(
-          :resource_reference =&gt; current_resource_uri(uri),
-          :deleted.not        =&gt; true,
-          :order              =&gt; [:id.desc]))
-      bundle_collection_result(uri, options, result)
+          :resource_reference =&gt; uri.current_resource_uri,
+          :deleted            =&gt; false))
+      bundle_collection_result(uri.string, options, result)
     end
 
     # Return all document versions and their associated metadata for a given
     # resource including the current version. Sorted by Last-Modified date in
     # descending order.
     def resolved_version_collection(uri, options)
-      found = CloudKit::Document.first(
+      found = CloudKit::Resource.first(
         options.excluding(:offset, :limit).merge(
-          :uri =&gt; current_resource_uri(uri)))
+          :uri =&gt; uri.current_resource_uri))
       return status_404 unless found
-      result = CloudKit::Document.all(
+      result = CloudKit::Resource.all(
         options.excluding(:offset, :limit).merge(
-          :resource_reference =&gt; current_resource_uri(uri),
-          :deleted.not        =&gt; true,
-          :order              =&gt; [:id.desc]))
+          :resource_reference =&gt; uri.current_resource_uri,
+          :deleted            =&gt; false))
       bundle_resolved_collection_result(uri, options, result)
     end
 
     # Return a specific version of a resource.
     def resource_version(uri, options)
-      result = CloudKit::Document.first(options.merge(:uri =&gt; uri))
+      result = CloudKit::Resource.first(options.merge(:uri =&gt; uri.string))
       return status_404 unless result
-      response(200, result.content, result.etag, result.last_modified)
-    end
-
-    # Return a list of URIs for all resources matching the list of key value
-    # pairs provided in the options arg.
-    def view(uri, options)
-      klass = class_for(collection_uri_fragment(uri))
-      result = klass.all(options.excluding(:offset, :limit))
-      bundle_collection_result(uri, options, result)
+      response(200, result.json, result.etag, result.last_modified)
     end
 
     # Create a resource at the specified URI.
     def create_resource(uri, options)
-      data = JSON.parse(options[:json]) rescue (return status_422)
-      resource = CloudKit::Document.create(
-        :uri                  =&gt; uri,
-        :collection_reference =&gt; collection_uri_fragment(uri),
-        :resource_reference   =&gt; uri,
-        :remote_user          =&gt; options[:remote_user],
-        :content              =&gt; options[:json])
-      map(uri, data)
-      json_meta_response(201, uri, resource.etag, resource.last_modified)
+      JSON.parse(options[:json]) rescue (return status_422)
+      resource = CloudKit::Resource.create(uri, options[:json], options[:remote_user])
+      json_meta_response(201, resource.uri.string, resource.etag, resource.last_modified)
     end
 
     # Update the resource at the specified URI. Requires the :etag option.
     def update_resource(uri, options)
-      data = JSON.parse(options[:json]) rescue (return status_422)
-      original = CloudKit::Document.first(
-        options.excluding(:json, :etag).merge(:uri =&gt; uri))
-      return status_404    unless (original &amp;&amp; (original.remote_user == options[:remote_user]))
+      JSON.parse(options[:json]) rescue (return status_422)
+      resource = CloudKit::Resource.first(
+        options.excluding(:json, :etag).merge(:uri =&gt; uri.string))
+      return status_404    unless (resource &amp;&amp; (resource.remote_user == options[:remote_user]))
       return etag_required unless options[:etag]
-      return status_412    unless options[:etag] == original.etag
-      resource = nil
-
-      CloudKit::Document.transaction do
-        original.update_attributes(
-          :uri      =&gt; &quot;#{uri}/versions/#{original.etag}&quot;,
-          :archived =&gt; true)
-        resource = CloudKit::Document.create(
-          :uri                  =&gt; uri,
-          :collection_reference =&gt; original.collection_reference,
-          :resource_reference   =&gt; original.resource_reference,
-          :remote_user          =&gt; options[:remote_user],
-          :content              =&gt; options[:json])
-      end
-
-      map(uri, data)
-
-      return json_meta_response(200, uri, resource.etag, resource.last_modified)
+      return status_412    unless options[:etag] == resource.etag
+      resource.update(options[:json])
+      return json_meta_response(200, uri.string, resource.etag, resource.last_modified)
     end
 
     # Bundle a collection of results as a list of URIs for the response.
@@ -454,7 +324,7 @@ module CloudKit
 
     # Generate a JSON URI list.
     def uri_list(list, total, offset)
-      JSON.generate(:total =&gt; total, :offset =&gt; offset, :uris =&gt; list)
+      JSON.generate(:total =&gt; total, :offset =&gt; offset, :uris =&gt; list.map { |u| u.string })
     end
 
     # Generate a JSON document list.
@@ -462,10 +332,10 @@ module CloudKit
       results = []
       list.each do |resource|
         results &lt;&lt; {
-          :uri           =&gt; resource.uri,
+          :uri           =&gt; resource.uri.string,
           :etag          =&gt; resource.etag,
           :last_modified =&gt; resource.last_modified,
-          :document      =&gt; resource.content}
+          :document      =&gt; resource.json}
       end
       JSON.generate(:total =&gt; total, :offset =&gt; offset, :documents =&gt; results)
     end
@@ -477,34 +347,9 @@ module CloudKit
       MD5::md5(data.to_s).hexdigest
     end
 
-    # Returns true if the collection type represents a view.
-    def is_view?(collection_type)
-      @views &amp;&amp; @views.map{|v| v.name}.include?(collection_type)
-    end
-
     # Returns true if the collection type is valid for this Store.
     def valid_collection_type?(collection_type)
-      @collections.include?(collection_type) ||
-        is_view?(collection_type) ||
-        collection_type.to_s == 'cloudkit-meta'
-    end
-
-    # Delegates the mapping of data from a resource into a view.
-    def map(uri, data)
-      @views.each{|view| view.map(collection_type(uri), uri, data)} if @views
+      @collections.include?(collection_type) || collection_type.to_s == 'cloudkit-meta'
     end
-
-    # Delegates removal of view data.
-    def unmap(uri)
-      @views.each{|view| view.unmap(collection_type(uri), uri)} if @views
-    end
-
-    # Return a HTTP date representing 'now.'
-    def timestamp
-      Time.now.httpdate
-    end
-
-    # Return the adapter instance used by this Store.
-    def db; @db; end
   end
 end</diff>
      <filename>lib/cloudkit/store.rb</filename>
    </modified>
    <modified>
      <diff>@@ -68,7 +68,6 @@ module CloudKit::ResponseHelpers
   end
 
   def json_error_response(status, message)
-    &quot;trying to throw a json error message for #{status} #{message}&quot;
     response(status, json_error(message), nil, nil, :cache =&gt; false)
   end
 end</diff>
      <filename>lib/cloudkit/store/response_helpers.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,22 +1,23 @@
 module CloudKit
 
   # A thin layer on top of CloudKit::Store providing consistent URIs and
-  # automatic schema upgrades if required for future releases.
+  # automatic upgrades if required for future releases.
   class UserStore
     @@store = nil
 
     def initialize(uri=nil)
       unless @@store
-        login_view = ExtractionView.new(
-          :cloudkit_login_view,
-          :observe =&gt; :cloudkit_users,
-          :extract =&gt; [:identity_url, :remember_me_token, :remember_me_expiration])
+        # login_view = ExtractionView.new(
+        #           :cloudkit_login_view,
+        #           :observe =&gt; :cloudkit_users,
+        #           :extract =&gt; [:identity_url, :remember_me_token, :remember_me_expiration])
         @@store = Store.new(
           :collections =&gt; [:cloudkit_users],
-          :views       =&gt; [login_view],
-          :adapter =&gt; DataMapper.setup(
-            :default,
-            uri || 'sqlite3::memory:'))
+          :adapter =&gt; uri)
+          # :views       =&gt; [login_view],
+          # :adapter =&gt; DataMapper.setup(
+            # :default,
+            # uri || 'sqlite3::memory:'))
       end
     end
 </diff>
      <filename>lib/cloudkit/user_store.rb</filename>
    </modified>
    <modified>
      <diff>@@ -21,13 +21,5 @@ module CloudKit
     def unquote(text)
       (text =~ /^\&quot;.*\&quot;$/) ? text[1..-2] : text
     end
-
-    def class_for(symbol)
-      ::CloudKit.const_get(class_name_for(symbol))
-    end
-
-    def class_name_for(symbol)
-      symbol.to_s.gsub(/^\//, '').gsub(/(?:^|_)(.)/) { $1.upcase }
-    end
   end
 end</diff>
      <filename>lib/cloudkit/util.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,7 +16,7 @@ describe &quot;An OAuthFilter&quot; do
   end
 
   after(:each) do
-    DataMapper.auto_migrate!
+    JANITOR.clear_store
     @store.load_static_consumer
   end
 </diff>
      <filename>spec/oauth_filter_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,7 +4,7 @@ describe &quot;An OpenIDStore&quot; do
 
   before(:each) do
     @store = CloudKit::OpenIDStore.new
-    DataMapper.auto_migrate!
+    # DataMapper.auto_migrate!
     @server = 'http://openid.claimid.com/server'
     @handle = &quot;{HMAC-SHA1}{736kwv3j}{wbhwEK==}&quot;
     @secret = &quot;\350\068\753\436\567\8327\232\241\025\254\3117&amp;\016\031\355#sV&quot;
@@ -13,7 +13,11 @@ describe &quot;An OpenIDStore&quot; do
     @type = &quot;HMAC-SHA1&quot;
     @association = OpenID::Association.new(@handle, @secret, @issued, @lifetime, @type)
     @store.store_association(@server, @association)
-    @result = JSON.parse(CloudKit::Document.first.content)
+    @result = CloudKit::Resource.all.first.parsed_json
+  end
+  
+  after(:each) do
+    JANITOR.clear_store
   end
 
   it &quot;should know its version&quot; do
@@ -45,12 +49,10 @@ describe &quot;An OpenIDStore&quot; do
     it &quot;should remove previous associations with the given server_url and association handle&quot; do
       association = OpenID::Association.new(@handle, @secret, @issued, @lifetime, @type)
       @store.store_association(@server, association)
-      associations = CloudKit::Document.all(
-        :collection_reference =&gt; &quot;/cloudkit_openid_associations&quot;,
-        :deleted              =&gt; false,
-        :conditions           =&gt; [&quot;uri = resource_reference&quot;])
+      associations = CloudKit::Resource.current(
+        :collection_reference =&gt; &quot;/cloudkit_openid_associations&quot;)
       associations.size.should == 1
-      result = JSON.parse(associations.first.content)
+      result = associations.first.parsed_json
       result['secret'].should == Base64.encode64(@secret)
     end
   end
@@ -59,10 +61,8 @@ describe &quot;An OpenIDStore&quot; do
 
     it &quot;should succeed&quot; do
       @store.remove_association(@server, @association.handle)
-      associations = CloudKit::Document.all(
-        :collection_reference =&gt; &quot;/cloudkit_openid_associations&quot;,
-        :deleted              =&gt; false,
-        :conditions           =&gt; [&quot;uri = resource_reference&quot;])
+      associations = CloudKit::Resource.current(
+        :collection_reference =&gt; &quot;/cloudkit_openid_associations&quot;)
       associations.size.should == 0
     end
   end
@@ -84,19 +84,17 @@ describe &quot;An OpenIDStore&quot; do
     end
 
     it &quot;should store the nonce&quot; do
-      nonce = CloudKit::Document.first(
+      nonce = CloudKit::Resource.first(
         :collection_reference =&gt; &quot;/cloudkit_openid_nonces&quot;,
-        :deleted              =&gt; false,
-        :conditions           =&gt; [&quot;uri = resource_reference&quot;])
+        :deleted              =&gt; false)
       nonce.should_not be_nil
     end
 
     it &quot;should reject the nonce if it has already been used&quot; do
       @store.use_nonce(@server, @time, @salt).should_not be_nil
-      nonces = CloudKit::Document.all(
+      nonces = CloudKit::Resource.all(
         :collection_reference =&gt; &quot;/cloudkit_openid_nonces&quot;,
-        :deleted              =&gt; false,
-        :conditions           =&gt; [&quot;uri = resource_reference&quot;])
+        :deleted              =&gt; false)
       nonces.size.should == 1
     end
   end</diff>
      <filename>spec/openid_store_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -33,13 +33,15 @@ describe &quot;A CloudKit::Service&quot; do
       inner_app = echo_text('martino')
       service = CloudKit::Service.new(
         inner_app, :collections =&gt; [:items, :things])
+      service.call({}) # prime storage
+      @adapter = service.store.storage_adapter
       config = Rack::Config.new(service, &amp;mock_auth)
       authed_service = Rack::Lint.new(config)
       @request = Rack::MockRequest.new(authed_service)
     end
 
     after(:each) do
-      DataMapper.auto_migrate!
+      @adapter.clear
     end
 
     it &quot;should allow requests for / to pass through&quot; do
@@ -604,24 +606,6 @@ describe &quot;A CloudKit::Service&quot; do
         response.status.should == 422
       end
 
-      it &quot;should insert into its views&quot; do
-        view = CloudKit::ExtractionView.new(
-          :fruits,
-          :observe =&gt; :items,
-          :extract =&gt; [:apple, :lemon])
-        store = CloudKit::Store.new(
-          :collections =&gt; [:items],
-          :views       =&gt; [view])
-        json = JSON.generate(:apple =&gt; 'green')
-        store.put('/items/123', :json =&gt; json)
-        json = JSON.generate(:apple =&gt; 'red')
-        store.put('/items/456', :json =&gt; json)
-        result = store.get('/fruits', :apple =&gt; 'green')
-        uris = result.parsed_content['uris']
-        uris.size.should == 1
-        uris.include?('/items/123').should be_true
-      end
-
     end
 
     describe &quot;on PUT /:collection/:id&quot; do 
@@ -753,28 +737,6 @@ describe &quot;A CloudKit::Service&quot; do
         new_etag.should_not == etag
       end
 
-      it &quot;should update its views&quot; do
-        view = CloudKit::ExtractionView.new(
-          :fruits,
-          :observe =&gt; :items,
-          :extract =&gt; [:apple, :lemon])
-        store = CloudKit::Store.new(
-          :collections =&gt; [:items],
-          :views       =&gt; [view])
-        json = JSON.generate(:apple =&gt; 'green')
-        result = store.put('/items/123', :json =&gt; json)
-        json = JSON.generate(:apple =&gt; 'red')
-        store.put(
-          '/items/123', :etag =&gt; result.parsed_content['etag'], :json =&gt; json)
-        result = store.get('/fruits', :apple =&gt; 'green')
-        uris = result.parsed_content['uris']
-        uris.size.should == 0
-        result = store.get('/fruits', :apple =&gt; 'red')
-        uris = result.parsed_content['uris']
-        uris.size.should == 1
-        uris.include?('/items/123').should be_true
-      end
-
     end
 
     describe &quot;on DELETE /:collection/:id&quot; do
@@ -887,22 +849,6 @@ describe &quot;A CloudKit::Service&quot; do
         json['total'].should == 1
       end
 
-      it &quot;should remove records from its views&quot; do
-        view = CloudKit::ExtractionView.new(
-          :fruits,
-          :observe =&gt; :items,
-          :extract =&gt; [:apple, :lemon])
-        store = CloudKit::Store.new(
-          :collections =&gt; [:items],
-          :views       =&gt; [view])
-        json = JSON.generate(:apple =&gt; 'green')
-        result = store.put('/items/123', :json =&gt; json)
-        store.delete('/items/123', :etag =&gt; result.parsed_content['etag'])
-        result = store.get('/fruits', :apple =&gt; 'green')
-        uris = result.parsed_content['uris']
-        uris.should == []
-      end
-
     end
 
     describe &quot;on OPTIONS /:collection&quot; do</diff>
      <filename>spec/service_spec.rb</filename>
    </modified>
    <modified>
      <diff>@@ -16,3 +16,13 @@ end
 def app_headers(content)
   {'Content-Type' =&gt; 'text/html', 'Content-Length' =&gt; content.length.to_s}
 end
+
+module CloudKit
+  class Janitor
+    def clear_store
+      CloudKit.storage_adapter.clear
+    end
+  end
+end
+
+JANITOR = CloudKit::Janitor.new</diff>
      <filename>spec/spec_helper.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,38 +7,4 @@ describe &quot;A CloudKit::Store&quot; do
     store.version.should == 1
   end
 
-  it &quot;should create its storage&quot; do
-    store = CloudKit::Store.new(:collections =&gt; [:items])
-    DataMapper::Resource.descendants.include?(CloudKit::Document).should be_true
-  end
-
-  it &quot;should create views when specified if they do not exist&quot; do
-    view = CloudKit::ExtractionView.new(
-      :item_colors,
-      :observe =&gt; :items,
-      :extract =&gt; [:color, :saturation])
-    store = CloudKit::Store.new(
-      :collections =&gt; [:items],
-      :views       =&gt; [view])      
-    DataMapper::Resource.descendants.include?(CloudKit::ItemColors).should be_true
-  end
-
-  it &quot;should filter using views&quot; do
-    view = CloudKit::ExtractionView.new(
-      :colors,
-      :observe =&gt; :items,
-      :extract =&gt; [:color, :saturation])
-    store = CloudKit::Store.new(
-      :collections =&gt; [:items],
-      :views       =&gt; [view])
-    json = JSON.generate(:color =&gt; 'green')
-    store.put('/items/123', :json =&gt; json)
-    json = JSON.generate(:color =&gt; 'red')
-    store.put('/items/456', :json =&gt; json)
-    result = store.get('/colors', :color =&gt; 'green')
-    uris = result.parsed_content['uris']
-    uris.size.should == 1
-    content = store.resolve_uris(uris).first.parsed_content
-    content['color'].should == 'green'
-  end
 end</diff>
      <filename>spec/store_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>lib/cloudkit/store/document.rb</filename>
    </removed>
    <removed>
      <filename>lib/cloudkit/store/extraction_view.rb</filename>
    </removed>
    <removed>
      <filename>spec/document_spec.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>b5f59dc91edd7229efcdee75a77e75d51854a0e5</id>
    </parent>
  </parents>
  <author>
    <name>Jon Crosby</name>
    <email>jon@joncrosby.me</email>
  </author>
  <url>http://github.com/jcrosby/cloudkit/commit/9cb212e93f55be44732163b2f1d1e9349fd21485</url>
  <id>9cb212e93f55be44732163b2f1d1e9349fd21485</id>
  <committed-date>2009-03-08T16:37:25-07:00</committed-date>
  <authored-date>2009-03-08T16:37:25-07:00</authored-date>
  <message>Use Tokyo Cabinet

* Add development mode in-memory store
* Add CloudKit::Resource
* Add CloudKit::URI for faster routing
* Add Rufus::Tokyo
* Remove ExtractionView in preparation for JSONQuery</message>
  <tree>3ad40e3b8038c11670ef4cdafa1469a6c148c45a</tree>
  <committer>
    <name>Jon Crosby</name>
    <email>jon@joncrosby.me</email>
  </committer>
</commit>
