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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ebc35d2d68e09d52bac2dec8d876e6cc0173bc4f0959c3ecff6d35483791553d
4
- data.tar.gz: 0a7f6752cb79df5f1a9f6bb7a4a5252df570ddc82f4632ac21c6b6daf919263e
3
+ metadata.gz: 3e1d161e4bd65577a3de846d945bc5787dbdacdec35c7e38f3129e8108cfa5a3
4
+ data.tar.gz: 967bcb265ed7886130a9fa79acb51a2f4420ec16e45ac7373d1b39a4895951c0
5
5
  SHA512:
6
- metadata.gz: 4c42c9fbc4f3401e117c29fbbe7c78df593124dce08d50471b210f9b7dfb7aa5e9f6923935d96e3cb6a8fffff2e565a2fd36ab4fe935b1c492a0b7f7fb8a4159
7
- data.tar.gz: e6e43661a6e9d4c1e2d89751a2560e5cbb4fe6b311643d438e64c7c40b243b208b859c711537f1ae105bf0777185769b294c48a6f70816a9b78b4592e79f65f8
6
+ metadata.gz: f5b282eda9e2c8bcaf1ad191cd5f5f867dfc2ef406a6db2f079a5882b198149ef416e07ef3a3fd5ed7c82bbd5ddb9f82243cce16509dce0f8b7d7fa8d9e1768a
7
+ data.tar.gz: 713b759678703c0bbdf935e17405dd07f62f0b1e2d92a1afed81bde89620c16514320088887f275af8fcfc9114684f754687ed5306b1f8a52ca1bca3888c2407
data/CHANGES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## Changes
2
2
 
3
+ # 1.19.2
4
+
5
+ - fix 404/409 error when querying single design doc with `digest_view_names` enabled
6
+
3
7
  # 1.19.1
4
8
 
5
9
  - add digest to design doc name if `single_design_document` and `digest_view_names` are enabled
@@ -1,4 +1,4 @@
1
1
  module CouchPotato
2
- VERSION = '1.19.1'.freeze
2
+ VERSION = '1.19.2'.freeze
3
3
  RSPEC_VERSION = '4.2.0'.freeze
4
4
  end
@@ -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/#{@design_document_name}" rescue nil
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 all_views
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/#{@design_document_name}", "language" => @language.to_s}
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[[@design_document_name, @view_name]]
87
+ updated_views[[design_document_name, @view_name]]
77
88
  end
78
89
  end
79
90
 
80
91
  def view_updated
81
- updated_views[[@design_document_name, @view_name]] = true
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
- "#{@design_document_name}/#{@view_name}"
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.1
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-05 00:00:00.000000000 Z
11
+ date: 2025-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel