mongoid-collection-snapshot 1.3.1 → 1.3.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
  SHA1:
3
- metadata.gz: a83bba2b3b5308ff4015fb6b1160946e9ce76acc
4
- data.tar.gz: 74c2c24fcee8b86d53cd090cddcb3dd9b59ce117
3
+ metadata.gz: 413b563ac9f33351ab543a7e72f56e7c5402802c
4
+ data.tar.gz: 803caae2c222ab14a8cbdcef6b1390a941cfed87
5
5
  SHA512:
6
- metadata.gz: b4d4d635979850c86c773192dea47a00497a48a5d1220fce28e80cae6e002960ffa3a9f7db48ac5be62c6c22043120dbf4bb117971705561f831fb617b033ad3
7
- data.tar.gz: ac843dacc50abd245f56487ddaa49542d2aed4cc70d4a82ab9e84d359b0bc2306217471db489db6a70ff7798babd7736c6fdd042ab230958204507be1e3853fa
6
+ metadata.gz: 8f27da72bb8c0308a12d0f79b7a06afd5c9317407036231bdda9995b9eec05f845641116d44fc28c042c758e2ce278c7cb31ed685d9ced8c5ea67e072f171ef9
7
+ data.tar.gz: f48f7d1e8414a9dbd7ba41f541d86b57382490ed7ea51a1aa2e93b4bb522f2d960ac9f22daea95ffb14c0965e1d577a94da20c1f258706cc88d04a3b5490ee7e
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2017-01-20 15:27:40 -0500 using RuboCop version 0.47.1.
3
+ # on 2017-06-03 12:33:20 -0400 using RuboCop version 0.47.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -26,18 +26,18 @@ Lint/UselessAccessModifier:
26
26
 
27
27
  # Offense count: 3
28
28
  Metrics/AbcSize:
29
- Max: 34
29
+ Max: 37
30
30
 
31
31
  # Offense count: 5
32
32
  # Configuration parameters: CountComments, ExcludedMethods.
33
33
  Metrics/BlockLength:
34
- Max: 145
34
+ Max: 151
35
35
 
36
36
  # Offense count: 1
37
37
  Metrics/CyclomaticComplexity:
38
38
  Max: 8
39
39
 
40
- # Offense count: 43
40
+ # Offense count: 46
41
41
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
42
42
  # URISchemes: http, https
43
43
  Metrics/LineLength:
@@ -51,7 +51,7 @@ Metrics/MethodLength:
51
51
  # Offense count: 1
52
52
  # Configuration parameters: CountComments.
53
53
  Metrics/ModuleLength:
54
- Max: 147
54
+ Max: 153
55
55
 
56
56
  # Offense count: 1
57
57
  Metrics/PerceivedComplexity:
@@ -1,6 +1,7 @@
1
- ### 1.3.2 (Next)
1
+ ### 1.3.2 (6/4/2017)
2
2
 
3
- * Your contribution here.
3
+ * [#13](https://github.com/mongoid/mongoid-collection-snapshot/issues/13): Fix: use correct database on all threads - [@dblock](https://github.com/dblock).
4
+ * [#7](https://github.com/mongoid/mongoid-collection-snapshot/issues/7): Fix: `max_collection_snapshot_instances` broken - [@dblock](https://github.com/dblock).
4
5
 
5
6
  ### 1.3.1 (5/22/2017)
6
7
 
@@ -2,7 +2,7 @@ require 'mongoid-collection-snapshot/version'
2
2
 
3
3
  module Mongoid
4
4
  module CollectionSnapshot
5
- extend ActiveSupport::Concern
5
+ extend ::ActiveSupport::Concern
6
6
 
7
7
  DEFAULT_COLLECTION_KEY_NAME = '*'.freeze
8
8
 
@@ -16,10 +16,10 @@ module Mongoid
16
16
  field :workspace_basename, default: 'snapshot'
17
17
  slug :workspace_basename
18
18
 
19
- field :max_collection_snapshot_instances, default: 2
19
+ class_attribute :max_collection_snapshot_instances
20
20
 
21
21
  before_create :build
22
- after_create :ensure_at_most_two_instances_exist
22
+ after_create :ensure_at_most_max_instances_exist
23
23
  before_destroy :drop_snapshot_collections
24
24
 
25
25
  class_attribute :document_blocks
@@ -41,14 +41,18 @@ module Mongoid
41
41
  cattr_accessor :mongo_session
42
42
  end
43
43
  instance_eval(&document_block) if document_block
44
- store_in collection: collection_name
45
44
  end
46
45
  if Mongoid::Compatibility::Version.mongoid6?
47
- ctx = PersistenceContext.set(klass, {})
48
- ctx.instance_variable_set(:@client, snapshot_session)
46
+ # assign a name to the snapshot session
47
+ session_id = snapshot_session.object_id.to_s
48
+ Mongoid::Clients.set session_id, snapshot_session
49
+ # tell the class to use the client by name
50
+ klass.class_variable_set :@@storage_options, client: session_id, collection: collection_name
49
51
  elsif Mongoid::Compatibility::Version.mongoid5?
52
+ klass.store_in collection: collection_name
50
53
  klass.mongo_client = snapshot_session
51
54
  else
55
+ klass.store_in collection: collection_name
52
56
  klass.mongo_session = snapshot_session
53
57
  end
54
58
  Object.const_set(class_name, klass)
@@ -87,8 +91,9 @@ module Mongoid
87
91
  # called after each save - making sure only at most two instances exists should be
88
92
  # sufficient to ensure that this data can be rebuilt live without corrupting any
89
93
  # existing computations that might have a handle to the previous "latest" instance.
90
- def ensure_at_most_two_instances_exist
94
+ def ensure_at_most_max_instances_exist
91
95
  all_instances = self.class.order_by([[:created_at, :desc]]).to_a
96
+ max_collection_snapshot_instances = self.class.max_collection_snapshot_instances || 2
92
97
  return unless all_instances.length > max_collection_snapshot_instances
93
98
  all_instances[max_collection_snapshot_instances..-1].each(&:destroy)
94
99
  end
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module CollectionSnapshot
3
- VERSION = '1.3.1'.freeze
3
+ VERSION = '1.3.2'.freeze
4
4
  end
5
5
  end
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test
5
+ imports:
6
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test-imports
@@ -0,0 +1,6 @@
1
+ test:
2
+ sessions:
3
+ default:
4
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test
5
+ imports:
6
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test-imports
@@ -0,0 +1,6 @@
1
+ test:
2
+ clients:
3
+ default:
4
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test
5
+ imports:
6
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test-imports
@@ -0,0 +1,6 @@
1
+ test:
2
+ clients:
3
+ default:
4
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test
5
+ imports:
6
+ uri: mongodb://localhost:27017/mongoid-collection-snapshot_test-imports
@@ -55,6 +55,15 @@ module Mongoid
55
55
  end
56
56
  end
57
57
 
58
+ it 'maintains at most max_collection_snapshot_instances of the latest snapshots to support its calculations' do
59
+ AverageArtistPrice.max_collection_snapshot_instances = 5
60
+ AverageArtistPrice.create
61
+ 10.times do
62
+ AverageArtistPrice.create
63
+ end
64
+ expect(AverageArtistPrice.count).to eq(5)
65
+ end
66
+
58
67
  context '#documents' do
59
68
  it 'provides access to a Mongoid collection' do
60
69
  snapshot = AverageArtistPrice.create
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ class Widget
4
+ include Mongoid::Document
5
+ end
6
+
7
+ class Gadget
8
+ include Mongoid::Document
9
+ end
10
+
11
+ class WidgetsAndGadgets
12
+ include Mongoid::CollectionSnapshot
13
+
14
+ document do
15
+ belongs_to :widget, inverse_of: nil
16
+ belongs_to :gadget, inverse_of: nil
17
+ end
18
+
19
+ def build
20
+ collection_snapshot.drop
21
+ Widget.all.each do |widget|
22
+ Gadget.all.each do |gadget|
23
+ if Mongoid::Compatibility::Version.mongoid5? || Mongoid::Compatibility::Version.mongoid6?
24
+ collection_snapshot.insert_one(widget_id: widget.id, gadget_id: gadget.id)
25
+ else
26
+ collection_snapshot.insert(widget_id: widget.id, gadget_id: gadget.id)
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ def snapshot_session
33
+ if Mongoid::Compatibility::Version.mongoid5? || Mongoid::Compatibility::Version.mongoid6?
34
+ Mongoid.client('imports')
35
+ else
36
+ Mongoid.session('imports')
37
+ end
38
+ end
39
+ end
40
+
41
+ module Mongoid
42
+ describe CollectionSnapshot do
43
+ before do
44
+ Widget.delete_all
45
+ Gadget.delete_all
46
+ Widget.create!
47
+ Gadget.create!
48
+ WidgetsAndGadgets.each.map(&:collection_snapshot).each(&:drop)
49
+ WidgetsAndGadgets.create!
50
+ end
51
+ it 'uses the correct database on a separate thread' do
52
+ expect(WidgetsAndGadgets.latest.documents.count).to eq 1
53
+ require 'thread'
54
+ Thread.new do
55
+ expect(WidgetsAndGadgets.latest.documents.count).to eq 1
56
+ WidgetsAndGadgets.latest.documents.each do |pair|
57
+ expect(pair.widget).to_not be nil
58
+ expect(pair.gadget).to_not be nil
59
+ end
60
+ end.join
61
+ end
62
+ end
63
+ end
@@ -5,9 +5,7 @@ require 'rspec'
5
5
  require 'mongoid'
6
6
  require 'timecop'
7
7
 
8
- Mongoid.configure do |config|
9
- config.connect_to('mongoid-collection-snapshot_test')
10
- end
8
+ Mongoid.load!("#{File.dirname(__FILE__)}/config/mongoid#{ENV['MONGOID_VERSION'] || 6}.yml", :test)
11
9
 
12
10
  require File.expand_path('../../lib/mongoid-collection-snapshot', __FILE__)
13
11
  Dir["#{File.dirname(__FILE__)}/models/**/*.rb"].each { |f| require f }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-collection-snapshot
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Windsor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-22 00:00:00.000000000 Z
11
+ date: 2017-06-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -80,6 +80,10 @@ files:
80
80
  - lib/mongoid-collection-snapshot.rb
81
81
  - lib/mongoid-collection-snapshot/version.rb
82
82
  - mongoid-collection-snapshot.gemspec
83
+ - spec/config/mongoid3.yml
84
+ - spec/config/mongoid4.yml
85
+ - spec/config/mongoid5.yml
86
+ - spec/config/mongoid6.yml
83
87
  - spec/models/artist.rb
84
88
  - spec/models/artwork.rb
85
89
  - spec/models/average_price.rb
@@ -87,6 +91,7 @@ files:
87
91
  - spec/models/multi_collection_snapshot.rb
88
92
  - spec/models/partner.rb
89
93
  - spec/mongoid/collection_snapshot_spec.rb
94
+ - spec/mongoid/multiple_databases_spec.rb
90
95
  - spec/spec_helper.rb
91
96
  homepage: http://github.com/mongoid/mongoid-collection-snapshot
92
97
  licenses:
@@ -108,7 +113,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
113
  version: 1.3.6
109
114
  requirements: []
110
115
  rubyforge_project:
111
- rubygems_version: 2.6.11
116
+ rubygems_version: 2.6.12
112
117
  signing_key:
113
118
  specification_version: 4
114
119
  summary: Easy maintenence of collections of processed data in MongoDB with the Mongoid