Code Monkey home page Code Monkey logo

orm_adapter's Introduction

Provides a single point of entry for popular ruby ORMs. Its target audience is gem authors who want to support more than one ORM.

Example of use

require 'orm_adapter'

User # is it an ActiveRecord, DM Resource, MongoMapper or MongoId Document?

User.to_adapter.find_first :name => 'Fred' # we don't care!

user_model = User.to_adapter
user_model.get!(1)                      # find a record by id
user_model.find_first(:name => 'fred')  # find first fred
user_model.find_first(:level => 'awesome', :id => 23)
                                        # find user 23, only if it's level is awesome
user_model.find_all                     # find all users
user_model.find_all(:name => 'fred')    # find all freds
user_model.find_all(:order => :name)    # find all freds, ordered by name
user_model.create!(:name => 'fred')     # create a fred
user_model.destroy(object)              # destroy the user object

@see OrmAdapter::Base for more details of the supported API

Supported ORMs

Currently supported ORMs are ActiveRecord, DataMapper, MongoMapper, and MongoId.

We welcome you to write new adapters as gems. ORM Adapter will stay focused in having these major ORMs working. Other adapters will be named orm_adapter-somedatabase, you can find the ones available on rubygems.

To write an adapter look at lib/orm_adapter/adapters/active_record.rb for an example of implementation. To see how to test it, look at spec/orm_adapter/example_app_shared.rb, spec/orm_adapter/adapters/active_record_spec.rb. You’ll need to require the target ORM in spec/spec_helper.rb

Goals

ORM Adapter’s goal is to support a minimum API used by most of the plugins that needs agnosticism beyond Active Model.

ORM Adapter will support only basic methods, as get, find_first, create! and so forth. It is not ORM Adapter’s goal to support different query constructions, handle table joins, etc.

ORM adapter provides a consistent API for these basic class or ‘factory’ methods. It does not attempt to unify the behaviour of model instances returned by these methods. This means that unifying the behaviour of methods such as ‘model.save`, and `model.valid?` is beyond the scope of orm_adapter.

If you need complex queries, we recommend you to subclass ORM Adapters in your plugin and extend it expressing these query conditions as part of your domain logic.

History

orm_adapter is an extraction from pickle by Ian White. Pickle’s orm adapter included work by Daniel Neighman, Josh Bassett, Marc Lee, and Sebastian Zuchmanski.

José Valim suggested the extraction, and worked on the first release with Ian.

Luke Cunningham contributes the Mongo Mapper adapter.

Fred Wu contributes the #destroy methods, and :limit, :offset options for #find_all

Tim Galeckas

Development

To run the specs, you can start from the last known good set of gem dependencies in Gemfile.lock.development:

git clone http://github.com/ianwhite/orm_adapter
cd orm_adapter
bundle install
bundle exec rake spec

To run specs for different versions of ORMs, you can specify a gemfile from the ‘gemfiles` directory, e.g.

BUNDLE_GEMFILE=gemfiles/activerecord-4.1.gemfile bundle install
BUNDLE_GEMFILE=gemfiles/activerecord-4.1.gemfile bundle exec rake spec

Copyright © 2010-2013 Ian White and José Valim. See LICENSE for details.

orm_adapter's People

Contributors

andreasronge avatar cheerfulstoic avatar fredwu avatar ianwhite avatar icaruswings avatar jeremyevans avatar josevalim avatar parndt avatar petergoldstein avatar sideshowcoder avatar timgaleckas avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

orm_adapter's Issues

test fail with NoMethodError looking for "shared_examples_for" method

Running tests for ruby1.9.1 using debian/ruby-tests.rb...
/media/forge/debian/diaspora/ruby-orm-adapter-0.4.0/spec/orm_adapter/example_app_shared.rb:21:in `<top (required)>': undefined method `shared_examples_for' for main:Object (NoMethodError)
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
    from debian/ruby-tests.rb:7:in `block in <main>'
    from debian/ruby-tests.rb:7:in `each'
    from debian/ruby-tests.rb:7:in `<main>'

I'm building a debian package for this gem using gem2deb tool.

busted on Rubinius: undefined methods create_model & reload_model

using Rubinius 1.2.0 on Ubuntu 10.10

[orm_adapter](active_resource)
$> bundle exec rake spec
(in /home/jesse/projects/orm_adapter)
/home/jesse/.rvm/rubies/rbx-head/bin/rbx -S bundle exec rspec ./spec/orm_adapter_spec.rb ./spec/orm_adapter/base_spec.rb ./spec/orm_adapter/adapters/mongoid_spec.rb ./spec/orm_adapter/adapters/active_record_spec.rb ./spec/orm_adapter/adapters/data_mapper_spec.rb
.................FF.FF.F.FFFF.FFFF.FF.....FF.FF.F.FFFF.FFFF.FF......FF.FF.F.FFFF.FFF..FF

Failures:

  1) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#get!(id) should return the instance with id if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c70>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:53:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  2) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#get!(id) should allow to_key like arguments
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c70>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:58:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  3) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#get(id) should return the instance with id if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c70>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:69:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  4) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#get(id) should allow to_key like arguments
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c70>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:74:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  5) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_first (conditions) should return first model matching conditions, if it exists
     Failure/Error: user = create_model(user_class, :name => "Fred")
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c72>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:86:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  6) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_first (conditions) when conditions contain associated object, should return first model if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c72>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:95:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  7) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_first (:order => <order array>) should return first model in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c72>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:103:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  8) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_first (:conditions => <conditions hash>, :order => <order array>) should return first model matching conditions, in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c72>::Nested_3.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:111:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  9) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_all (conditions) should return only models matching conditions
     Failure/Error: user1 = create_model(user_class, :name => "Fred")
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c74>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:121:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  10) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_all (conditions) when conditions contain associated object, should return first model if it exists
     Failure/Error: user1, user2 = create_model(user_class), create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c74>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:132:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  11) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_all (:order => <order array>) should return all models in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c74>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:141:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  12) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_all (:conditions => <conditions hash>, :order => <order array>) should return only models matching conditions, in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c74>::Nested_3.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:150:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  13) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#create!(attributes) should create a model with the passed attributes
     Failure/Error: reload_model(user).name.should == "Fred"
     NoMethodError:
       undefined method `reload_model' on an instance of #<Class:0x9c70>::Nested_5.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:161:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  14) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#create!(attributes) when attributes contain an associated object, should create a model with the attributes
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c70>::Nested_5.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:169:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  15) Mongoid::Document::OrmAdapter it should behave like example app with orm_adapter adapter instance#create!(attributes) when attributes contain an has_many assoc, should create a model with the attributes
     Failure/Error: notes = [create_model(note_class), create_model(note_class)]
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0x9c70>::Nested_5.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/mongoid_spec.rb:41
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:175:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  16) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#get!(id) should return the instance with id if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa000>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:53:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  17) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#get!(id) should allow to_key like arguments
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa000>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:58:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  18) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#get(id) should return the instance with id if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa000>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:69:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  19) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#get(id) should allow to_key like arguments
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa000>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:74:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  20) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_first (conditions) should return first model matching conditions, if it exists
     Failure/Error: user = create_model(user_class, :name => "Fred")
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa002>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:86:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  21) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_first (conditions) when conditions contain associated object, should return first model if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa002>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:95:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  22) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_first (:order => <order array>) should return first model in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa002>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:103:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  23) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_first (:conditions => <conditions hash>, :order => <order array>) should return first model matching conditions, in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa002>::Nested_3.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:111:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  24) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_all (conditions) should return only models matching conditions
     Failure/Error: user1 = create_model(user_class, :name => "Fred")
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa004>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:121:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  25) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_all (conditions) when conditions contain associated object, should return first model if it exists
     Failure/Error: user1, user2 = create_model(user_class), create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa004>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:132:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  26) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_all (:order => <order array>) should return all models in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa004>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:141:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  27) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#find_all (:conditions => <conditions hash>, :order => <order array>) should return only models matching conditions, in specified order
     Failure/Error: user1 = create_model(user_class, :name => "Fred", :rating => 1)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa004>::Nested_3.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:150:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  28) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#create!(attributes) should create a model with the passed attributes
     Failure/Error: reload_model(user).name.should == "Fred"
     NoMethodError:
       undefined method `reload_model' on an instance of #<Class:0xa000>::Nested_5.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:161:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  29) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#create!(attributes) when attributes contain an associated object, should create a model with the attributes
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa000>::Nested_5.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:169:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  30) [ActiveRecord orm adapter] it should behave like example app with orm_adapter adapter instance#create!(attributes) when attributes contain an has_many assoc, should create a model with the attributes
     Failure/Error: notes = [create_model(note_class), create_model(note_class)]
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa000>::Nested_5.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/active_record_spec.rb:48
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:175:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  31) DataMapper::Resource::OrmAdapter it should behave like example app with orm_adapter adapter instance#get!(id) should return the instance with id if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa32e>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/data_mapper_spec.rb:45
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:53:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  32) DataMapper::Resource::OrmAdapter it should behave like example app with orm_adapter adapter instance#get!(id) should allow to_key like arguments
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa32e>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/data_mapper_spec.rb:45
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:58:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  33) DataMapper::Resource::OrmAdapter it should behave like example app with orm_adapter adapter instance#get(id) should return the instance with id if it exists
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa32e>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/data_mapper_spec.rb:45
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:69:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  34) DataMapper::Resource::OrmAdapter it should behave like example app with orm_adapter adapter instance#get(id) should allow to_key like arguments
     Failure/Error: user = create_model(user_class)
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa32e>::Nested_2.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/data_mapper_spec.rb:45
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:74:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/loader.rb:557:in `epilogue'
     # kernel/loader.rb:648:in `main'
     # kernel/loader.rb:658:in `main'
     # kernel/loader.rb:669:in `__script__'

  35) DataMapper::Resource::OrmAdapter it should behave like example app with orm_adapter adapter instance#find_first (conditions) should return first model matching conditions, if it exists
     Failure/Error: user = create_model(user_class, :name => "Fred")
     NoMethodError:
       undefined method `create_model' on an instance of #<Class:0xa330>::Nested_1.
     Shared Example Group: "example app with orm_adapter" called from ./spec/orm_adapter/adapters/data_mapper_spec.rb:45
     # kernel/delta/kernel.rb:85:in `method_missing'
     # ./spec/orm_adapter/example_app_shared.rb:86:in `__script__'
     # kernel/common/eval.rb:164:in `instance_eval'
     # kernel/common/throw_catch.rb:34:in `catch'
     # kernel/common/throw_catch.rb:13:in `register'
     # kernel/common/throw_catch.rb:33:in `catch'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:64:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'
     # kernel/bootstrap/array.rb:90:in `map'
     # kernel/bootstrap/array.rb:72:in `each'
     # kernel/bootstrap/array.rb:88:in `map'

Remove model_classes methods

The reason for OrmAdapter::Base.model_classes is historical, for pickle's requirement to generate a regexp matching all available models.

Pickle's not going be using this approach in future.

I think that this functionality cross-cuts orm_adapter's main concern, and so it should be removed.

@josevalim wdyt?

create branch for activerecord (rails) 4

I realize updating orm_adapter for activerecord4 compatibility will take some work.

I started on it. See this project/branch.

Could we create a rails4 changes on a separate branch? If you have a different organization preference, I am totally open to that too.

mongoid master (3.0.0) removes klass.first(:conditions...)

Hi,

the new mongoid master removes any options from klass.first, so line 32 in
lib/orm_adapter/adapters/mongoid.rb fails.

Changing

# @see OrmAdapter::Base#get
def get(id)
  klass.first(:conditions => { :id => wrap_key(id) })
end

to

# @see OrmAdapter::Base#get
def get(id)
  klass.where(:_id => wrap_key(id)).first
end

should work.
Best regards,
Frank

Add more comprehensive CI

Currently the build is tested on 1.9.3, with a locked Gemfile (because of conflicts between latest versions of mongodb and mongo_mapper). Also, rbi and jruby don;t support all the backends that orm_adapter supports.

So, rejig the test suite to allow isolating the adapter tests (easy) and grok the travis docs to do a build matrix

get implementation for ActiveRecord

Hey folks, I'm making use of encrypted_id which overrides ActiveRecord's find method in order to handle decryption of an obfuscated id. I'm also using devise which makes use of orm_adapter to interact with ActiveRecord. At present devise is using the get method which is implemented using where/first vs a find and thus encrypted_id override doesn't work.

In order to consolidate on overriding find I have implemented a new version of the get method below.

# lib/orm_adapters/adapters/active_record.rb

    # @see OrmAdapter::Base#get
    def get(id)

      # Ignore exceptions, be consistent on use of find for get and get!
      begin
        klass.find(wrap_key(id))
      rescue
        nil
      end

      # OR use dynamic finder which will return nil on not match, easier to subclass than a where
      klass.find_by_id(wrap_key(id))

      # Previous implementation with where and first
      # klass.where(klass.primary_key => wrap_key(id)).first
    end

Any thoughts on why this is a bad idea or maybe a better way that it could be done? If I opened a PR is this something that orm_adapter would be willing to accept?

Thanks for the ideas / feedback.

Deprecation warning in rails generator help

When calling
$ rails generate --help

there occurs an deprecation warning when adding devise gem to the Gemfile, which depends on orm_adapter:

"DEPRECATION WARNING: require "activerecord" is deprecated and will be removed in Rails 3. Use require "active_record" instead. (called from /usr/lib/ruby/1.8/activerecord.rb:2)"

Found the require statement in orm_adapeter-0.0.5/lib/orm_adapter/adapters/active_record.rb

orm_adapeter Version 0.0.5

Rails server not running due to ORM Adapter

Hi,

I am using Ubuntu 14.04, orm_adapter v.0.5, Rails 3.2.11 and ruby 1.9.3-2.0.

After i run rails server command, I am getting the following warnings in rails console when I write localhost:3000 on browser and hit enter (No Data Received).

path_to_rvm_folder/gems/ruby-2.0.0-p247/gems/orm_adapter-0.5.0/lib/orm_adapter/adapters/active_record.rb:81: warning: already initialized constant ActiveRecord::Base::OrmAdapter

path_to_rvm_folder/gems/ruby-2.0.0-p247/gems/orm_adapter-0.5.0/lib/orm_adapter/adapters/active_record.rb:81: warning: previous definition of OrmAdapter was here

This happened after I upgraded my Ubuntu version from 13.10 to 14.04 but other projects on my pc are not having such a problem, they are working fine.

Any suggestions?

Add Couchbase 2.0 Support

Couchbase 2.0 now supports indexing. It also scales better then MongoDB because MongoDB currently has database wide locks.

In the future it will still have collection wide locks.

I will try to work on a Couchbase adapter, but may not have enough time :-(

ActiveRecord adapter bypasses strong_parameters

ActiveRecord 4.1.5 addressed a security vulnerability whereby parameters passed to where were not sanitized, so cases where where was used in conjunction with create could potentially allow injecting arbitrary attributes if the conditions hash was user-specified: rails/rails@9456990

orm_adapter's find_all method, because it uses conditions_to_fields and recreates a conditions hash from scratch, discards the original hash, which may have been a strong parameters hash, in which case that information is now lost.

This may not actually be an issue, since vulnerable code would need to be depending on both orm_adapter's and ActiveRecord's API (chaining create onto the return value of find_all), which defeats the purpose of using orm_adapter in the first place, but I thought it worth mentioning, since it's a somewhat surprising behaviour that's different from what ActiveRecord does.

I noticed this inconsistency in an override to a Devise controller that started erroring with ForbiddenAttributes when I updated to Rails 4.1.5. The original Devise controller used find_first and so bypassed strong parameters, while my version used Rails' where().first and threw the error.

Do you think it's worth updating orm_adapter to preserve the strong params information, either as a security concern or just for consistency of behaviour with the equivalent ActiveRecord APIs?

support for includes

ActiveRecord and Mongoid supports includes to eager load relations, I'm not sure about the other ORM's. Should orm_adapter support includes? I think yes. If there are more 👍 for this, I will provide a PR.

ORM collection adapter

First, great gem! I wasn't very aware of what was doing it for devise under the hood, but the need of such a tool led me here. It's still quite embryonic, but that's also a good thing.

I was wondering whether you would like to entertain the idea of also "adapting" collections. Current issues I have is the diverse API for such common stuff like scoping, build/create/destroy actions on it, class of its elements, batched search, among others. So, this would more a feature branch request than an issue.

Column metadata

Would it make sense to extend ORM Adapter to also abstract metadata about columns (basic types & related info)? It would be very helpful for projects like a model admin, and anything else that needs a bit deeper introspection into the model's information. I'm guessing this is a large undertaking, though...

I'm interested in the column base type (string, numeric, integer, boolean, date/time/datetime) - and also relations (as minimal as possible): cardinality & target model class

Plan to add #update, #save or #destroy methods?

Hi Ian,

I think this gem is a create initiative. I'm wondering though whether there is a plan to add extra methods such as #save, #update or #destroy method to the api. This seems to be necessary even for a gem such as devise. Although I guess #destroy and #save seem to be universally used for orms.

Looking forward to your thoughts.

Cheers,
Jeroen

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.