dolly 1.1.4 → 3.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.
Files changed (84) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +78 -0
  3. data/lib/dolly.rb +4 -2
  4. data/lib/dolly/attachment.rb +29 -0
  5. data/lib/dolly/bulk_document.rb +27 -26
  6. data/lib/dolly/class_methods_delegation.rb +15 -0
  7. data/lib/dolly/collection.rb +32 -65
  8. data/lib/dolly/configuration.rb +43 -0
  9. data/lib/dolly/connection.rb +101 -22
  10. data/lib/dolly/depracated_database.rb +24 -0
  11. data/lib/dolly/document.rb +48 -198
  12. data/lib/dolly/document_creation.rb +20 -0
  13. data/lib/dolly/document_state.rb +66 -0
  14. data/lib/dolly/document_type.rb +47 -0
  15. data/lib/dolly/exceptions.rb +32 -0
  16. data/lib/dolly/identity_properties.rb +29 -0
  17. data/lib/dolly/mango.rb +124 -0
  18. data/lib/dolly/mango_index.rb +65 -0
  19. data/lib/dolly/properties.rb +36 -0
  20. data/lib/dolly/property.rb +58 -47
  21. data/lib/dolly/property_manager.rb +47 -0
  22. data/lib/dolly/property_set.rb +23 -0
  23. data/lib/dolly/query.rb +37 -67
  24. data/lib/dolly/query_arguments.rb +35 -0
  25. data/lib/dolly/request.rb +12 -94
  26. data/lib/dolly/request_header.rb +26 -0
  27. data/lib/dolly/timestamp.rb +24 -0
  28. data/lib/dolly/version.rb +1 -1
  29. data/lib/dolly/view_query.rb +14 -0
  30. data/lib/{dolly → railties}/railtie.rb +2 -1
  31. data/lib/refinements/hash_refinements.rb +27 -0
  32. data/lib/refinements/string_refinements.rb +28 -0
  33. data/lib/tasks/db.rake +20 -4
  34. data/test/bulk_document_test.rb +8 -5
  35. data/test/document_test.rb +132 -95
  36. data/test/document_type_test.rb +28 -0
  37. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  38. data/test/dummy/log/test.log +111132 -0
  39. data/test/inheritance_test.rb +23 -0
  40. data/test/mango_index_test.rb +64 -0
  41. data/test/mango_test.rb +273 -0
  42. data/test/test_helper.rb +63 -18
  43. data/test/view_query_test.rb +27 -0
  44. metadata +57 -141
  45. data/Rakefile +0 -11
  46. data/lib/dolly/bulk_error.rb +0 -16
  47. data/lib/dolly/db_config.rb +0 -20
  48. data/lib/dolly/interpreter.rb +0 -5
  49. data/lib/dolly/name_space.rb +0 -28
  50. data/lib/dolly/timestamps.rb +0 -21
  51. data/lib/exceptions/dolly.rb +0 -38
  52. data/test/collection_test.rb +0 -59
  53. data/test/dummy/README.rdoc +0 -28
  54. data/test/dummy/Rakefile +0 -6
  55. data/test/dummy/app/assets/javascripts/application.js +0 -13
  56. data/test/dummy/app/assets/stylesheets/application.css +0 -13
  57. data/test/dummy/app/controllers/application_controller.rb +0 -5
  58. data/test/dummy/app/helpers/application_helper.rb +0 -2
  59. data/test/dummy/app/views/layouts/application.html.erb +0 -14
  60. data/test/dummy/bin/bundle +0 -3
  61. data/test/dummy/bin/rails +0 -4
  62. data/test/dummy/bin/rake +0 -4
  63. data/test/dummy/config.ru +0 -4
  64. data/test/dummy/config/application.rb +0 -27
  65. data/test/dummy/config/boot.rb +0 -5
  66. data/test/dummy/config/couchdb.yml +0 -13
  67. data/test/dummy/config/environment.rb +0 -5
  68. data/test/dummy/config/environments/development.rb +0 -29
  69. data/test/dummy/config/environments/production.rb +0 -80
  70. data/test/dummy/config/environments/test.rb +0 -36
  71. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  72. data/test/dummy/config/initializers/inflections.rb +0 -16
  73. data/test/dummy/config/initializers/mime_types.rb +0 -5
  74. data/test/dummy/config/initializers/secret_token.rb +0 -12
  75. data/test/dummy/config/initializers/session_store.rb +0 -3
  76. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  77. data/test/dummy/config/locales/en.yml +0 -23
  78. data/test/dummy/config/routes.rb +0 -56
  79. data/test/dummy/lib/couch_rest_adapter/railtie.rb +0 -10
  80. data/test/dummy/public/404.html +0 -58
  81. data/test/dummy/public/422.html +0 -58
  82. data/test/dummy/public/500.html +0 -57
  83. data/test/dummy/public/favicon.ico +0 -0
  84. data/test/factories/factories.rb +0 -8
@@ -4,8 +4,7 @@ class Doc < Dolly::Document
4
4
  property :name
5
5
  end
6
6
 
7
- class BulkDocumentTest < ActiveSupport::TestCase
8
-
7
+ class BulkDocumentTest < Test::Unit::TestCase
9
8
  setup do
10
9
  @doc = Dolly::Document.bulk_document
11
10
  @req = "http://localhost:5984/test/_bulk_docs"
@@ -28,17 +27,21 @@ class BulkDocumentTest < ActiveSupport::TestCase
28
27
  test 'save document will remove docs from payload' do
29
28
  docs = 3.times.map{ Doc.new name: "a" }
30
29
  docs.each do |d|
31
- d.doc['_id'] = "foo_bar/#{SecureRandom.uuid}"
30
+ d.id = "doc/#{SecureRandom.uuid}"
32
31
  @doc << d
33
32
  end
34
33
 
35
34
  res = docs.map{|d| {ok: true, id: d.id, rev: "2-#{SecureRandom.uuid}"} }.to_json
36
- FakeWeb.register_uri :post, @req, body: res
35
+
36
+ stub_request(:post, @req).
37
+ to_return(body: res)
38
+
39
+ assert_equal docs, @doc.payload[:docs]
37
40
 
38
41
  @doc.save
39
42
 
40
43
  assert_equal [], @doc.errors
41
44
  assert_equal [], @doc.docs
45
+ assert_equal [], @doc.payload[:docs]
42
46
  end
43
-
44
47
  end
@@ -1,7 +1,5 @@
1
1
  require 'test_helper'
2
2
 
3
- class BaseDolly < Dolly::Document; end
4
-
5
3
  class BarFoo < BaseDolly
6
4
  property :a, :b, :c, :d, :e, :f, :g, :h, :i, :j, :k, :l, :m, :n, :persist
7
5
  end
@@ -30,7 +28,7 @@ class FooBaz < Dolly::Document
30
28
  end
31
29
 
32
30
  class WithTime < Dolly::Document
33
- property :created_at, default: -> {Time.now}
31
+ property :created_at, default: -> { Time.now }
34
32
  end
35
33
 
36
34
  class TestFoo < Dolly::Document
@@ -41,7 +39,7 @@ class DocumentWithValidMethod < Dolly::Document
41
39
  property :foo
42
40
 
43
41
  def valid?
44
- foo.present?
42
+ !foo.nil?
45
43
  end
46
44
  end
47
45
 
@@ -53,8 +51,7 @@ class Bar < FooBar
53
51
  property :a, :b
54
52
  end
55
53
 
56
- class DocumentTest < ActiveSupport::TestCase
57
- DB_BASE_PATH = "http://localhost:5984/test".freeze
54
+ class DocumentTest < Test::Unit::TestCase
58
55
 
59
56
  def setup
60
57
  data = {foo: 'Foo', bar: 'Bar', type: 'foo_bar'}
@@ -72,23 +69,51 @@ class DocumentTest < ActiveSupport::TestCase
72
69
  build_request [["foo_bar","1"],["foo_bar","2"]], @multi_resp
73
70
 
74
71
  #TODO: Mock Dolly::Request to return helper with expected response. request builder can be tested by itself.
75
- FakeWeb.register_uri :get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%2F%EF%BF%B0%22&include_docs=true", body: @multi_resp.to_json
76
- FakeWeb.register_uri :get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%2F%EF%BF%B0%22&limit=1&include_docs=true", body: view_resp.to_json
77
- FakeWeb.register_uri :get, "#{query_base_path}?endkey=%22foo_bar%2F%22&startkey=%22foo_bar%2F%EF%BF%B0%22&limit=1&descending=true&include_docs=true", body: view_resp.to_json
78
- FakeWeb.register_uri :get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%22%2C%7B%7D&limit=2&include_docs=true", body: @multi_resp.to_json
79
- FakeWeb.register_uri :get, "#{query_base_path}?endkey=%22foo_bar%2F%22&startkey=%22foo_bar%2F%EF%BF%B0%22&limit=2&descending=true&include_docs=true", body: @multi_resp.to_json
80
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2F1%22%5D&include_docs=true", body: view_resp.to_json
81
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%5D&include_docs=true", body: not_found_resp.to_json
82
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2Ferror%22%5D&include_docs=true", body: 'error', status: ["500", "Error"]
83
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2F1%22%2C%22foo_bar%2F2%22%5D&include_docs=true", body: @multi_resp.to_json
84
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2F2%22%5D&include_docs=true", body: not_found_resp.to_json
85
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2Fbig_doc%22%5D&include_docs=true", body: build_view_response([data.merge(other_property: 'other')]).to_json
72
+ stub_request(:get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%2F%EF%BF%B0%22&include_docs=true").
73
+ to_return(body: @multi_resp.to_json)
74
+
75
+ stub_request(:get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%2F%EF%BF%B0%22&limit=1&include_docs=true").
76
+ to_return(body: view_resp.to_json)
77
+
78
+ stub_request(:get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%2F%EF%BF%B0%22&limit=2&include_docs=true").
79
+ to_return(body: view_resp.to_json)
80
+
81
+ stub_request(:get, "#{query_base_path}?endkey=%22foo_bar%2F%22&startkey=%22foo_bar%2F%EF%BF%B0%22&limit=1&descending=true&include_docs=true").
82
+ to_return(body: view_resp.to_json)
83
+
84
+ stub_request(:get, "#{query_base_path}?startkey=%22foo_bar%2F%22&endkey=%22foo_bar%22%2C%7B%7D&limit=2&include_docs=true").
85
+ to_return(body: @multi_resp.to_json)
86
+
87
+ stub_request(:get, "#{query_base_path}?endkey=%22foo_bar%2F%22&startkey=%22foo_bar%2F%EF%BF%B0%22&limit=2&descending=true&include_docs=true").
88
+ to_return(body: @multi_resp.to_json)
89
+
90
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2F1%22%5D&include_docs=true").
91
+ to_return(body: view_resp.to_json)
92
+
93
+ stub_request(:get, "#{query_base_path}?keys=%5B%5D&include_docs=true").
94
+ to_return(body: not_found_resp.to_json)
95
+
96
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2Ferror%22%5D&include_docs=true").
97
+ to_return(body: 'error', status: ["500", "Error"])
98
+
99
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2F1%22%2C%22foo_bar%2F2%22%5D&include_docs=true").
100
+ to_return(body: @multi_resp.to_json)
101
+
102
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2F2%22%5D&include_docs=true").
103
+ to_return(status: 404, body: not_found_resp.to_json)
104
+
105
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2Fbig_doc%22%5D&include_docs=true").
106
+ to_return(body: build_view_response([data.merge(other_property: 'other')]).to_json)
107
+
86
108
  end
87
109
 
88
110
  test 'new in memory document' do
89
111
  #TODO: clean up all the fake request creation
90
112
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
91
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/foo_bar%2F.+/, body: resp.to_json
113
+
114
+ stub_request(:put, /http:\/\/localhost:5984\/test\/foo_bar%2F.+/).
115
+ to_return(body: resp.to_json)
116
+
92
117
  properties = {foo: 1, bar: 2, boolean: false}
93
118
  foo = FooBar.new properties
94
119
  assert_equal 1, foo.with_default
@@ -100,15 +125,15 @@ class DocumentTest < ActiveSupport::TestCase
100
125
 
101
126
  test 'empty find should raise error' do
102
127
  assert_raise Dolly::ResourceNotFound do
103
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%5D&include_docs=true", :status => ["404", "Not Found"]
104
- foo = FooBar.find
128
+ stub_request(:get, "#{query_base_path}?keys=%5B%5D&include_docs=true").to_return(status: 404)
129
+ FooBar.find
105
130
  end
106
131
  end
107
132
 
108
133
  test 'error on server raises Dolly::ServerError' do
109
134
  assert_raise Dolly::ServerError do
110
- FakeWeb.register_uri :get, "#{query_base_path}?keys=", :status => ["500", "Error"]
111
- foo = FooBar.find 'error'
135
+ stub_request(:get, "#{query_base_path}?keys=").to_return(status: 500)
136
+ FooBar.find 'error'
112
137
  end
113
138
  end
114
139
 
@@ -175,28 +200,36 @@ class DocumentTest < ActiveSupport::TestCase
175
200
 
176
201
  test 'getting not found document' do
177
202
  assert_raise Dolly::ResourceNotFound do
178
- missing = FooBar.find "2"
203
+ FooBar.find "2"
179
204
  end
180
205
  end
181
206
 
182
207
  test 'reload reloads the doc attribute from database' do
183
208
  assert foo = FooBar.find('1')
184
- expected_doc = foo.doc.dup
185
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2F0%22%5D&include_docs=true", body: build_view_response([expected_doc]).to_json
209
+ expected_doc = foo.send(:doc).dup
210
+
211
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2F0%22%5D&include_docs=true").
212
+ to_return(body: build_view_response([expected_doc]).to_json)
213
+
186
214
  assert foo.foo = 1
187
- assert_not_equal expected_doc, foo.doc
215
+ assert_not_equal expected_doc, foo.send(:doc)
188
216
  assert foo.reload
189
- assert_equal expected_doc, foo.doc
217
+ assert_equal expected_doc, foo.send(:doc)
190
218
  end
191
219
 
192
220
  test 'accessors work as expected after reload' do
193
221
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
194
- FakeWeb.register_uri :put, "http://localhost:5984/test/foo_bar%2F0", body: resp.to_json
222
+ stub_request(:put, "http://localhost:5984/test/foo_bar%2F0").
223
+ to_return(body: resp.to_json)
224
+
195
225
  assert foo = FooBar.find('1')
196
226
  assert foo.foo = 1
197
227
  assert foo.save
198
- assert expected_doc = foo.doc
199
- FakeWeb.register_uri :get, "#{query_base_path}?keys=%5B%22foo_bar%2F0%22%5D&include_docs=true", body: build_view_response([expected_doc]).to_json
228
+ assert expected_doc = foo.send(:doc)
229
+
230
+ stub_request(:get, "#{query_base_path}?keys=%5B%22foo_bar%2F0%22%5D&include_docs=true").
231
+ to_return(body: build_view_response([expected_doc]).to_json)
232
+
200
233
  assert foo.reload
201
234
  assert_equal 1, foo.foo
202
235
  end
@@ -228,9 +261,11 @@ class DocumentTest < ActiveSupport::TestCase
228
261
 
229
262
  test 'multi response with right data' do
230
263
  all = FooBar.all
231
- ids = @multi_resp[:rows].map{|d| d[:id]}
264
+ @multi_resp[:rows].map{|d| d[:id]}
265
+ @multi_resp[:rows].map{|d| d[:doc][:bar]}
266
+
232
267
  foos = @multi_resp[:rows].map{|d| d[:doc][:foo]}
233
- bars = @multi_resp[:rows].map{|d| d[:doc][:bar]}
268
+
234
269
  all.each do |d|
235
270
  assert foos.include?(d.foo)
236
271
  end
@@ -258,24 +293,34 @@ class DocumentTest < ActiveSupport::TestCase
258
293
 
259
294
  test 'delete method on document' do
260
295
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
261
- FakeWeb.register_uri :delete, /http:\/\/localhost:5984\/test\/foo_bar%2F[^\?]+\?rev=.+/, body: resp.to_json
296
+
297
+ stub_request(:delete, /http:\/\/localhost:5984\/test\/foo_bar%2F[^\?]+\?rev=.+/).
298
+ to_return(body: resp.to_json)
299
+
262
300
  doc = FooBar.find "1"
263
301
  doc.destroy
264
302
  end
265
303
 
266
304
  test 'soft delete on document' do
267
- skip "delete should be able to do soft deletion."
305
+ assert doc = FooBar.find("1")
306
+ build_save_request(doc)
307
+ assert doc.destroy(false)
308
+ assert_equal true, doc.send(:doc)[:_deleted]
268
309
  end
269
310
 
270
311
  test 'query custom view' do
271
- FakeWeb.register_uri :get, "http://localhost:5984/test/_design/test/_view/custom_view?key=1&include_docs=true", body: @multi_resp.to_json
312
+ stub_request(:get, "http://localhost:5984/test/_design/test/_view/custom_view?key=1&include_docs=true").
313
+ to_return(body: @multi_resp.to_json)
314
+
272
315
  f = FooBar.find_with "test", "custom_view", key: 1
273
316
  assert_equal 2, f.count
274
317
  f.each{ |d| assert d.kind_of?(FooBar) }
275
318
  end
276
319
 
277
320
  test 'query custom view collation' do
278
- FakeWeb.register_uri :get, "http://localhost:5984/test/_design/test/_view/custom_view?startkey=%5B1%5D&endkey=%5B1%2C%7B%7D%5D&include_docs=true", body: @multi_type_resp.to_json
321
+ stub_request(:get, "http://localhost:5984/test/_design/test/_view/custom_view?startkey=%5B1%5D&endkey=%5B1%2C%7B%7D%5D&include_docs=true").
322
+ to_return(body: @multi_type_resp.to_json)
323
+
279
324
  f = FooBar.find_with "test", "custom_view", { startkey: [1], endkey: [1, {}]}
280
325
  assert_equal 2, f.count
281
326
  assert f.first.kind_of?(FooBar)
@@ -326,7 +371,7 @@ class DocumentTest < ActiveSupport::TestCase
326
371
  end
327
372
 
328
373
  test 'update document propertys with bang' do
329
- foo = FooBar.new 'id' => 'a', foo: 'ab', bar: 'ba'
374
+ foo = FooBar.new 'id'=> 'a', foo: 'ab', bar: 'ba'
330
375
  foo.expects(:save).once
331
376
  foo.update_properties! foo: 'c'
332
377
  end
@@ -340,13 +385,17 @@ class DocumentTest < ActiveSupport::TestCase
340
385
 
341
386
  test 'set updated at' do
342
387
  foo = FooBar.new 'id' => 'a', foo: 'ab'
388
+ build_save_request foo
343
389
  foo.update_properties! foo: 'c'
344
390
  assert_equal Time.now.to_s, foo.updated_at.to_s
345
391
  end
346
392
 
347
393
  test 'created at is set' do
348
394
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
349
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/foo_bar%2F.+/, body: resp.to_json
395
+
396
+ stub_request(:put, /http:\/\/localhost:5984\/test\/foo_bar%2F.+/).
397
+ to_return(body: resp.to_json)
398
+
350
399
  properties = {foo: 1, bar: 2, boolean: false}
351
400
  foo = FooBar.new properties
352
401
  foo.save
@@ -355,6 +404,9 @@ class DocumentTest < ActiveSupport::TestCase
355
404
 
356
405
  test 'reader :bar is not calling the writer :bar=' do
357
406
  foo = FooBar.new
407
+
408
+ build_save_request(foo)
409
+
358
410
  foo.bar = 'bar'
359
411
  foo.save!
360
412
  foo.expects(:bar=).times(0)
@@ -368,6 +420,9 @@ class DocumentTest < ActiveSupport::TestCase
368
420
 
369
421
  test 'persisted? returns false if _rev is not present' do
370
422
  foo = FooBar.new
423
+
424
+ build_save_request(foo)
425
+
371
426
  assert_equal foo.persisted?, false
372
427
  assert foo.save
373
428
  assert_equal foo.persisted?, true
@@ -375,14 +430,20 @@ class DocumentTest < ActiveSupport::TestCase
375
430
 
376
431
  test 'can save without timestamps' do
377
432
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
378
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/foo_baz%2F.+/, body: resp.to_json
433
+
434
+ stub_request(:put, /http:\/\/localhost:5984\/test\/foo_baz%2F.+/)
435
+ .to_return(body: resp.to_json)
436
+
379
437
  foobaz = FooBaz.new foo: {foo: :bar}
380
438
  assert foobaz.save!
381
439
  end
382
440
 
383
441
  test 'property writes work correctly with pipe equals' do
384
442
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
385
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/foo_baz%2F.+/, body: resp.to_json
443
+
444
+ stub_request(:put, /http:\/\/localhost:5984\/test\/foo_baz%2F.+/).
445
+ to_return(body: resp.to_json)
446
+
386
447
  foobaz = FooBaz.new foo: {'foo' => 'bar'}
387
448
  foobaz.add_to_foo 'bar', 'bar'
388
449
  assert_equal foobaz.foo, {'foo' => 'bar', 'bar' => 'bar'}
@@ -390,25 +451,28 @@ class DocumentTest < ActiveSupport::TestCase
390
451
 
391
452
  test 'default should populate before save' do
392
453
  test_foo = TestFoo.new
393
- assert_equal 'FOO', test_foo.doc['default_test_property']
454
+ assert_equal 'FOO', test_foo.default_test_property
394
455
  end
395
456
 
396
457
  test 'default should be overridden by params' do
397
458
  test_foo = TestFoo.new(default_test_property: 'bar')
398
- assert_equal 'bar', test_foo.doc['default_test_property']
459
+ assert_equal 'bar', test_foo.default_test_property
399
460
  end
400
461
 
401
462
  test 'doc and method and instance var are the same' do
402
463
  test_foo = FooBar.new
403
464
  test_foo.foo = 'test_value'
404
465
  assert_equal 'test_value', test_foo.foo
405
- assert_equal 'test_value', test_foo.doc['foo']
466
+ assert_equal 'test_value', test_foo.send(:doc)[:foo]
406
467
  assert_equal 'test_value', test_foo.instance_variable_get(:@foo)
407
468
  end
408
469
 
409
470
  test 'created at is current time' do
410
471
  resp = {ok: true, id: "with_time/timed", rev: "FF0000"}
411
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/with_time%2F.+/, body: resp.to_json
472
+
473
+ stub_request(:put, /http:\/\/localhost:5984\/test\/with_time%2F.+/).
474
+ to_return(body: resp.to_json)
475
+
412
476
  test = WithTime.new id: "timed"
413
477
  assert test.respond_to?(:created_at)
414
478
  assert test.save
@@ -418,7 +482,8 @@ class DocumentTest < ActiveSupport::TestCase
418
482
  test 'nil default' do
419
483
  properties = {foo: nil, is_nil: nil}
420
484
  resp = {ok: true, id: "foo_bar/1", rev: "FF0000"}
421
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/foo_bar%2F.+/, body: resp.to_json
485
+ stub_request(:put, /http:\/\/localhost:5984\/test\/foo_bar%2F.+/).
486
+ to_return(body: resp.to_json)
422
487
  foo = FooBar.new properties
423
488
  foo.save
424
489
  properties.each do |k, v|
@@ -442,19 +507,21 @@ class DocumentTest < ActiveSupport::TestCase
442
507
 
443
508
  test 'save returns false for invalid document on save' do
444
509
  foo = DocumentWithValidMethod.new
445
- assert_not foo.save
510
+ assert_equal foo.save, false
446
511
  end
447
512
 
448
513
  test 'save succeeds for invalid document if skipping validations' do
449
514
  resp = {ok: true, id: "document_with_valid_method/1", rev: "FF0000"}
450
- FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/document_with_valid_method%2F.+/, body: resp.to_json
515
+ stub_request(:put, /http:\/\/localhost:5984\/test\/document_with_valid_method%2F.+/).
516
+ to_return(body: resp.to_json)
517
+
451
518
  foo = DocumentWithValidMethod.new
452
519
  assert foo.save(validate: false)
453
520
  end
454
521
 
455
522
  test 'default objects are not the same in memory' do
456
523
  doc_with_same_default = DocWithSameDefaults.new
457
- assert_not doc_with_same_default.foo.equal? doc_with_same_default.bar
524
+ assert_not_same doc_with_same_default.foo, doc_with_same_default.bar
458
525
  doc_with_same_default.foo.push 'foo'
459
526
  assert doc_with_same_default.bar == []
460
527
  end
@@ -471,71 +538,41 @@ class DocumentTest < ActiveSupport::TestCase
471
538
 
472
539
  test 'attach_file! will add a standalone attachment to the document' do
473
540
  assert save_response = {ok: true, id: "base_dolly/79178957-96ff-40d9-9ecb-217fa35bdea7", rev: "1"}
474
- assert FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/base_dolly%2F.+/, body: save_response.to_json
541
+
542
+ assert stub_request(:put, /http:\/\/localhost:5984\/test\/base_dolly%2F.+/).
543
+ to_return(body: save_response.to_json)
544
+
475
545
  assert doc = BaseDolly.new
476
546
  assert doc.save
477
547
  assert resp = {ok: true, id: '79178957-96ff-40d9-9ecb-217fa35bdea7', rev: '2'}
478
- assert FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/base_dolly\/79178957-96ff-40d9-9ecb-217fa35bdea7\/test.txt/, body: resp.to_json
548
+ assert stub_request(:put, /http:\/\/localhost:5984\/test\/base_dolly\/79178957-96ff-40d9-9ecb-217fa35bdea7\/test.txt/)
549
+ .to_return(body: resp.to_json)
550
+
479
551
  assert data = File.open("#{FileUtils.pwd}/test/support/test.txt").read
480
552
  assert doc.attach_file! 'test.txt', 'text/plain', data
481
553
  end
482
554
 
483
555
  test 'attach_file! will add an inline attachment if specified' do
484
556
  assert save_response = {ok: true, id: "base_dolly/79178957-96ff-40d9-9ecb-217fa35bdea7", rev: "1"}
485
- assert FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/base_dolly%2F.+/, body: save_response.to_json
557
+
558
+ assert stub_request(:put, /http:\/\/localhost:5984\/test\/base_dolly%2F.+/).
559
+ to_return(body: save_response.to_json)
560
+
486
561
  assert doc = BaseDolly.new
487
562
  assert doc.save
488
563
  assert resp = {ok: true, id: '79178957-96ff-40d9-9ecb-217fa35bdea7', rev: '2'}
489
- assert FakeWeb.register_uri :put, /http:\/\/localhost:5984\/test\/base_dolly\/79178957-96ff-40d9-9ecb-217fa35bdea7\/test.txt/, body: resp.to_json
564
+
565
+ assert stub_request(:put, /http:\/\/localhost:5984\/test\/base_dolly\/79178957-96ff-40d9-9ecb-217fa35bdea7\/test.txt/).
566
+ to_return(body: resp.to_json)
567
+
490
568
  assert data = File.open("#{FileUtils.pwd}/test/support/test.txt").read
491
569
  assert doc.attach_file! 'test.txt', 'text/plain', data, inline: true
492
- assert doc.doc['_attachments']['test.txt'].present?
493
- assert_equal Base64.encode64(data), doc.doc['_attachments']['test.txt']['data']
570
+ assert_equal doc.send(:doc)['_attachments']['test.txt']&.empty?, false
571
+ assert_equal Base64.encode64(data), doc.send(:doc)['_attachments']['test.txt']['data']
494
572
  end
495
573
 
496
574
  test "new object from inhereted document" do
497
575
  assert bar = Bar.new(a: 1)
498
576
  assert_equal 1, bar.a
499
577
  end
500
-
501
- private
502
- def generic_response rows, count = 1
503
- {total_rows: count, offset:0, rows: rows}
504
- end
505
-
506
- def build_view_response properties
507
- rows = properties.map.with_index do |v, i|
508
- {
509
- id: "foo_bar/#{i}",
510
- key: "foo_bar",
511
- value: 1,
512
- doc: {_id: "foo_bar/#{i}", _rev: SecureRandom.hex}.merge!(v)
513
- }
514
- end
515
- generic_response rows, properties.count
516
- end
517
-
518
- def build_view_collation_response properties
519
- rows = properties.map.with_index do |v, i|
520
- id = i.zero? ? "foo_bar/#{i}" : "baz/#{i}"
521
- {
522
- id: id,
523
- key: "foo_bar",
524
- value: 1,
525
- doc: {_id: id, _rev: SecureRandom.hex}.merge!(v)
526
- }
527
- end
528
- generic_response rows, properties.count
529
- end
530
-
531
-
532
- def build_request keys, body, view_name = 'foo_bar'
533
- query = "keys=#{CGI::escape keys.to_s.gsub(' ','')}&" unless keys.blank?
534
- FakeWeb.register_uri :get, "#{query_base_path}?#{query.to_s}include_docs=true", body: body.to_json
535
- end
536
-
537
- def query_base_path
538
- "#{DB_BASE_PATH}/_all_docs"
539
- end
540
-
541
578
  end