juozasg-couchrest 0.10.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.
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,87 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "couchapp" do
4
+ before(:all) do
5
+ @fixdir = FIXTURE_PATH + '/couchapp-test'
6
+ @couchapp = File.expand_path(File.dirname(__FILE__)) + '/../bin/couchapp'
7
+ `rm -rf #{@fixdir}`
8
+ `mkdir -p #{@fixdir}`
9
+ @run = "cd #{@fixdir} && #{@couchapp}"
10
+ end
11
+
12
+ describe "--help" do
13
+ it "should output the opts" do
14
+ `#{@run} --help`.should match(/Usage/)
15
+ end
16
+ end
17
+
18
+ describe "generate my-app" do
19
+ it "should create an app directory" do
20
+ `#{@run} generate my-app`.should match(/generating/i)
21
+ Dir["#{@fixdir}/*"].select{|x|x =~ /my-app/}.length.should == 1
22
+ end
23
+ it "should create a views directory" do
24
+ `#{@run} generate my-app`.should match(/generating/i)
25
+ Dir["#{@fixdir}/my-app/*"].select{|x|x =~ /views/}.length.should == 1
26
+ end
27
+ end
28
+
29
+ describe "push my-app #{TESTDB}" do
30
+ before(:all) do
31
+ @cr = CouchRest.new(COUCHHOST)
32
+ @db = @cr.database(TESTDB)
33
+ @db.delete! rescue nil
34
+ @db = @cr.create_db(TESTDB) rescue nil
35
+ `#{@run} generate my-app`
36
+ end
37
+ it "should create the design document with the app name" do
38
+ `#{@run} push my-app #{TESTDB}`
39
+ lambda{@db.get("_design/my-app")}.should_not raise_error
40
+ end
41
+ it "should create the views" do
42
+ `#{@run} push my-app #{TESTDB}`
43
+ doc = @db.get("_design/my-app")
44
+ doc['views']['example']['map'].should match(/function/)
45
+ end
46
+ it "should create view for all the views" do
47
+ `echo 'moremap' > #{@fixdir}/my-app/views/more-map.js`
48
+ `#{@run} push my-app #{TESTDB}`
49
+ doc = @db.get("_design/my-app")
50
+ doc['views']['more']['map'].should match(/moremap/)
51
+ end
52
+ it "should create the index" do
53
+ `#{@run} push my-app #{TESTDB}`
54
+ doc = @db.get("_design/my-app")
55
+ doc['_attachments']['index.html']["content_type"].should == 'text/html'
56
+ end
57
+ end
58
+
59
+ describe "push . #{TESTDB}" 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
+ `#{@run} generate my-app`
66
+ end
67
+ it "should create the design document" do
68
+ `cd #{@fixdir}/my-app && #{@couchapp} push . #{TESTDB}`
69
+ lambda{@db.get("_design/my-app")}.should_not raise_error
70
+ end
71
+ end
72
+
73
+ describe "push my-app my-design #{TESTDB}" do
74
+ before(:all) do
75
+ @cr = CouchRest.new(COUCHHOST)
76
+ @db = @cr.database(TESTDB)
77
+ @db.delete! rescue nil
78
+ @db = @cr.create_db(TESTDB) rescue nil
79
+ `#{@run} generate my-app`
80
+ end
81
+ it "should create the design document" do
82
+ `#{@run} push my-app my-design #{TESTDB}`
83
+ lambda{@db.get("_design/my-design")}.should_not raise_error
84
+ end
85
+ end
86
+ end
87
+
@@ -0,0 +1,191 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe CouchRest do
4
+
5
+ before(:each) do
6
+ @cr = CouchRest.new(COUCHHOST)
7
+ begin
8
+ @db = @cr.database(TESTDB)
9
+ @db.delete! rescue nil
10
+ end
11
+ end
12
+
13
+ after(:each) do
14
+ begin
15
+ @db.delete! rescue nil
16
+ end
17
+ end
18
+
19
+ describe "getting info" do
20
+ it "should list databases" do
21
+ @cr.databases.should be_an_instance_of(Array)
22
+ end
23
+ it "should get info" do
24
+ @cr.info["couchdb"].should == "Welcome"
25
+ @cr.info.class.should == Hash
26
+ end
27
+ end
28
+
29
+ it "should restart" do
30
+ @cr.restart!
31
+ end
32
+
33
+ it "should provide one-time access to uuids" do
34
+ @cr.next_uuid.should_not be_nil
35
+ end
36
+
37
+ describe "initializing a database" do
38
+ it "should return a db" do
39
+ db = @cr.database(TESTDB)
40
+ db.should be_an_instance_of(CouchRest::Database)
41
+ db.host.should == @cr.uri
42
+ end
43
+ end
44
+
45
+ describe "parsing urls" do
46
+ it "should parse just a dbname" do
47
+ db = CouchRest.parse "my-db"
48
+ db[:database].should == "my-db"
49
+ db[:host].should == "localhost:5984"
50
+ end
51
+ it "should parse a host and db" do
52
+ db = CouchRest.parse "localhost/my-db"
53
+ db[:database].should == "my-db"
54
+ db[:host].should == "localhost"
55
+ end
56
+ it "should parse a host and db with http" do
57
+ db = CouchRest.parse "http://localhost/my-db"
58
+ db[:database].should == "my-db"
59
+ db[:host].should == "localhost"
60
+ end
61
+ it "should parse a host with a port and db" do
62
+ db = CouchRest.parse "localhost:5555/my-db"
63
+ db[:database].should == "my-db"
64
+ db[:host].should == "localhost:5555"
65
+ end
66
+ it "should parse a host with a port and db with http" do
67
+ db = CouchRest.parse "http://localhost:5555/my-db"
68
+ db[:database].should == "my-db"
69
+ db[:host].should == "localhost:5555"
70
+ end
71
+ it "should parse just a host" do
72
+ db = CouchRest.parse "http://localhost:5555/"
73
+ db[:database].should be_nil
74
+ db[:host].should == "localhost:5555"
75
+ end
76
+ it "should parse just a host no slash" do
77
+ db = CouchRest.parse "http://localhost:5555"
78
+ db[:host].should == "localhost:5555"
79
+ db[:database].should be_nil
80
+ end
81
+ it "should get docid" do
82
+ db = CouchRest.parse "localhost:5555/my-db/my-doc"
83
+ db[:database].should == "my-db"
84
+ db[:host].should == "localhost:5555"
85
+ db[:doc].should == "my-doc"
86
+ end
87
+ it "should get docid with http" do
88
+ db = CouchRest.parse "http://localhost:5555/my-db/my-doc"
89
+ db[:database].should == "my-db"
90
+ db[:host].should == "localhost:5555"
91
+ db[:doc].should == "my-doc"
92
+ end
93
+
94
+ it "should parse a host and db" do
95
+ db = CouchRest.parse "127.0.0.1/my-db"
96
+ db[:database].should == "my-db"
97
+ db[:host].should == "127.0.0.1"
98
+ end
99
+ it "should parse a host and db with http" do
100
+ db = CouchRest.parse "http://127.0.0.1/my-db"
101
+ db[:database].should == "my-db"
102
+ db[:host].should == "127.0.0.1"
103
+ end
104
+ it "should parse a host with a port and db" do
105
+ db = CouchRest.parse "127.0.0.1:5555/my-db"
106
+ db[:database].should == "my-db"
107
+ db[:host].should == "127.0.0.1:5555"
108
+ end
109
+ it "should parse a host with a port and db with http" do
110
+ db = CouchRest.parse "http://127.0.0.1:5555/my-db"
111
+ db[:database].should == "my-db"
112
+ db[:host].should == "127.0.0.1:5555"
113
+ end
114
+ it "should parse just a host" do
115
+ db = CouchRest.parse "http://127.0.0.1:5555/"
116
+ db[:database].should be_nil
117
+ db[:host].should == "127.0.0.1:5555"
118
+ end
119
+ it "should parse just a host no slash" do
120
+ db = CouchRest.parse "http://127.0.0.1:5555"
121
+ db[:host].should == "127.0.0.1:5555"
122
+ db[:database].should be_nil
123
+ end
124
+ it "should get docid" do
125
+ db = CouchRest.parse "127.0.0.1:5555/my-db/my-doc"
126
+ db[:database].should == "my-db"
127
+ db[:host].should == "127.0.0.1:5555"
128
+ db[:doc].should == "my-doc"
129
+ end
130
+ it "should get docid with http" do
131
+ db = CouchRest.parse "http://127.0.0.1:5555/my-db/my-doc"
132
+ db[:database].should == "my-db"
133
+ db[:host].should == "127.0.0.1:5555"
134
+ db[:doc].should == "my-doc"
135
+ end
136
+ end
137
+
138
+ describe "easy initializing a database adapter" do
139
+ it "should be possible without an explicit CouchRest instantiation" do
140
+ db = CouchRest.database "http://localhost:5984/couchrest-test"
141
+ db.should be_an_instance_of(CouchRest::Database)
142
+ db.host.should == "localhost:5984"
143
+ end
144
+ # TODO add https support (need test environment...)
145
+ # it "should work with https" # do
146
+ # db = CouchRest.database "https://localhost:5984/couchrest-test"
147
+ # db.host.should == "https://localhost:5984"
148
+ # end
149
+ it "should not create the database automatically" do
150
+ db = CouchRest.database "http://localhost:5984/couchrest-test"
151
+ lambda{db.info}.should raise_error(RestClient::ResourceNotFound)
152
+ end
153
+ end
154
+
155
+ describe "ensuring the db exists" do
156
+ it "should be super easy" do
157
+ db = CouchRest.database! "http://localhost:5984/couchrest-test-2"
158
+ db.name.should == 'couchrest-test-2'
159
+ db.info["db_name"].should == 'couchrest-test-2'
160
+ end
161
+ end
162
+
163
+ describe "successfully creating a database" do
164
+ it "should start without a database" do
165
+ @cr.databases.should_not include(TESTDB)
166
+ end
167
+ it "should return the created database" do
168
+ db = @cr.create_db(TESTDB)
169
+ db.should be_an_instance_of(CouchRest::Database)
170
+ end
171
+ it "should create the database" do
172
+ db = @cr.create_db(TESTDB)
173
+ @cr.databases.should include(TESTDB)
174
+ end
175
+ end
176
+
177
+ describe "failing to create a database because the name is taken" do
178
+ before(:each) do
179
+ db = @cr.create_db(TESTDB)
180
+ end
181
+ it "should start with the test database" do
182
+ @cr.databases.should include(TESTDB)
183
+ end
184
+ it "should PUT the database and raise an error" do
185
+ lambda{
186
+ @cr.create_db(TESTDB)
187
+ }.should raise_error(RestClient::Request::RequestFailed)
188
+ end
189
+ end
190
+
191
+ end