mongoid_includes 2.1.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -20,11 +20,9 @@ describe Mongoid::Includes::Inclusions do
20
20
  And { result.class == Mongoid::Includes::Inclusions }
21
21
  end
22
22
 
23
- context 'prevents duplicates' do
24
- Given {
25
- inclusions.add(Band.relations['albums'])
26
- }
27
- Then { inclusions.size == 3 }
23
+ it 'prevents duplicates' do
24
+ new_criteria = criteria.includes(:albums)
25
+ expect(new_criteria.inclusions.size).to eq 3
28
26
  end
29
27
  end
30
28
  end
@@ -6,7 +6,7 @@ describe Mongoid::Includes::Criteria do
6
6
  Given(:inclusions) { criteria.inclusions }
7
7
 
8
8
  context 'multiple inclusions through polymorphic associations' do
9
- Given(:pink_floyd) { Band.create!(name: 'Pink Floyd') }
9
+ Given(:pink_floyd) { Band.create!(name: 'Pink Floyd', musician_ids: [nil, '']) }
10
10
  Given(:jethro) { Band.create!(name: 'Jethro Tull') }
11
11
  Given {
12
12
  Artist.create!(name: 'David Gilmour', associated_act: pink_floyd)
@@ -31,7 +31,7 @@ describe Mongoid::Includes::Criteria do
31
31
  }
32
32
 
33
33
  describe ':with inclusions should not be overriden' do
34
- When(:artists) { expect_query(5) { criteria.entries } }
34
+ When(:artists) { expect_query(4) { criteria.entries } } # There are no musicians, so no query should be made.
35
35
  Given(:albums) { artists.map(&:associated_act).flat_map(&:albums) }
36
36
  Then { artists.size == 2 }
37
37
  And {
@@ -49,6 +49,12 @@ describe Mongoid::Includes::Criteria do
49
49
  And { inclusions.first.nested? }
50
50
  And { inclusions.last.polymorphic? && inclusions.last.modifier }
51
51
  end
52
+
53
+ it 'should fail if a polymorphic association is not disambiguated' do
54
+ expect {
55
+ criteria.includes(:musicians, from: :associated_act)
56
+ }.to raise_error(Mongoid::Includes::Errors::InvalidPolymorphicIncludes)
57
+ end
52
58
  end
53
59
  end
54
60
  end
@@ -327,7 +327,7 @@ describe Mongoid::Includes::Criteria do
327
327
  end
328
328
 
329
329
  let!(:depeche) do
330
- Band.create!(name: 'Depeche Mode')
330
+ Band.create!(name: 'Depeche Mode', records: [Record.new(name: 'Music for the Masses')])
331
331
  end
332
332
 
333
333
  let!(:tool) do
@@ -347,10 +347,6 @@ describe Mongoid::Includes::Criteria do
347
347
  peep.reload.addresses.includes(:band)
348
348
  end
349
349
 
350
- let(:context) do
351
- criteria.context
352
- end
353
-
354
350
  let!(:document) do
355
351
  criteria.first
356
352
  end
@@ -372,10 +368,6 @@ describe Mongoid::Includes::Criteria do
372
368
  peep.reload.addresses.includes(:band)
373
369
  end
374
370
 
375
- let(:context) do
376
- criteria.context
377
- end
378
-
379
371
  let!(:document) do
380
372
  criteria.last
381
373
  end
@@ -397,10 +389,6 @@ describe Mongoid::Includes::Criteria do
397
389
  peep.reload.addresses.includes(:band)
398
390
  end
399
391
 
400
- let(:context) do
401
- criteria.context
402
- end
403
-
404
392
  let!(:documents) do
405
393
  criteria.to_a
406
394
  end
@@ -1,7 +1,5 @@
1
- if ENV['CODECLIMATE_REPO_TOKEN']
2
- require 'codeclimate-test-reporter'
3
- CodeClimate::TestReporter.start
4
- end
1
+ require 'simplecov'
2
+ SimpleCov.start
5
3
 
6
4
  require 'rspec/given'
7
5
  require 'pry'
@@ -45,8 +43,11 @@ Mongoid.configure do |config|
45
43
  )
46
44
  end
47
45
 
48
- if defined?(Mongo)
49
- Mongo::Logger.logger = Logger.new("./spec/mongo.log")
46
+ # Logging to the console is useful for debugging queries.
47
+ Mongo::Logger.logger = Logger.new('./spec/mongo.log')
48
+
49
+ def log_mongo_to_console
50
+ Mongo::Logger.logger = Logger.new($stdout)
50
51
  end
51
52
 
52
53
  RSpec.configure do |config|
@@ -1,43 +1,20 @@
1
1
  module Mongoid
2
- class QueryCounter
3
- attr_reader :events
4
-
5
- def initialize
6
- @events = []
7
- end
8
-
9
- def instrument
10
- subscriber = ActiveSupport::Notifications.subscribe('query.moped') do |*args|
11
- @events << ActiveSupport::Notifications::Event.new(*args)
12
- end
13
- yield
14
- ensure
15
- ActiveSupport::Notifications.unsubscribe(subscriber)
16
- end
17
-
18
- def inspect
19
- @events.map { |e| e.payload[:ops].map(&:log_inspect) }.join("\n")
2
+ module SpecHelpers
3
+ def connection_class
4
+ Mongo::Server::ConnectionBase
20
5
  end
21
- end
22
- end
23
6
 
24
- module Mongoid
25
- module SpecHelpers
26
- if defined?(Mongo::Logger.logger)
27
- def expect_query(number)
28
- # There are both start and complete events for each query.
29
- expect(Mongo::Logger.logger).to receive(:debug?).exactly(number * 4).times.and_call_original
30
- yield
31
- end
32
- else
33
- def expect_query(number, &block)
34
- query_counter = Mongoid::QueryCounter.new
35
- query_counter.instrument(&block)
36
- expect(query_counter.events.size).to(eq(number), %[
37
- Expected to receive #{number} queries, it received #{query_counter.events.size}
38
- #{query_counter.inspect}
39
- ])
7
+ def expect_query(number)
8
+ rv = nil
9
+ RSpec::Mocks.with_temporary_scope do
10
+ if number > 0
11
+ expect_any_instance_of(connection_class).to receive(:command_started).exactly(number).times.and_call_original
12
+ else
13
+ expect_any_instance_of(connection_class).not_to receive(:command_started)
14
+ end
15
+ rv = yield
40
16
  end
17
+ rv
41
18
  end
42
19
 
43
20
  def expect_no_queries(&block)
@@ -26,44 +26,8 @@ class Address
26
26
 
27
27
  belongs_to :band
28
28
 
29
- embedded_in :addressable, polymorphic: true do
30
- def extension
31
- "Testing"
32
- end
33
- def doctor?
34
- title == "Dr"
35
- end
36
- end
37
-
38
- scope :without_postcode, ->{ where(postcode: nil) }
39
- scope :rodeo, ->{ where(street: "Rodeo Dr") } do
40
- def mansion?
41
- all? { |address| address.street == "Rodeo Dr" }
42
- end
43
- end
29
+ embedded_in :addressable, polymorphic: true
44
30
 
45
31
  validates_presence_of :street, on: :update
46
32
  validates_format_of :street, with: /\D/, allow_nil: true
47
-
48
- def set_parent=(set = false)
49
- self.parent_title = addressable.title if set
50
- end
51
-
52
- def <=>(other)
53
- street <=> other.street
54
- end
55
-
56
- class << self
57
- def california
58
- where(state: "CA")
59
- end
60
-
61
- def homes
62
- where(address_type: "Home")
63
- end
64
-
65
- def streets
66
- all.map(&:street)
67
- end
68
- end
69
33
  end
@@ -7,11 +7,7 @@ class Game
7
7
 
8
8
  belongs_to :person, index: true, validate: true
9
9
 
10
- if Mongoid::VERSION >= "6.0.0"
11
- belongs_to :parent, class_name: "Game", foreign_key: "parent-id", optional: true
12
- else
13
- belongs_to :parent, class_name: "Game", foreign_key: "parent-id"
14
- end
10
+ belongs_to :parent, class_name: "Game", foreign_key: "parent-id", optional: true
15
11
 
16
12
  accepts_nested_attributes_for :person
17
13
 
@@ -3,8 +3,4 @@ require './spec/support/models/person'
3
3
  class Musician < Person
4
4
 
5
5
  has_and_belongs_to_many :bands
6
-
7
- def musician?
8
- true
9
- end
10
6
  end
@@ -47,26 +47,11 @@ class Person
47
47
 
48
48
  attr_reader :rescored
49
49
 
50
- embeds_many :addresses, as: :addressable, validate: false do
51
- def extension
52
- "Testing"
53
- end
54
- def find_by_street(street)
55
- where(street: street).first
56
- end
57
- end
50
+ embeds_many :addresses, as: :addressable, validate: false
58
51
 
59
- has_one :game, dependent: :destroy, validate: false do
60
- def extension
61
- "Testing"
62
- end
63
- end
52
+ has_one :game, dependent: :destroy, validate: false
64
53
 
65
- has_many :posts, dependent: :delete, validate: false do
66
- def extension
67
- "Testing"
68
- end
69
- end
54
+ has_many :posts, dependent: :delete_all, validate: false
70
55
 
71
56
  has_and_belongs_to_many :preferences, index: true, dependent: :nullify, validate: false
72
57
  end
@@ -1,3 +1,5 @@
1
+ require_relative './person'
2
+
1
3
  class Post
2
4
  include Mongoid::Document
3
5
  include Mongoid::Attributes::Dynamic
@@ -3,48 +3,5 @@ class Record
3
3
 
4
4
  field :name, type: String
5
5
 
6
- field :before_create_called, type: Mongoid::Boolean, default: false
7
- field :before_save_called, type: Mongoid::Boolean, default: false
8
- field :before_update_called, type: Mongoid::Boolean, default: false
9
- field :before_validation_called, type: Mongoid::Boolean, default: false
10
- field :before_destroy_called, type: Mongoid::Boolean, default: false
11
-
12
6
  embedded_in :band
13
-
14
- before_create :before_create_stub
15
- before_save :before_save_stub
16
- before_update :before_update_stub
17
- before_validation :before_validation_stub
18
- before_destroy :before_destroy_stub
19
-
20
- after_destroy :access_band
21
-
22
- def before_create_stub
23
- self.before_create_called = true
24
- end
25
-
26
- def before_save_stub
27
- self.before_save_called = true
28
- end
29
-
30
- def before_update_stub
31
- self.before_update_called = true
32
- end
33
-
34
- def before_validation_stub
35
- self.before_validation_called = true
36
- end
37
-
38
- def before_destroy_stub
39
- self.before_destroy_called = true
40
- end
41
-
42
- def access_band
43
- band.name
44
- end
45
-
46
- def dont_call_me_twice
47
- end
48
-
49
- validate { dont_call_me_twice }
50
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid_includes
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Máximo Mussini
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-07-03 00:00:00.000000000 Z
11
+ date: 2020-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mongoid
@@ -16,20 +16,20 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 6.0.1
19
+ version: 7.0.10
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: 7.0.0
22
+ version: 8.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 6.0.1
29
+ version: 7.0.10
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: 7.0.0
32
+ version: 8.0.0
33
33
  description: Mongoid::Includes improves eager loading in Mongoid, supporting polymorphic
34
34
  associations, and up to two-levels of eager loading.
35
35
  email:
@@ -44,6 +44,7 @@ files:
44
44
  - Rakefile
45
45
  - lib/config/locales/en.yml
46
46
  - lib/mongoid/includes.rb
47
+ - lib/mongoid/includes/association/eager.rb
47
48
  - lib/mongoid/includes/criteria.rb
48
49
  - lib/mongoid/includes/eager_load.rb
49
50
  - lib/mongoid/includes/errors.rb
@@ -51,7 +52,6 @@ files:
51
52
  - lib/mongoid/includes/errors/invalid_polymorphic_includes.rb
52
53
  - lib/mongoid/includes/inclusion.rb
53
54
  - lib/mongoid/includes/inclusions.rb
54
- - lib/mongoid/includes/relations/eager.rb
55
55
  - lib/mongoid/includes/version.rb
56
56
  - lib/mongoid_includes.rb
57
57
  - spec/mongo.log
@@ -81,7 +81,7 @@ homepage: https://github.com/ElMassimo/mongoid_includes
81
81
  licenses:
82
82
  - MIT
83
83
  metadata: {}
84
- post_install_message:
84
+ post_install_message:
85
85
  rdoc_options:
86
86
  - "--charset=UTF-8"
87
87
  require_paths:
@@ -97,33 +97,31 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  - !ruby/object:Gem::Version
98
98
  version: '0'
99
99
  requirements: []
100
- rubyforge_project:
101
- rubygems_version: 2.6.11
102
- signing_key:
100
+ rubygems_version: 3.1.2
101
+ signing_key:
103
102
  specification_version: 4
104
103
  summary: Improved eager loading support for Mongoid.
105
104
  test_files:
106
- - spec/mongo.log
107
- - spec/mongoid/includes/criteria_spec.rb
108
- - spec/mongoid/includes/errors/invalid_includes_spec.rb
109
- - spec/mongoid/includes/errors/invalid_polymorphic_includes_spec.rb
110
105
  - spec/mongoid/includes/inclusions_spec.rb
111
- - spec/mongoid/includes/nested_inclusions_spec.rb
112
106
  - spec/mongoid/includes/polymorphic_includes_spec.rb
113
107
  - spec/mongoid/includes/simple_inclusions_spec.rb
108
+ - spec/mongoid/includes/nested_inclusions_spec.rb
109
+ - spec/mongoid/includes/criteria_spec.rb
110
+ - spec/mongoid/includes/errors/invalid_polymorphic_includes_spec.rb
111
+ - spec/mongoid/includes/errors/invalid_includes_spec.rb
114
112
  - spec/spec_helper.rb
115
- - spec/support/config/mongoid.yml
116
113
  - spec/support/helpers.rb
117
- - spec/support/models/address.rb
114
+ - spec/support/config/mongoid.yml
115
+ - spec/support/models/song.rb
116
+ - spec/support/models/node.rb
117
+ - spec/support/models/musician.rb
118
+ - spec/support/models/record.rb
118
119
  - spec/support/models/album.rb
119
120
  - spec/support/models/artist.rb
120
- - spec/support/models/band.rb
121
121
  - spec/support/models/game.rb
122
- - spec/support/models/musician.rb
123
- - spec/support/models/node.rb
124
122
  - spec/support/models/person.rb
123
+ - spec/support/models/band.rb
125
124
  - spec/support/models/post.rb
125
+ - spec/support/models/address.rb
126
126
  - spec/support/models/preference.rb
127
- - spec/support/models/record.rb
128
- - spec/support/models/song.rb
129
- has_rdoc:
127
+ - spec/mongo.log