couch_crumbs 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/Manifest.txt +29 -0
- data/README.rdoc +131 -0
- data/Rakefile +37 -0
- data/lib/core_ext/array.rb +9 -0
- data/lib/couch_crumbs/database.rb +68 -0
- data/lib/couch_crumbs/design.rb +129 -0
- data/lib/couch_crumbs/document.rb +471 -0
- data/lib/couch_crumbs/json/all.json +5 -0
- data/lib/couch_crumbs/json/children.json +5 -0
- data/lib/couch_crumbs/json/design.json +5 -0
- data/lib/couch_crumbs/json/simple.json +5 -0
- data/lib/couch_crumbs/query.rb +95 -0
- data/lib/couch_crumbs/server.rb +45 -0
- data/lib/couch_crumbs/view.rb +73 -0
- data/lib/couch_crumbs.rb +45 -0
- data/script/console +11 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/core_ext/array_spec.rb +21 -0
- data/spec/couch_crumbs/database_spec.rb +69 -0
- data/spec/couch_crumbs/design_spec.rb +103 -0
- data/spec/couch_crumbs/document_spec.rb +473 -0
- data/spec/couch_crumbs/server_spec.rb +63 -0
- data/spec/couch_crumbs/view_spec.rb +41 -0
- data/spec/couch_crumbs_spec.rb +18 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +20 -0
- data/tasks/rspec.rake +21 -0
- metadata +105 -0
data/lib/couch_crumbs.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
|
3
|
+
require "facets/string/modulize"
|
4
|
+
|
5
|
+
require "core_ext/array.rb"
|
6
|
+
|
7
|
+
require "couch_crumbs/server.rb"
|
8
|
+
require "couch_crumbs/query.rb"
|
9
|
+
require "couch_crumbs/database.rb"
|
10
|
+
require "couch_crumbs/document.rb"
|
11
|
+
require "couch_crumbs/design.rb"
|
12
|
+
require "couch_crumbs/view.rb"
|
13
|
+
|
14
|
+
module CouchCrumbs
|
15
|
+
|
16
|
+
# Defaults
|
17
|
+
@@default_server = @@default_database = nil
|
18
|
+
|
19
|
+
# Connect to a specific couch server/database
|
20
|
+
#
|
21
|
+
# ==== Parameters
|
22
|
+
# server_uri<String>:: host/port in URI form
|
23
|
+
# default_database<String>:: default database name
|
24
|
+
#
|
25
|
+
def self.connect(opts = {})
|
26
|
+
@@default_server = Server.new(:uri => opts[:server_uri])
|
27
|
+
@@default_database = Database.new(:name => opts[:default_database])
|
28
|
+
|
29
|
+
# return true if both server and database were instantiated
|
30
|
+
(@@default_server && @@default_database) ? true : (raise "unable to connect CouchCrumbs to a CouchDB instance")
|
31
|
+
end
|
32
|
+
|
33
|
+
# Return a default server for use
|
34
|
+
#
|
35
|
+
def self.default_server
|
36
|
+
@@default_server or (raise "default server is only available after calling CouchCrumbs::connect")
|
37
|
+
end
|
38
|
+
|
39
|
+
# Return a default database that models will use
|
40
|
+
#
|
41
|
+
def self.default_database
|
42
|
+
@@default_database or (raise "default database is only available after calling CouchCrumbs::connect")
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
data/script/console
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# File: script/console
|
3
|
+
irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
|
4
|
+
|
5
|
+
libs = " -r irb/completion"
|
6
|
+
libs = " -r ruby-debug"
|
7
|
+
# Perhaps use a console_lib to store any extra methods I may want available in the cosole
|
8
|
+
# libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
|
9
|
+
libs << " -r #{File.dirname(__FILE__) + '/../lib/couch_crumbs.rb'}"
|
10
|
+
puts "Loading couch_crumbs gem"
|
11
|
+
exec "#{irb} #{libs} --simple-prompt"
|
data/script/destroy
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/destroy'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Destroy.new.run(ARGV)
|
data/script/generate
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'rubigen'
|
6
|
+
rescue LoadError
|
7
|
+
require 'rubygems'
|
8
|
+
require 'rubigen'
|
9
|
+
end
|
10
|
+
require 'rubigen/scripts/generate'
|
11
|
+
|
12
|
+
ARGV.shift if ['--help', '-h'].include?(ARGV[0])
|
13
|
+
RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
|
14
|
+
RubiGen::Scripts::Generate.new.run(ARGV)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
+
|
3
|
+
describe Array do
|
4
|
+
|
5
|
+
context "#destroy!" do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@object = mock(:object)
|
9
|
+
|
10
|
+
@array.stub!(:all).and_return([@object])
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should destroy all" do
|
14
|
+
@object.should_receive(:destroy!).once
|
15
|
+
|
16
|
+
@array.all.destroy!
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
+
|
3
|
+
module CouchCrumbs
|
4
|
+
|
5
|
+
describe Database do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@database = CouchCrumbs::default_database
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#initialize" do
|
12
|
+
|
13
|
+
it "should create a new database" do
|
14
|
+
Database.new.should be_kind_of(Database)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should return an existing database" do
|
18
|
+
Database.new(:name => CouchCrumbs::default_database.name).should be_kind_of(Database)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#documents" do
|
24
|
+
|
25
|
+
before do
|
26
|
+
@resource = Resource.create!
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should return an array of all documents" do
|
30
|
+
@database.documents(:limit => 1_000_000).collect{ |doc| doc.id }.should include(@resource.id)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should support optional view parameters" do
|
34
|
+
@database.documents(:key => @resource.id).collect{ |d| d.id }.should eql([@resource.id])
|
35
|
+
end
|
36
|
+
|
37
|
+
after do
|
38
|
+
@resource.destroy!
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#design_documents" do
|
44
|
+
|
45
|
+
before do
|
46
|
+
@design = Design.get!(@database, :name => "spec")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should return an array of design documents" do
|
50
|
+
@database.design_documents.collect{ |d| d.rev }.should include(@design.rev)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "#destroy!" do
|
56
|
+
|
57
|
+
before do
|
58
|
+
Database.new(:name => "destroy").destroy!
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should destroy a database" do
|
62
|
+
CouchCrumbs::default_server.databases.collect{ |db| db.name }.should_not include("destroy")
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper.rb'
|
2
|
+
|
3
|
+
module CouchCrumbs
|
4
|
+
|
5
|
+
describe Design do
|
6
|
+
|
7
|
+
before do
|
8
|
+
@database = CouchCrumbs::default_database
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#get!" do
|
12
|
+
|
13
|
+
it "should find or create a design document" do
|
14
|
+
Design.get!(@database, :name => "get").should be_kind_of(Design)
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "#initialize" do
|
20
|
+
|
21
|
+
before do
|
22
|
+
@design = Design.get!(@database, :name => "example")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should create a new design document" do
|
26
|
+
@design.should be_kind_of(Design)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should have an id property" do
|
30
|
+
@design.id.should eql("_design/example")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should have a name property" do
|
34
|
+
@design.name.should eql("example")
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#save!" do
|
40
|
+
|
41
|
+
before do
|
42
|
+
@design = Design.new(@database, :name => "save")
|
43
|
+
|
44
|
+
@design.save!
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should have a revision property" do
|
48
|
+
@design.rev.should_not be_nil
|
49
|
+
end
|
50
|
+
|
51
|
+
after do
|
52
|
+
@design.destroy!
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
describe "#destroy!" do
|
58
|
+
|
59
|
+
before do
|
60
|
+
@design = Design.get!(@database, :name => "destroy")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should destroy the design document" do
|
64
|
+
@design.destroy!.should be_true
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "#views" do
|
70
|
+
|
71
|
+
before do
|
72
|
+
# Grab the design doc from the Person class declared above
|
73
|
+
@design = Design.get!(@database, :name => "person")
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should return an array of views" do
|
77
|
+
@design.views.should_not be_empty
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should support an optional name parameter to single a specific view" do
|
81
|
+
@design.views(:name => "all").should be_kind_of(View)
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
describe "#add_view" do
|
87
|
+
|
88
|
+
before do
|
89
|
+
# Manually construct a design doc and view on Person
|
90
|
+
@design = Design.get!(@database, :name => "append")
|
91
|
+
|
92
|
+
@view = View.create!(@design, "title", View.simple_json(Person.crumb_type, :title))
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should append a view to the list of views" do
|
96
|
+
@design.views.collect{ |v| v.hash }.should eql([@view.hash])
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|