couch_potato 1.13.0 → 1.14.0
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGES.md +4 -0
- data/lib/couch_potato/database.rb +2 -0
- data/lib/couch_potato/persistence.rb +1 -1
- data/lib/couch_potato/version.rb +1 -1
- data/lib/couch_potato/view/flex_view_spec.rb +2 -0
- data/lib/couch_potato.rb +1 -1
- data/spec/create_spec.rb +13 -3
- data/spec/unit/database_spec.rb +55 -8
- data/spec/unit/flex_view_spec_spec.rb +27 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd4dede2152745db1f3f0bf7ff3a94dfea3c7eb427beb02292034866dd7dac22
|
4
|
+
data.tar.gz: 29ca77512b6bdeebcdd31847deac4957792946519dda4f658f60dd90c9dd83e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 21728691cd7eb4b23bd6600899655cc7fa1dbb6a15a6d40c669b53941fab30bf38cb8a95fa9a3e8f85e05d44af116f58cd20a424eedd60d417972db893c07aff
|
7
|
+
data.tar.gz: d2d26373afd0bcce487b35703be3bd7bd08cc7e4e108f98e8279bf81c41715b30f5590fdf8080c4b136ec95e356c857b5c50bef123b6971e67294e79cdeb180a
|
data/.gitignore
CHANGED
data/CHANGES.md
CHANGED
@@ -224,6 +224,7 @@ module CouchPotato
|
|
224
224
|
elsif processed_results.respond_to?(:each)
|
225
225
|
processed_results.each do |document|
|
226
226
|
document.database = self if document.respond_to?(:database=)
|
227
|
+
document.database_collection = processed_results if document.respond_to?(:database_collection=)
|
227
228
|
end
|
228
229
|
end
|
229
230
|
processed_results
|
@@ -297,6 +298,7 @@ module CouchPotato
|
|
297
298
|
docs = response['rows'].map { |row| row['doc'] }.compact
|
298
299
|
docs.each do |doc|
|
299
300
|
doc.database = self if doc.respond_to?(:database=)
|
301
|
+
doc.database_collection = docs if doc.respond_to?(:database_collection=)
|
300
302
|
end
|
301
303
|
end
|
302
304
|
|
@@ -27,7 +27,7 @@ module CouchPotato
|
|
27
27
|
ForbiddenAttributesProtection, Revisions
|
28
28
|
base.send :include, Validation
|
29
29
|
base.class_eval do
|
30
|
-
attr_accessor :_id, :_rev, :_deleted, :database
|
30
|
+
attr_accessor :_id, :_rev, :_deleted, :database, :database_collection
|
31
31
|
alias_method :id, :_id
|
32
32
|
alias_method :id=, :_id=
|
33
33
|
|
data/lib/couch_potato/version.rb
CHANGED
@@ -73,9 +73,11 @@ module CouchPotato
|
|
73
73
|
end
|
74
74
|
|
75
75
|
def docs
|
76
|
+
all_docs = rows.map { |r| r['doc'] }
|
76
77
|
rows.map do |row|
|
77
78
|
doc = row['doc']
|
78
79
|
doc.database = database if doc.respond_to?(:database=)
|
80
|
+
doc.database_collection = all_docs if doc.respond_to?(:database_collection=)
|
79
81
|
doc
|
80
82
|
end
|
81
83
|
end
|
data/lib/couch_potato.rb
CHANGED
@@ -54,7 +54,7 @@ module CouchPotato
|
|
54
54
|
def self.use(database_name)
|
55
55
|
resolved_database_name = resolve_database_name(database_name)
|
56
56
|
Thread.current[:__couch_potato_databases] ||= {}
|
57
|
-
Thread.current[:__couch_potato_databases][resolved_database_name] ||= Database.new(couchrest_database_for_name
|
57
|
+
Thread.current[:__couch_potato_databases][resolved_database_name] ||= Database.new(couchrest_database_for_name(resolved_database_name), name: database_name)
|
58
58
|
end
|
59
59
|
|
60
60
|
# resolves a name to a database name/full url configured under additional databases
|
data/spec/create_spec.rb
CHANGED
@@ -34,14 +34,24 @@ describe "create" do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
describe "multi-db" do
|
37
|
-
|
37
|
+
let(:test_dbs) do
|
38
|
+
['comment_a', 'comment_b', 'comment_c'].map do |name|
|
39
|
+
if ENV['DATABASE']
|
40
|
+
uri = URI.parse(ENV['DATABASE'])
|
41
|
+
uri.path = "/#{name}"
|
42
|
+
uri.to_s
|
43
|
+
else
|
44
|
+
name
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
38
48
|
|
39
49
|
before(:each) do
|
40
|
-
|
50
|
+
test_dbs.each { |db_name| CouchPotato.couchrest_database_for_name(db_name).recreate! }
|
41
51
|
end
|
42
52
|
|
43
53
|
it "should create documents in multiple dbs" do
|
44
|
-
|
54
|
+
test_dbs.each do |db_name|
|
45
55
|
@comment = Comment.new(:title => 'my_title')
|
46
56
|
CouchPotato.with_database(db_name) do |couch|
|
47
57
|
couch.save_document! @comment
|
data/spec/unit/database_spec.rb
CHANGED
@@ -56,6 +56,16 @@ describe CouchPotato::Database, 'load' do
|
|
56
56
|
db.load '1'
|
57
57
|
end
|
58
58
|
|
59
|
+
it 'does not set database_collection on the model' do
|
60
|
+
user = double('user', 'database_collection=': nil).as_null_object
|
61
|
+
allow(DbTestUser).to receive(:new).and_return(user)
|
62
|
+
allow(couchrest_db).to receive(:get).and_return DbTestUser.json_create({ JSON.create_id => 'DbTestUser' })
|
63
|
+
|
64
|
+
db.load '1'
|
65
|
+
|
66
|
+
expect(user).not_to have_received(:database_collection=).with(db)
|
67
|
+
end
|
68
|
+
|
59
69
|
it 'should load namespaced models' do
|
60
70
|
allow(couchrest_db).to receive(:get).and_return Parent::Child.json_create({ JSON.create_id => 'Parent::Child' })
|
61
71
|
expect(db.load('1').class).to eq(Parent::Child)
|
@@ -89,7 +99,7 @@ describe CouchPotato::Database, 'load' do
|
|
89
99
|
|
90
100
|
it 'does not write itself to a document that has no database= method' do
|
91
101
|
doc1 = double(:doc1)
|
92
|
-
allow(doc1).to receive(:respond_to?)
|
102
|
+
allow(doc1).to receive(:respond_to?) { false }
|
93
103
|
allow(couchrest_db).to receive(:bulk_load) do
|
94
104
|
{ 'rows' => [{ 'doc' => doc1 }] }
|
95
105
|
end
|
@@ -99,6 +109,24 @@ describe CouchPotato::Database, 'load' do
|
|
99
109
|
db.load(['1'])
|
100
110
|
end
|
101
111
|
|
112
|
+
it 'sets database_collection on each of the documents' do
|
113
|
+
db.load(%w[1 2]).each do |doc|
|
114
|
+
expect(doc.database_collection).to eql([doc1, doc2])
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
it 'does not set database_collection on a document that has no database_collection= method' do
|
119
|
+
doc1 = double(:doc1)
|
120
|
+
allow(doc1).to receive(:respond_to?) { false }
|
121
|
+
allow(couchrest_db).to receive(:bulk_load) do
|
122
|
+
{ 'rows' => [{ 'doc' => doc1 }] }
|
123
|
+
end
|
124
|
+
|
125
|
+
expect(doc1).not_to receive(:database_collection=)
|
126
|
+
|
127
|
+
db.load(['1'])
|
128
|
+
end
|
129
|
+
|
102
130
|
it 'returns an empty array when passing an empty array' do
|
103
131
|
expect(db.load([])).to eq([])
|
104
132
|
end
|
@@ -336,7 +364,7 @@ describe CouchPotato::Database, 'view' do
|
|
336
364
|
allow(CouchPotato::View::ViewQuery).to receive_messages(new: double('view query', query_view!: { 'rows' => [@result] }))
|
337
365
|
end
|
338
366
|
|
339
|
-
it '
|
367
|
+
it 'initializes a view query with map/reduce/list/lib funtions' do
|
340
368
|
allow(@spec).to receive_messages(design_document: 'design_doc', view_name: 'my_view',
|
341
369
|
map_function: '<map_code>', reduce_function: '<reduce_code>',
|
342
370
|
lib: { test: '<test_code>' },
|
@@ -355,7 +383,7 @@ describe CouchPotato::Database, 'view' do
|
|
355
383
|
@db.view(@spec)
|
356
384
|
end
|
357
385
|
|
358
|
-
it '
|
386
|
+
it 'initializes a view query with map/reduce/list funtions' do
|
359
387
|
allow(@spec).to receive_messages(design_document: 'design_doc', view_name: 'my_view',
|
360
388
|
map_function: '<map_code>', reduce_function: '<reduce_code>',
|
361
389
|
lib: nil, list_name: 'my_list', list_function: '<list_code>',
|
@@ -374,7 +402,7 @@ describe CouchPotato::Database, 'view' do
|
|
374
402
|
@db.view(@spec)
|
375
403
|
end
|
376
404
|
|
377
|
-
it '
|
405
|
+
it 'initializes a view query with only map/reduce/lib functions' do
|
378
406
|
allow(@spec).to receive_messages(design_document: 'design_doc', view_name: 'my_view',
|
379
407
|
map_function: '<map_code>', reduce_function: '<reduce_code>',
|
380
408
|
list_name: nil, list_function: nil,
|
@@ -390,7 +418,7 @@ describe CouchPotato::Database, 'view' do
|
|
390
418
|
@db.view(@spec)
|
391
419
|
end
|
392
420
|
|
393
|
-
it '
|
421
|
+
it 'initializes a view query with only map/reduce functions' do
|
394
422
|
allow(@spec).to receive_messages(design_document: 'design_doc', view_name: 'my_view',
|
395
423
|
map_function: '<map_code>', reduce_function: '<reduce_code>',
|
396
424
|
lib: nil, list_name: nil, list_function: nil)
|
@@ -405,18 +433,37 @@ describe CouchPotato::Database, 'view' do
|
|
405
433
|
@db.view(@spec)
|
406
434
|
end
|
407
435
|
|
408
|
-
it 'sets itself on returned
|
436
|
+
it 'sets itself on returned docs that have an accessor' do
|
437
|
+
allow(@result).to receive(:respond_to?).and_return(false)
|
409
438
|
allow(@result).to receive(:respond_to?).with(:database=).and_return(true)
|
410
439
|
expect(@result).to receive(:database=).with(@db)
|
411
440
|
@db.view(@spec)
|
412
441
|
end
|
413
442
|
|
414
|
-
it "does not set itself on returned
|
415
|
-
allow(@result).to receive(:respond_to?).
|
443
|
+
it "does not set itself on returned docs that don't have an accessor" do
|
444
|
+
allow(@result).to receive(:respond_to?).and_return(false)
|
416
445
|
expect(@result).not_to receive(:database=).with(@db)
|
417
446
|
@db.view(@spec)
|
418
447
|
end
|
419
448
|
|
449
|
+
it 'sets the result of the view call on each returned doc' do
|
450
|
+
allow(@result).to receive(:respond_to?).and_return(false)
|
451
|
+
allow(@result).to receive(:respond_to?).with(:database_collection=).and_return(true)
|
452
|
+
allow(@result).to receive(:database_collection=)
|
453
|
+
|
454
|
+
@db.view(@spec)
|
455
|
+
|
456
|
+
expect(@result).to have_received(:database_collection=).with([@result])
|
457
|
+
end
|
458
|
+
|
459
|
+
it "does not set the result of the view call on docs that don't have an accessor" do
|
460
|
+
allow(@result).to receive(:respond_to?).and_return(false)
|
461
|
+
|
462
|
+
@db.view(@spec)
|
463
|
+
|
464
|
+
expect(@result).not_to receive(:database_collection=).with([@result])
|
465
|
+
end
|
466
|
+
|
420
467
|
it 'does not try to set itself on result sets that are not collections' do
|
421
468
|
expect do
|
422
469
|
allow(@spec).to receive_messages(process_results: 1)
|
@@ -15,3 +15,30 @@ RSpec.describe CouchPotato::View::FlexViewSpec::Results, '#reduce_count' do
|
|
15
15
|
expect(result.reduce_count).to eq(0)
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
RSpec.describe CouchPotato::View::FlexViewSpec::Results, '#docs' do
|
20
|
+
it 'sets the database on each doc' do
|
21
|
+
db = double('db')
|
22
|
+
doc = double('doc', 'database=': nil)
|
23
|
+
|
24
|
+
result = CouchPotato::View::FlexViewSpec::Results.new 'rows' => [{ 'doc' => doc }]
|
25
|
+
result.database = db
|
26
|
+
|
27
|
+
result.docs
|
28
|
+
|
29
|
+
expect(doc).to have_received(:database=).with(db)
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'sets all docs as database_collection on each doc' do
|
33
|
+
doc = double('doc', 'database_collection=': nil)
|
34
|
+
|
35
|
+
result = CouchPotato::View::FlexViewSpec::Results.new 'rows' => [{ 'doc' => doc }]
|
36
|
+
|
37
|
+
result.docs
|
38
|
+
|
39
|
+
expect(doc).to have_received(:database_collection=).with([doc])
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'returns the docs' do
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: couch_potato
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Lang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|