couch_potato 1.19.1 → 1.19.2
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/CHANGES.md +4 -0
- data/lib/couch_potato/version.rb +1 -1
- data/lib/couch_potato/view/view_query.rb +31 -20
- data/spec/single_design_document_spec.rb +12 -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: 3e1d161e4bd65577a3de846d945bc5787dbdacdec35c7e38f3129e8108cfa5a3
|
4
|
+
data.tar.gz: 967bcb265ed7886130a9fa79acb51a2f4420ec16e45ac7373d1b39a4895951c0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5b282eda9e2c8bcaf1ad191cd5f5f867dfc2ef406a6db2f079a5882b198149ef416e07ef3a3fd5ed7c82bbd5ddb9f82243cce16509dce0f8b7d7fa8d9e1768a
|
7
|
+
data.tar.gz: 713b759678703c0bbdf935e17405dd07f62f0b1e2d92a1afed81bde89620c16514320088887f275af8fcfc9114684f754687ed5306b1f8a52ca1bca3888c2407
|
data/CHANGES.md
CHANGED
data/lib/couch_potato/version.rb
CHANGED
@@ -25,6 +25,8 @@ module CouchPotato
|
|
25
25
|
# only after clearing the cache design docs will be updated/re-created.
|
26
26
|
def self.clear_cache
|
27
27
|
__updated_views.clear
|
28
|
+
@all_views = nil
|
29
|
+
@all_views_digest = nil
|
28
30
|
end
|
29
31
|
|
30
32
|
def self.__updated_views
|
@@ -32,53 +34,62 @@ module CouchPotato
|
|
32
34
|
@updated_views
|
33
35
|
end
|
34
36
|
|
37
|
+
def self.all_views
|
38
|
+
@all_views ||= CouchPotato.views.flat_map do |klass|
|
39
|
+
specs = klass.views.map { |view_name, view| klass.execute_view(view_name, {}) }
|
40
|
+
specs.map do |klass_spec|
|
41
|
+
{ klass_spec.view_name => view_functions(klass_spec.map_function, klass_spec.reduce_function) }
|
42
|
+
end
|
43
|
+
end.inject(&:merge)
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.all_views_digest
|
47
|
+
@all_views_digest ||= Digest::SHA256.hexdigest(all_views.to_json)
|
48
|
+
end
|
49
|
+
|
35
50
|
private
|
36
51
|
|
37
52
|
def update_view
|
38
|
-
design_doc = @database.get "_design/#{
|
53
|
+
design_doc = @database.get "_design/#{design_document_name}" rescue nil
|
39
54
|
original_views = design_doc && design_doc['views'].dup
|
40
55
|
view_updated
|
41
56
|
design_doc ||= empty_design_document
|
42
57
|
if CouchPotato::Config.single_design_document
|
43
|
-
design_doc['views'] = all_views
|
44
|
-
if CouchPotato::Config.digest_view_names
|
45
|
-
design_doc['_id'] = "_design/#{@design_document_name}-#{Digest::SHA256.hexdigest(design_doc['views'].to_json)}"
|
46
|
-
end
|
58
|
+
design_doc['views'] = self.class.all_views
|
47
59
|
else
|
48
|
-
design_doc['views'][@view_name.to_s] = view_functions
|
60
|
+
design_doc['views'][@view_name.to_s] = self.class.view_functions(@map_function, @reduce_function)
|
49
61
|
end
|
50
62
|
if original_views != design_doc['views']
|
51
63
|
@database.save_doc(design_doc)
|
52
64
|
end
|
53
65
|
end
|
54
66
|
|
55
|
-
def
|
56
|
-
CouchPotato.views.flat_map do |klass|
|
57
|
-
specs = klass.views.map { |view_name, view| klass.execute_view(view_name, {}) }
|
58
|
-
specs.map do |klass_spec|
|
59
|
-
{ klass_spec.view_name => view_functions(klass_spec.map_function, klass_spec.reduce_function) }
|
60
|
-
end
|
61
|
-
end.inject(&:merge)
|
62
|
-
end
|
63
|
-
|
64
|
-
def view_functions(map_function = @map_function, reduce_function = @reduce_function)
|
67
|
+
def self.view_functions(map_function, reduce_function)
|
65
68
|
{'map' => map_function, 'reduce' => reduce_function}.compact
|
66
69
|
end
|
67
70
|
|
68
71
|
def empty_design_document
|
69
|
-
{'views' => {}, "_id" => "_design/#{
|
72
|
+
{'views' => {}, "_id" => "_design/#{design_document_name}", "language" => @language.to_s}
|
73
|
+
end
|
74
|
+
|
75
|
+
def design_document_name
|
76
|
+
name = @design_document_name
|
77
|
+
if CouchPotato::Config.digest_view_names && CouchPotato::Config.single_design_document
|
78
|
+
name += "-#{self.class.all_views_digest}"
|
79
|
+
end
|
80
|
+
name
|
70
81
|
end
|
71
82
|
|
72
83
|
def view_has_been_updated?
|
73
84
|
if CouchPotato::Config.single_design_document
|
74
85
|
updated_views.any?
|
75
86
|
else
|
76
|
-
updated_views[[
|
87
|
+
updated_views[[design_document_name, @view_name]]
|
77
88
|
end
|
78
89
|
end
|
79
90
|
|
80
91
|
def view_updated
|
81
|
-
updated_views[[
|
92
|
+
updated_views[[design_document_name, @view_name]] = true
|
82
93
|
end
|
83
94
|
|
84
95
|
def updated_views
|
@@ -90,7 +101,7 @@ module CouchPotato
|
|
90
101
|
end
|
91
102
|
|
92
103
|
def view_url
|
93
|
-
"#{
|
104
|
+
"#{design_document_name}/#{@view_name}"
|
94
105
|
end
|
95
106
|
end
|
96
107
|
end
|
@@ -30,10 +30,13 @@ describe 'single design document' do
|
|
30
30
|
recreate_db
|
31
31
|
CouchPotato::Config.single_design_document = true
|
32
32
|
CouchPotato.views.select! { |v| [Thing1, Thing2, Thing3].include?(v) } # clear classes from other specs
|
33
|
+
CouchPotato::View::ViewQuery.clear_cache
|
33
34
|
end
|
34
35
|
|
35
36
|
after(:each) do
|
36
37
|
CouchPotato::Config.single_design_document = false
|
38
|
+
CouchPotato::Config.digest_view_names = false
|
39
|
+
CouchPotato::View::ViewQuery.clear_cache
|
37
40
|
end
|
38
41
|
|
39
42
|
it 'creates a single design document for all views' do
|
@@ -60,4 +63,13 @@ describe 'single design document' do
|
|
60
63
|
expect(db.view(Thing2.all('n2'))).to eq([thing2])
|
61
64
|
expect(db.view(Thing3.by_tag('tag1'))).to eq([thing3])
|
62
65
|
end
|
66
|
+
|
67
|
+
it 'queries the single design doc with digest_view_names enabled' do
|
68
|
+
CouchPotato::Config.digest_view_names = true
|
69
|
+
|
70
|
+
thing1 = Thing1.new title: 't1'
|
71
|
+
db.save! thing1
|
72
|
+
|
73
|
+
expect(db.view(Thing1.all)).to(eq([thing1]))
|
74
|
+
end
|
63
75
|
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.19.
|
4
|
+
version: 1.19.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alexander Lang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-06-
|
11
|
+
date: 2025-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|