juozasg-couchrest 0.10.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/LICENSE +176 -0
  2. data/README.rdoc +67 -0
  3. data/Rakefile +86 -0
  4. data/THANKS +15 -0
  5. data/bin/couchapp +58 -0
  6. data/bin/couchdir +20 -0
  7. data/bin/couchview +48 -0
  8. data/examples/model/example.rb +138 -0
  9. data/examples/word_count/markov +38 -0
  10. data/examples/word_count/views/books/chunked-map.js +3 -0
  11. data/examples/word_count/views/books/united-map.js +1 -0
  12. data/examples/word_count/views/markov/chain-map.js +6 -0
  13. data/examples/word_count/views/markov/chain-reduce.js +7 -0
  14. data/examples/word_count/views/word_count/count-map.js +6 -0
  15. data/examples/word_count/views/word_count/count-reduce.js +3 -0
  16. data/examples/word_count/word_count.rb +67 -0
  17. data/examples/word_count/word_count_query.rb +39 -0
  18. data/lib/couchrest/commands/generate.rb +71 -0
  19. data/lib/couchrest/commands/push.rb +103 -0
  20. data/lib/couchrest/core/database.rb +173 -0
  21. data/lib/couchrest/core/design.rb +89 -0
  22. data/lib/couchrest/core/document.rb +60 -0
  23. data/lib/couchrest/core/model.rb +557 -0
  24. data/lib/couchrest/core/server.rb +51 -0
  25. data/lib/couchrest/core/view.rb +4 -0
  26. data/lib/couchrest/helper/file_manager.rb +317 -0
  27. data/lib/couchrest/helper/pager.rb +103 -0
  28. data/lib/couchrest/helper/streamer.rb +44 -0
  29. data/lib/couchrest/helper/templates/bar.txt +11 -0
  30. data/lib/couchrest/helper/templates/example-map.js +8 -0
  31. data/lib/couchrest/helper/templates/example-reduce.js +10 -0
  32. data/lib/couchrest/helper/templates/index.html +26 -0
  33. data/lib/couchrest/monkeypatches.rb +24 -0
  34. data/lib/couchrest.rb +125 -0
  35. data/spec/couchapp_spec.rb +87 -0
  36. data/spec/couchrest/core/couchrest_spec.rb +191 -0
  37. data/spec/couchrest/core/database_spec.rb +478 -0
  38. data/spec/couchrest/core/design_spec.rb +131 -0
  39. data/spec/couchrest/core/document_spec.rb +96 -0
  40. data/spec/couchrest/core/model_spec.rb +660 -0
  41. data/spec/couchrest/helpers/file_manager_spec.rb +203 -0
  42. data/spec/couchrest/helpers/pager_spec.rb +122 -0
  43. data/spec/couchrest/helpers/streamer_spec.rb +23 -0
  44. data/spec/fixtures/attachments/couchdb.png +0 -0
  45. data/spec/fixtures/attachments/test.html +11 -0
  46. data/spec/fixtures/views/lib.js +3 -0
  47. data/spec/fixtures/views/test_view/lib.js +3 -0
  48. data/spec/fixtures/views/test_view/only-map.js +4 -0
  49. data/spec/fixtures/views/test_view/test-map.js +3 -0
  50. data/spec/fixtures/views/test_view/test-reduce.js +3 -0
  51. data/spec/spec.opts +6 -0
  52. data/spec/spec_helper.rb +14 -0
  53. data/utils/remap.rb +27 -0
  54. data/utils/subset.rb +30 -0
  55. metadata +154 -0
@@ -0,0 +1,203 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe CouchRest::FileManager do
4
+ before(:all) do
5
+ @cr = CouchRest.new(COUCHHOST)
6
+ @db = @cr.database(TESTDB)
7
+ @db.delete! rescue nil
8
+ @db = @cr.create_db(TESTDB) rescue nil
9
+ end
10
+ it "should initialize" do
11
+ @fm = CouchRest::FileManager.new(TESTDB)
12
+ @fm.should_not be_nil
13
+ end
14
+ it "should require a db name" do
15
+ lambda{CouchRest::FileManager.new}.should raise_error
16
+ end
17
+ it "should accept a db name" do
18
+ @fm = CouchRest::FileManager.new(TESTDB, 'http://localhost')
19
+ @fm.db.name.should == TESTDB
20
+ end
21
+ it "should default to localhost couchdb" do
22
+ @fm = CouchRest::FileManager.new(TESTDB)
23
+ @fm.db.host.should == 'http://localhost:5984'
24
+ end
25
+ end
26
+
27
+ describe CouchRest::FileManager, "generating an app" do
28
+ before(:all) do
29
+ @appdir = FIXTURE_PATH + '/couchapp'
30
+ `rm -rf #{@appdir}`
31
+ `mkdir -p #{@appdir}`
32
+ CouchRest::FileManager.generate_app(@appdir)
33
+ end
34
+ it "should create an attachments directory" do
35
+ Dir["#{@appdir}/*"].select{|x|x =~ /attachments/}.length.should == 1
36
+ end
37
+ it "should create a views directory" do
38
+ Dir["#{@appdir}/*"].select{|x|x =~ /views/}.length.should == 1
39
+ end
40
+ it "should create a foo directory" do
41
+ Dir["#{@appdir}/*"].select{|x|x =~ /foo/}.length.should == 1
42
+ end
43
+ it "should create index.html" do
44
+ html = File.open("#{@appdir}/_attachments/index.html").read
45
+ html.should match(/DOCTYPE/)
46
+ end
47
+ it "should create bar.txt" do
48
+ html = File.open("#{@appdir}/foo/bar.txt").read
49
+ html.should match(/Couchapp will/)
50
+ end
51
+ it "should create an example view" do
52
+ map = File.open("#{@appdir}/views/example-map.js").read
53
+ map.should match(/function\(doc\)/)
54
+ reduce = File.open("#{@appdir}/views/example-reduce.js").read
55
+ reduce.should match(/rereduce/)
56
+ end
57
+ end
58
+
59
+ describe CouchRest::FileManager, "pushing an app" do
60
+ before(:all) do
61
+ @cr = CouchRest.new(COUCHHOST)
62
+ @db = @cr.database(TESTDB)
63
+ @db.delete! rescue nil
64
+ @db = @cr.create_db(TESTDB) rescue nil
65
+
66
+ @appdir = FIXTURE_PATH + '/couchapp'
67
+ `rm -rf #{@appdir}`
68
+ `mkdir -p #{@appdir}`
69
+ CouchRest::FileManager.generate_app(@appdir)
70
+
71
+ @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
72
+ r = @fm.push_app(@appdir, "couchapp")
73
+ end
74
+ it "should create a design document" do
75
+ lambda{@db.get("_design/couchapp")}.should_not raise_error
76
+ end
77
+ it "should create the views" do
78
+ doc = @db.get("_design/couchapp")
79
+ doc['views']['example']['map'].should match(/function/)
80
+ end
81
+ it "should create the index" do
82
+ doc = @db.get("_design/couchapp")
83
+ doc['_attachments']['index.html']["content_type"].should == 'text/html'
84
+ end
85
+ it "should push bar.txt and pals" do
86
+ File.open("#{@appdir}/foo/test.json",'w') do |f|
87
+ f.write("[1,2,3,4]")
88
+ end
89
+ r = @fm.push_app(@appdir, "couchapp")
90
+ doc = @db.get("_design/couchapp")
91
+ doc["foo"].should_not be_nil
92
+ doc["foo"]["bar"].should include("Couchapp will")
93
+ doc["foo"]["test"].should == [1,2,3,4]
94
+ end
95
+ it "should push json as json" do
96
+ File.open("#{@appdir}/test.json",'w') do |f|
97
+ f.write("[1,2,3,4]")
98
+ end
99
+ r = @fm.push_app(@appdir, "couchapp")
100
+ doc = @db.get("_design/couchapp")
101
+ doc['test'].should == [1,2,3,4]
102
+ end
103
+ it "should apply keys from doc.json directly to the doc" do
104
+ File.open("#{@appdir}/doc.json",'w') do |f|
105
+ f.write('{"magical":"so magic"}')
106
+ end
107
+ r = @fm.push_app(@appdir, "couchapp")
108
+ doc = @db.get("_design/couchapp")
109
+ doc['magical'].should == "so magic"
110
+ end
111
+ end
112
+
113
+
114
+ describe CouchRest::FileManager, "pushing views" do
115
+ before(:all) do
116
+ @cr = CouchRest.new(COUCHHOST)
117
+ @db = @cr.database(TESTDB)
118
+ @db.delete! rescue nil
119
+ @db = @cr.create_db(TESTDB) rescue nil
120
+
121
+ @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
122
+ @view_dir = FIXTURE_PATH + '/views'
123
+ ds = @fm.push_views(@view_dir)
124
+ @design = @db.get("_design/test_view")
125
+ end
126
+ it "should create a design document for each folder" do
127
+ @design["views"].should_not be_nil
128
+ end
129
+ it "should push a map and reduce view" do
130
+ @design["views"]["test-map"].should_not be_nil
131
+ @design["views"]["test-reduce"].should_not be_nil
132
+ end
133
+ it "should push a map only view" do
134
+ @design["views"]["only-map"].should_not be_nil
135
+ @design["views"]["only-reduce"].should be_nil
136
+ end
137
+ it "should include library files" do
138
+ @design["views"]["only-map"]["map"].should include("globalLib")
139
+ @design["views"]["only-map"]["map"].should include("justThisView")
140
+ end
141
+ it "should not create extra design docs" do
142
+ docs = @db.documents(:startkey => '_design', :endkey => '_design/ZZZZZZ')
143
+ docs['total_rows'].should == 1
144
+ end
145
+ end
146
+
147
+ describe CouchRest::FileManager, "pushing a directory with id" do
148
+ before(:all) do
149
+ @cr = CouchRest.new(COUCHHOST)
150
+ @db = @cr.database(TESTDB)
151
+ @db.delete! rescue nil
152
+ @db = @cr.create_db(TESTDB) rescue nil
153
+
154
+ @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
155
+ @push_dir = FIXTURE_PATH + '/attachments'
156
+ ds = @fm.push_directory(@push_dir, 'attached')
157
+ end
158
+ it "should create a document for the folder" do
159
+ @db.get("attached")
160
+ end
161
+ it "should make attachments" do
162
+ doc = @db.get("attached")
163
+ doc["_attachments"]["test.html"].should_not be_nil
164
+ end
165
+ it "should set the content type" do
166
+ doc = @db.get("attached")
167
+ doc["_attachments"]["test.html"]["content_type"].should == "text/html"
168
+ end
169
+ end
170
+
171
+ describe CouchRest::FileManager, "pushing a directory without id" do
172
+ before(:all) do
173
+ @cr = CouchRest.new(COUCHHOST)
174
+ @db = @cr.database(TESTDB)
175
+ @db.delete! rescue nil
176
+ @db = @cr.create_db(TESTDB) rescue nil
177
+
178
+ @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
179
+ @push_dir = FIXTURE_PATH + '/attachments'
180
+ ds = @fm.push_directory(@push_dir)
181
+ end
182
+ it "should use the dirname" do
183
+ doc = @db.get("attachments")
184
+ doc["_attachments"]["test.html"].should_not be_nil
185
+ end
186
+ end
187
+
188
+ describe CouchRest::FileManager, "pushing a directory/ without id" do
189
+ before(:all) do
190
+ @cr = CouchRest.new(COUCHHOST)
191
+ @db = @cr.database(TESTDB)
192
+ @db.delete! rescue nil
193
+ @db = @cr.create_db(TESTDB) rescue nil
194
+
195
+ @fm = CouchRest::FileManager.new(TESTDB, COUCHHOST)
196
+ @push_dir = FIXTURE_PATH + '/attachments/'
197
+ ds = @fm.push_directory(@push_dir)
198
+ end
199
+ it "should use the dirname" do
200
+ doc = @db.get("attachments")
201
+ doc["_attachments"]["test.html"].should_not be_nil
202
+ end
203
+ end
@@ -0,0 +1,122 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe CouchRest::Pager do
4
+ before(:all) do
5
+ @cr = CouchRest.new(COUCHHOST)
6
+ @db = @cr.database(TESTDB)
7
+ @db.delete! rescue nil
8
+ @db = @cr.create_db(TESTDB) rescue nil
9
+ @pager = CouchRest::Pager.new(@db)
10
+ end
11
+
12
+ after(:all) do
13
+ begin
14
+ @db.delete!
15
+ rescue RestClient::Request::RequestFailed
16
+ end
17
+ end
18
+
19
+ it "should store the db" do
20
+ @pager.db.should == @db
21
+ end
22
+
23
+ describe "paging all docs" do
24
+ before(:all) do
25
+ @docs = []
26
+ 100.times do |i|
27
+ @docs << ({:number => (i % 10)})
28
+ end
29
+ @db.bulk_save(@docs)
30
+ end
31
+ it "should yield total_docs / count times" do
32
+ n = 0
33
+ @pager.all_docs(10) do |doc|
34
+ n += 1
35
+ end
36
+ n.should == 10
37
+ end
38
+ it "should yield each docrow group without duplicate docs" do
39
+ docids = {}
40
+ @pager.all_docs(10) do |docrows|
41
+ docrows.each do |row|
42
+ docids[row['id']].should be_nil
43
+ docids[row['id']] = true
44
+ end
45
+ end
46
+ docids.keys.length.should == 100
47
+ end
48
+ it "should yield each docrow group" do
49
+ @pager.all_docs(10) do |docrows|
50
+ doc = @db.get(docrows[0]['id'])
51
+ doc['number'].class.should == Fixnum
52
+ end
53
+ end
54
+ end
55
+
56
+ describe "Pager with a view and docs" do
57
+ before(:all) do
58
+ @docs = []
59
+ 100.times do |i|
60
+ @docs << ({:number => (i % 10)})
61
+ end
62
+ @db.bulk_save(@docs)
63
+ @db.save({
64
+ '_id' => '_design/magic',
65
+ 'views' => {
66
+ 'number' => {
67
+ 'map' => 'function(doc){emit(doc.number,null)}'
68
+ }
69
+ }
70
+ })
71
+ end
72
+
73
+ it "should have docs" do
74
+ @docs.length.should == 100
75
+ @db.documents['rows'].length.should == 101
76
+ end
77
+
78
+ it "should have a view" do
79
+ @db.view('magic/number', :count => 10)['rows'][0]['key'].should == 0
80
+ end
81
+
82
+ it "should yield once per key" do
83
+ results = {}
84
+ @pager.key_reduce('magic/number', 20) do |k,vs|
85
+ results[k] = vs.length
86
+ end
87
+ results[0].should == 10
88
+ results[3].should == 10
89
+ end
90
+
91
+ it "with a small step size should yield once per key" do
92
+ results = {}
93
+ @pager.key_reduce('magic/number', 7) do |k,vs|
94
+ results[k] = vs.length
95
+ end
96
+ results[0].should == 10
97
+ results[3].should == 10
98
+ results[9].should == 10
99
+ end
100
+ it "with a large step size should yield once per key" do
101
+ results = {}
102
+ @pager.key_reduce('magic/number', 1000) do |k,vs|
103
+ results[k] = vs.length
104
+ end
105
+ results[0].should == 10
106
+ results[3].should == 10
107
+ results[9].should == 10
108
+ end
109
+ it "with a begin and end should only yield in the range (and leave out the lastkey)" do
110
+ results = {}
111
+ @pager.key_reduce('magic/number', 1000, 4, 7) do |k,vs|
112
+ results[k] = vs.length
113
+ end
114
+ results[0].should be_nil
115
+ results[4].should == 10
116
+ results[6].should == 10
117
+ results[7].should be_nil
118
+ results[8].should be_nil
119
+ results[9].should be_nil
120
+ end
121
+ end
122
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe CouchRest::Streamer do
4
+ before(:all) do
5
+ @cr = CouchRest.new(COUCHHOST)
6
+ @db = @cr.database(TESTDB)
7
+ @db.delete! rescue nil
8
+ @db = @cr.create_db(TESTDB) rescue nil
9
+ @streamer = CouchRest::Streamer.new(@db)
10
+ @docs = (1..1000).collect{|i| {:integer => i, :string => i.to_s}}
11
+ @db.bulk_save(@docs)
12
+ end
13
+
14
+ it "should yield each row in a view" do
15
+ count = 0
16
+ sum = 0
17
+ @streamer.view("_all_docs") do |row|
18
+ count += 1
19
+ end
20
+ count.should == 1001
21
+ end
22
+
23
+ end
@@ -0,0 +1,11 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Test</title>
5
+ </head>
6
+ <body>
7
+ <p>
8
+ Test
9
+ </p>
10
+ </body>
11
+ </html>
@@ -0,0 +1,3 @@
1
+ function globalLib() {
2
+ return "fixture";
3
+ };
@@ -0,0 +1,3 @@
1
+ function justThisView() {
2
+ return "fixture";
3
+ };
@@ -0,0 +1,4 @@
1
+ function(doc) {
2
+ //include-lib
3
+ emit(null, null);
4
+ };
@@ -0,0 +1,3 @@
1
+ function(doc) {
2
+ emit(null, null);
3
+ };
@@ -0,0 +1,3 @@
1
+ function(ks,vs,co) {
2
+ return vs.length;
3
+ };
data/spec/spec.opts ADDED
@@ -0,0 +1,6 @@
1
+ --colour
2
+ --format
3
+ progress
4
+ --loadby
5
+ mtime
6
+ --reverse
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../lib/couchrest'
2
+
3
+ FIXTURE_PATH = File.dirname(__FILE__) + '/fixtures'
4
+
5
+ COUCHHOST = "http://localhost:5984"
6
+ TESTDB = 'couchrest-test'
7
+
8
+ def reset_test_db!
9
+ cr = CouchRest.new(COUCHHOST)
10
+ db = cr.database(TESTDB)
11
+ db.delete! rescue nil
12
+ db = cr.create_db(TESTDB) rescue nin
13
+ db
14
+ end
data/utils/remap.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'rubygems'
2
+ require 'couchrest'
3
+
4
+ # set the source db and map view
5
+ source = CouchRest.new("http://localhost:5984").database('source-db')
6
+ source_view = 'mydesign/view-map'
7
+
8
+ # set the target db
9
+ target = CouchRest.new("http://localhost:5984").database('target-db')
10
+
11
+
12
+ pager = CouchRest::Pager.new(source)
13
+
14
+ # pager will yield once per uniq key in the source view
15
+
16
+ pager.key_reduce(source_view, 10000) do |key, values|
17
+ # create a doc from the key and the values
18
+ example_doc = {
19
+ :key => key,
20
+ :values => values.uniq
21
+ }
22
+
23
+ target.save(example_doc)
24
+
25
+ # keep us up to date with progress
26
+ puts k if (rand > 0.9)
27
+ end
data/utils/subset.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ require 'couchrest'
3
+
4
+ # subset.rb replicates a percentage of a database to a fresh database.
5
+ # use it to create a smaller dataset on which to prototype views.
6
+
7
+ # specify the source database
8
+ source = CouchRest.new("http://localhost:5984").database('source-db')
9
+
10
+ # specify the target database
11
+ target = CouchRest.new("http://localhost:5984").database('target-db')
12
+
13
+ # pager efficiently yields all view rows
14
+ pager = CouchRest::Pager.new(source)
15
+
16
+ pager.all_docs(1000) do |rows|
17
+ docs = rows.collect do |r|
18
+ # the percentage of docs to clone
19
+ next if rand > 0.1
20
+ doc = source.get(r['id'])
21
+ doc.delete('_rev')
22
+ doc
23
+ end.compact
24
+ puts docs.length
25
+ next if docs.empty?
26
+
27
+ puts docs.first['_id']
28
+ target.bulk_save(docs)
29
+ end
30
+
metadata ADDED
@@ -0,0 +1,154 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: juozasg-couchrest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.10.1
5
+ platform: ruby
6
+ authors:
7
+ - J. Chris Anderson
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-10-27 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: json
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.1.2
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: rest-client
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "0.5"
32
+ version:
33
+ - !ruby/object:Gem::Dependency
34
+ name: extlib
35
+ version_requirement:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.9.6
41
+ version:
42
+ description: CouchRest provides a simple interface on top of CouchDB's RESTful HTTP API, as well as including some utility scripts for managing views and attachments.
43
+ email: jchris@grabb.it
44
+ executables:
45
+ - couchview
46
+ - couchdir
47
+ - couchapp
48
+ extensions: []
49
+
50
+ extra_rdoc_files:
51
+ - README.rdoc
52
+ - LICENSE
53
+ - THANKS
54
+ files:
55
+ - LICENSE
56
+ - README.rdoc
57
+ - Rakefile
58
+ - THANKS
59
+ - bin/couchapp
60
+ - bin/couchdir
61
+ - bin/couchview
62
+ - examples/model
63
+ - examples/model/example.rb
64
+ - examples/word_count
65
+ - examples/word_count/markov
66
+ - examples/word_count/views
67
+ - examples/word_count/views/books
68
+ - examples/word_count/views/books/chunked-map.js
69
+ - examples/word_count/views/books/united-map.js
70
+ - examples/word_count/views/markov
71
+ - examples/word_count/views/markov/chain-map.js
72
+ - examples/word_count/views/markov/chain-reduce.js
73
+ - examples/word_count/views/word_count
74
+ - examples/word_count/views/word_count/count-map.js
75
+ - examples/word_count/views/word_count/count-reduce.js
76
+ - examples/word_count/word_count.rb
77
+ - examples/word_count/word_count_query.rb
78
+ - lib/couchrest
79
+ - lib/couchrest/commands
80
+ - lib/couchrest/commands/generate.rb
81
+ - lib/couchrest/commands/push.rb
82
+ - lib/couchrest/core
83
+ - lib/couchrest/core/database.rb
84
+ - lib/couchrest/core/design.rb
85
+ - lib/couchrest/core/document.rb
86
+ - lib/couchrest/core/model.rb
87
+ - lib/couchrest/core/server.rb
88
+ - lib/couchrest/core/view.rb
89
+ - lib/couchrest/helper
90
+ - lib/couchrest/helper/file_manager.rb
91
+ - lib/couchrest/helper/pager.rb
92
+ - lib/couchrest/helper/streamer.rb
93
+ - lib/couchrest/helper/templates
94
+ - lib/couchrest/helper/templates/bar.txt
95
+ - lib/couchrest/helper/templates/example-map.js
96
+ - lib/couchrest/helper/templates/example-reduce.js
97
+ - lib/couchrest/helper/templates/index.html
98
+ - lib/couchrest/monkeypatches.rb
99
+ - lib/couchrest.rb
100
+ - spec/couchapp_spec.rb
101
+ - spec/couchrest
102
+ - spec/couchrest/core
103
+ - spec/couchrest/core/couchrest_spec.rb
104
+ - spec/couchrest/core/database_spec.rb
105
+ - spec/couchrest/core/design_spec.rb
106
+ - spec/couchrest/core/document_spec.rb
107
+ - spec/couchrest/core/model_spec.rb
108
+ - spec/couchrest/helpers
109
+ - spec/couchrest/helpers/file_manager_spec.rb
110
+ - spec/couchrest/helpers/pager_spec.rb
111
+ - spec/couchrest/helpers/streamer_spec.rb
112
+ - spec/fixtures
113
+ - spec/fixtures/attachments
114
+ - spec/fixtures/attachments/couchdb.png
115
+ - spec/fixtures/attachments/test.html
116
+ - spec/fixtures/views
117
+ - spec/fixtures/views/lib.js
118
+ - spec/fixtures/views/test_view
119
+ - spec/fixtures/views/test_view/lib.js
120
+ - spec/fixtures/views/test_view/only-map.js
121
+ - spec/fixtures/views/test_view/test-map.js
122
+ - spec/fixtures/views/test_view/test-reduce.js
123
+ - spec/spec.opts
124
+ - spec/spec_helper.rb
125
+ - utils/remap.rb
126
+ - utils/subset.rb
127
+ has_rdoc: "true"
128
+ homepage: http://github.com/jchris/couchrest
129
+ post_install_message:
130
+ rdoc_options: []
131
+
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: "0"
139
+ version:
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: "0"
145
+ version:
146
+ requirements: []
147
+
148
+ rubyforge_project:
149
+ rubygems_version: 1.2.0
150
+ signing_key:
151
+ specification_version: 2
152
+ summary: Lean and RESTful interface to CouchDB.
153
+ test_files: []
154
+