Skip to content

Instantly share code, notes, and snippets.

@saimonmoore
Created March 24, 2010 17:24
Show Gist options
  • Select an option

  • Save saimonmoore/342513 to your computer and use it in GitHub Desktop.

Select an option

Save saimonmoore/342513 to your computer and use it in GitHub Desktop.
require 'rubygems'
require 'lib/couchdb_adapter'
COUCHDB_LOCATION = "couchdb://localhost:5984/test_cdb_adapter"
DataMapper.setup(
:couch,
Addressable::URI.parse(COUCHDB_LOCATION)
)
#drop/recreate db
@adapter = DataMapper::Repository.adapters[:couch]
@adapter.send(:http_delete, "/#{@adapter.escaped_db_name}")
@adapter.send(:http_put, "/#{@adapter.escaped_db_name}")
class Person
include DataMapper::Couch::Resource
def self.default_repository_name
:couch
end
property :name, String
view_by :name
belongs_to :company
end
class Employee < Person
property :title, String
view_by :title
end
class Company
include DataMapper::Couch::Resource
def self.default_repository_name
:couch
end
property :name, String
view_by :name
has n, :persons
end
p Person.views
p Employee.views
Person.auto_migrate!
Employee.auto_migrate!
Company.auto_migrate!
p "1. Create Person"
p bob = Person.create(:name => 'Bob')
# p Person.get(bob.id)
# p Person.all(:view => { :test => :options}).query.conditions.select {|condition| condition[1].name == :view}
p Person.first
p Person.all(:view => {:by_name => {}})
# p Employee.all(:view => {:by_title => {}})
p "2. Create Company"
p webtypes = Company.create(:name => 'Webtypes')
p Company.first
p Company.all(:view => {:by_name => {}})
p Company.views
p "3. Create associations"
p webtypes.persons << bob
p webtypes.save
p webtypes = Company.first
p webtypes.persons
p webtypes.persons.first
p webtypes.persons.first.company
Run:
saimon@artemis dm-couchdb-adapter[ree-1.8.7-2009.10](master) $ ruby test.rb
{"all"=>{"map"=>"function(doc) {\n if (doc['couchdb_type'] == 'Person' || doc['couchdb_type'] == 'Employee') {\n emit(doc['_id'], doc);\n }\n}\n"}, "by_name"=>{"map"=>"function(doc) {\n if (doc['couchdb_type'] == 'Person' || doc['couchdb_type'] == 'Employee' && doc['name']) {\n emit(doc['name'], doc);\n }\n}\n"}}
{"all"=>{"map"=>"function(doc) {\n if (doc['couchdb_type'] == 'Employee') {\n emit(doc['_id'], doc);\n }\n}\n"}, "by_title"=>{"map"=>"function(doc) {\n if (doc['couchdb_type'] == 'Employee' && doc['title']) {\n emit(doc['title'], doc);\n }\n}\n"}}
"1. Create Person"
#<Person attachments=nil id="3d6ff6bccaead2c931b1008c03ede985" rev="1-19c7d3becc4e30f3ecdb8926da31691b" view=nil couchdb_type=Person name="Bob" company_id=nil>
[#<Person attachments=nil id="3d6ff6bccaead2c931b1008c03ede985" rev="1-19c7d3becc4e30f3ecdb8926da31691b" view=nil couchdb_type=Person name="Bob" company_id=nil>]
#<DataMapper::Collection:0x101181d50 @head=[], @query=#<DataMapper::Query @repository=:couch @model=Person @fields=[#<Property:Person:attachments>, #<Property:Person:id>, #<Property:Person:rev>, #<Property:Person:view>, #<Property:Person:couchdb_type>, #<Property:Person:name>, #<Property:Person:company_id>] @links=[] @conditions=[[:eql, #<Property:Person:view>, {:by_name=>{}}]] @order=[#<DataMapper::Query::Direction #<Property:Person:id> asc>] @limit=nil @offset=0 @reload=false @unique=false>, @tail=[], @loaded=false, @cache={}, @array=[], @frozen=false, @reapers=[], @key_properties=[#<Property:Person:id>], @load_with_proc=#<Proc:0x0000000100671758@./lib/couchdb_adapter.rb:100>>
"2. Create Company"
#<Company attachments=nil id="21d5e39b5ac84540f31cd9ee615f3acd" rev="1-f2987c266845b5d16f24c5e34926a653" view=nil couchdb_type=Company name="Webtypes">
[#<Company attachments=nil id="21d5e39b5ac84540f31cd9ee615f3acd" rev="1-f2987c266845b5d16f24c5e34926a653" view=nil couchdb_type=Company name="Webtypes">]
#<DataMapper::Collection:0x101167720 @head=[], @query=#<DataMapper::Query @repository=:couch @model=Company @fields=[#<Property:Company:attachments>, #<Property:Company:id>, #<Property:Company:rev>, #<Property:Company:view>, #<Property:Company:couchdb_type>, #<Property:Company:name>] @links=[] @conditions=[[:eql, #<Property:Company:view>, {:by_name=>{}}]] @order=[#<DataMapper::Query::Direction #<Property:Company:id> asc>] @limit=nil @offset=0 @reload=false @unique=false>, @tail=[], @loaded=false, @cache={}, @array=[], @frozen=false, @reapers=[], @key_properties=[#<Property:Company:id>], @load_with_proc=#<Proc:0x0000000100671758@./lib/couchdb_adapter.rb:100>>
{"all"=>{"map"=>"function(doc) {\n if (doc['couchdb_type'] == 'Company') {\n emit(doc['_id'], doc);\n }\n}\n"}, "by_name"=>{"map"=>"function(doc) {\n if (doc['couchdb_type'] == 'Company' && doc['name']) {\n emit(doc['name'], doc);\n }\n}\n"}}
"3. Create associations"
/Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:106:in `send': undefined method `persons_association' for nil:NilClass (NoMethodError)
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:106:in `get_children'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:105:in `each'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:105:in `get_children'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:172:in `with_repository'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/support/kernel.rb:6:in `repository'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core.rb:181:in `repository'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/repository.rb:44:in `scope'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core.rb:181:in `repository'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/support/kernel.rb:6:in `repository'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:172:in `with_repository'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/relationship.rb:82:in `get_children'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/one_to_many.rb:251:in `children'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/one_to_many.rb:255:in `assert_mutable'
from /Users/saimon/.rvm/gems/ree/1.8.7%myapp/gems/dm-core-0.9.11/lib/dm-core/associations/one_to_many.rb:93:in `<<'
from test.rb:74
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment