mongoload 0.0.1
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 +7 -0
- data/.document +5 -0
- data/.gitignore +9 -0
- data/.rdoc_options +16 -0
- data/.rspec +3 -0
- data/.ruby-version +1 -0
- data/.travis.yml +15 -0
- data/ChangeLog.md +4 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +20 -0
- data/README.md +33 -0
- data/Rakefile +25 -0
- data/gemfiles/mongoid_50.gemfile +6 -0
- data/gemfiles/mongoid_51.gemfile +6 -0
- data/gemfiles/mongoid_master.gemfile +6 -0
- data/lib/mongoload.rb +9 -0
- data/lib/mongoload/auto_include_context.rb +23 -0
- data/lib/mongoload/patches/mongoid_contextual_mongo_patch.rb +22 -0
- data/lib/mongoload/patches/mongoid_document_patch.rb +26 -0
- data/lib/mongoload/patches/mongoid_relations_accessors_patch.rb +29 -0
- data/lib/mongoload/patches/mongoid_relations_targets_enumerable_patch.rb +18 -0
- data/lib/mongoload/relation_loader.rb +34 -0
- data/lib/mongoload/version.rb +5 -0
- data/log/.keep +0 -0
- data/mongoload.gemspec +33 -0
- data/spec/db/models.rb +30 -0
- data/spec/db/mongoid.yml +10 -0
- data/spec/mongoload/auto_include_context_spec.rb +0 -0
- data/spec/mongoload/mongoload_spec.rb +137 -0
- data/spec/spec_helper.rb +25 -0
- metadata +189 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 43f6d35204451fe83d744d022348bfa75bf44b4d
|
4
|
+
data.tar.gz: 0643e2e4a61dedc69853f13e243c48569a738828
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 21d8fda99c4ff3fbb6f7d4b822610364d3fcc1cf7cf62149a8c5709e89c84880809eab6d2ab4e4d2484578d1ad0ff58c26183b3e4a28a6f1c2368dc430e5c877
|
7
|
+
data.tar.gz: 1ffff4324c1417821d7189191e06835a72228d692870e4bf321c57c6f43a131b8b23505255636cf1623e467939afe2dd1620afbb6a267ffeca94aa036bf83226
|
data/.document
ADDED
data/.gitignore
ADDED
data/.rdoc_options
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
--- !ruby/object:RDoc::Options
|
2
|
+
encoding: UTF-8
|
3
|
+
static_path: []
|
4
|
+
rdoc_include:
|
5
|
+
- .
|
6
|
+
charset: UTF-8
|
7
|
+
exclude:
|
8
|
+
hyperlink_all: false
|
9
|
+
line_numbers: false
|
10
|
+
main_page: README.md
|
11
|
+
markup: markdown
|
12
|
+
show_hash: false
|
13
|
+
tab_width: 8
|
14
|
+
title: mongoload Documentation
|
15
|
+
visibility: :protected
|
16
|
+
webcvs:
|
data/.rspec
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.0
|
data/.travis.yml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
language: ruby
|
2
|
+
sudo: false
|
3
|
+
services: mongodb
|
4
|
+
rvm:
|
5
|
+
- "2.1.10"
|
6
|
+
- "2.2.4"
|
7
|
+
- "2.3.0"
|
8
|
+
gemfile:
|
9
|
+
- gemfiles/mongoid_50.gemfile
|
10
|
+
- gemfiles/mongoid_51.gemfile
|
11
|
+
- gemfiles/mongoid_master.gemfile
|
12
|
+
matrix:
|
13
|
+
exclude:
|
14
|
+
- rvm: "2.1.10"
|
15
|
+
gemfile: gemfiles/mongoid_master.gemfile
|
data/ChangeLog.md
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2016 Kaloku Sang<karloku@loku.it>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# Mongoload
|
2
|
+
|
3
|
+
[](https://travis-ci.org/karloku/mongoload)
|
4
|
+
|
5
|
+
Mongoload is a gem to perform eager loading automatically for Mongoid, inspired by [Goldiloader](https://github.com/salsify/goldiloader).
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
Just install Mongoload. It will automatically eager load your reference relation the first time you access it.
|
10
|
+
|
11
|
+
## Install
|
12
|
+
|
13
|
+
Add this line to your application's Gemfile:
|
14
|
+
|
15
|
+
gem 'mongoload'
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install mongoload
|
20
|
+
|
21
|
+
## TODO
|
22
|
+
|
23
|
+
* option to perform eager loading when calling following methods on an many/many_to_many relation:
|
24
|
+
+ size
|
25
|
+
+ first
|
26
|
+
+ last
|
27
|
+
+ option to disable eager loading on specific relation
|
28
|
+
|
29
|
+
## Copyright
|
30
|
+
|
31
|
+
Copyright (c) 2016 Kaloku Sang
|
32
|
+
|
33
|
+
See LICENSE.txt for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'bundler/setup'
|
8
|
+
rescue LoadError => e
|
9
|
+
abort e.message
|
10
|
+
end
|
11
|
+
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'rubygems/tasks'
|
15
|
+
Gem::Tasks.new
|
16
|
+
|
17
|
+
require 'rdoc/task'
|
18
|
+
RDoc::Task.new
|
19
|
+
task doc: :rdoc
|
20
|
+
|
21
|
+
require 'rspec/core/rake_task'
|
22
|
+
RSpec::Core::RakeTask.new
|
23
|
+
|
24
|
+
task test: :spec
|
25
|
+
task default: :spec
|
data/lib/mongoload.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'mongoid'
|
3
|
+
require 'mongoload/version'
|
4
|
+
require 'mongoload/auto_include_context'
|
5
|
+
require 'mongoload/relation_loader'
|
6
|
+
require 'mongoload/patches/mongoid_contextual_mongo_patch'
|
7
|
+
require 'mongoload/patches/mongoid_document_patch'
|
8
|
+
require 'mongoload/patches/mongoid_relations_accessors_patch'
|
9
|
+
require 'mongoload/patches/mongoid_relations_targets_enumerable_patch'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mongoload
|
3
|
+
class AutoIncludeContext
|
4
|
+
attr_reader :docs
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@docs = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def register_docs(docs)
|
11
|
+
Array.wrap(docs).each do |model|
|
12
|
+
model.auto_include_context = self
|
13
|
+
self.docs << model
|
14
|
+
end
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.register_docs(docs)
|
19
|
+
auto_include_context = new
|
20
|
+
auto_include_context.register_docs(docs)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mongoload
|
3
|
+
module MongoContextWithAutoInclude
|
4
|
+
def documents_for_iteration
|
5
|
+
results = super
|
6
|
+
if results.is_a?(Mongo::Collection::View)
|
7
|
+
require 'byebug'
|
8
|
+
begin
|
9
|
+
results.to_a
|
10
|
+
rescue SystemStackError
|
11
|
+
byebug
|
12
|
+
end
|
13
|
+
results = results.map { |doc| Mongoid::Factory.from_db(klass, doc, criteria.options[:fields]) }
|
14
|
+
end
|
15
|
+
results.tap do |documents|
|
16
|
+
Mongoload::AutoIncludeContext.register_docs(documents.to_a)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
Mongoid::Contextual::Mongo.prepend Mongoload::MongoContextWithAutoInclude
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mongoload
|
3
|
+
module AutoIncludableModel
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
attr_writer :auto_include_context
|
8
|
+
end
|
9
|
+
|
10
|
+
def initialize_copy(other)
|
11
|
+
super
|
12
|
+
@auto_include_context = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def auto_include_context
|
16
|
+
@auto_include_context ||= Mongoload::AutoIncludeContext.new.register_docs(self)
|
17
|
+
end
|
18
|
+
|
19
|
+
def reload(*)
|
20
|
+
@auto_include_context = nil
|
21
|
+
super
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Mongoid::Document.include Mongoload::AutoIncludableModel
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mongoload
|
3
|
+
module MongoRelationsAccessorsWithAutoInclude
|
4
|
+
private
|
5
|
+
|
6
|
+
def get_relation(name, metadata, object, reload=false)
|
7
|
+
# has_one and belongs_to will return the value immediately
|
8
|
+
# while other relation are lazy
|
9
|
+
if [Mongoid::Relations::Referenced::In, Mongoid::Relations::Referenced::One].include?(metadata.relation)
|
10
|
+
Mongoload::RelationLoader.load(self, metadata) if !object.is_a?(metadata.klass) && ivar(name) == false
|
11
|
+
end
|
12
|
+
|
13
|
+
result = super
|
14
|
+
result.tap do |relation|
|
15
|
+
if relation.class == Mongoid::Relations::Targets::Enumerable
|
16
|
+
relation.target.define_singleton_method :relation_metadata do
|
17
|
+
relation.relation_metadata
|
18
|
+
end
|
19
|
+
|
20
|
+
relation.target.define_singleton_method :base do
|
21
|
+
relation.base
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
Mongoid::Document.prepend Mongoload::MongoRelationsAccessorsWithAutoInclude
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mongoload
|
3
|
+
module MongoRelationsEnumerableWithAutoInclude
|
4
|
+
private
|
5
|
+
|
6
|
+
def unloaded_documents
|
7
|
+
if Mongoload::RelationLoader.load(base, relation_metadata)
|
8
|
+
base.ivar(relation_metadata.name)
|
9
|
+
else
|
10
|
+
super
|
11
|
+
end
|
12
|
+
rescue NotImplementedError
|
13
|
+
super
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Mongoid::Relations::Targets::Enumerable.prepend Mongoload::MongoRelationsEnumerableWithAutoInclude
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module Mongoload
|
3
|
+
module RelationLoader
|
4
|
+
module_function
|
5
|
+
|
6
|
+
def load(doc, metadata)
|
7
|
+
docs = doc.auto_include_context.docs.select do |d|
|
8
|
+
auto_include?(d, metadata)
|
9
|
+
end
|
10
|
+
eager_load(metadata, docs)
|
11
|
+
docs.include?(doc)
|
12
|
+
end
|
13
|
+
|
14
|
+
def eager_load(metadata, docs)
|
15
|
+
metadata.relation.eager_load_klass.new([metadata], docs).run
|
16
|
+
end
|
17
|
+
|
18
|
+
def auto_include?(doc, metadata)
|
19
|
+
relation?(doc, metadata) && !loaded?(doc, metadata)
|
20
|
+
end
|
21
|
+
|
22
|
+
def relation?(doc, metadata)
|
23
|
+
doc.relations.values.include?(metadata)
|
24
|
+
end
|
25
|
+
|
26
|
+
def loaded?(doc, metadata)
|
27
|
+
if [Mongoid::Relations::Referenced::In, Mongoid::Relations::Referenced::One].include?(metadata.relation)
|
28
|
+
doc.ivar(metadata.name) != false
|
29
|
+
else
|
30
|
+
doc.public_send(metadata.name)._loaded?
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/log/.keep
ADDED
File without changes
|
data/mongoload.gemspec
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
lib = File.expand_path('../lib', __FILE__)
|
5
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
+
require 'mongoload/version'
|
7
|
+
|
8
|
+
Gem::Specification.new do |gem|
|
9
|
+
gem.name = 'mongoload'
|
10
|
+
gem.version = Mongoload::VERSION
|
11
|
+
gem.summary = 'Perform eager loading automatically for Mongoid'
|
12
|
+
gem.description = 'Automatic Mongoid eager loading'
|
13
|
+
gem.license = 'MIT'
|
14
|
+
gem.authors = ['Kaloku Sang']
|
15
|
+
gem.email = 'karloku@gmail.com'
|
16
|
+
gem.homepage = 'https://github.com/karloku/mongoload'
|
17
|
+
|
18
|
+
gem.required_ruby_version = '>= 2.1.0'
|
19
|
+
|
20
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
21
|
+
gem.test_files = Dir.glob('spec/**/*')
|
22
|
+
gem.require_paths = ['lib']
|
23
|
+
|
24
|
+
gem.add_dependency 'mongoid', ['>= 5.0.0']
|
25
|
+
|
26
|
+
gem.add_development_dependency 'bundler', '~> 1.10'
|
27
|
+
gem.add_development_dependency 'rake', '~> 11.0'
|
28
|
+
gem.add_development_dependency 'rdoc', '~> 4.0'
|
29
|
+
gem.add_development_dependency 'rspec', '~> 3.0'
|
30
|
+
gem.add_development_dependency 'database_cleaner', '~> 1.5.3'
|
31
|
+
gem.add_development_dependency 'byebug'
|
32
|
+
gem.add_development_dependency 'rubygems-tasks', '~> 0.2'
|
33
|
+
end
|
data/spec/db/models.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
class User
|
3
|
+
include Mongoid::Document
|
4
|
+
has_one :device
|
5
|
+
has_many :posts
|
6
|
+
|
7
|
+
field :username
|
8
|
+
end
|
9
|
+
|
10
|
+
class Device
|
11
|
+
include Mongoid::Document
|
12
|
+
belongs_to :user
|
13
|
+
|
14
|
+
field :uuid
|
15
|
+
end
|
16
|
+
|
17
|
+
class Post
|
18
|
+
include Mongoid::Document
|
19
|
+
belongs_to :user
|
20
|
+
has_and_belongs_to_many :tags
|
21
|
+
|
22
|
+
field :title
|
23
|
+
end
|
24
|
+
|
25
|
+
class Tag
|
26
|
+
include Mongoid::Document
|
27
|
+
has_and_belongs_to_many :posts
|
28
|
+
|
29
|
+
field :name
|
30
|
+
end
|
data/spec/db/mongoid.yml
ADDED
File without changes
|
@@ -0,0 +1,137 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe Mongoload do
|
5
|
+
let(:user1) do
|
6
|
+
User.create!(username: 'Adam').tap { |u| u.create_device(uuid: '111') }
|
7
|
+
end
|
8
|
+
let(:user2) do
|
9
|
+
User.create!(username: 'Betty').tap { |u| u.create_device(uuid: '222') }
|
10
|
+
end
|
11
|
+
let(:user3) do
|
12
|
+
User.create!(username: 'Cathy').tap { |u| u.create_device(uuid: '333') }
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:tag1) { Tag.create!(name: 'tag1') }
|
16
|
+
let(:tag2) { Tag.create!(name: 'tag2') }
|
17
|
+
let(:tag3) { Tag.create!(name: 'tag3') }
|
18
|
+
let(:tag4) { Tag.create!(name: 'tag4') }
|
19
|
+
|
20
|
+
let(:post1) do
|
21
|
+
Post.create!(title: 'post1', user: user1).tap do |p|
|
22
|
+
p.tags << [tag1, tag2]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
let(:post2) do
|
27
|
+
Post.create!(title: 'post2', user: user1).tap do |p|
|
28
|
+
p.tags << [tag2, tag3]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:post3) do
|
33
|
+
Post.create!(title: 'post3', user: user2).tap do |p|
|
34
|
+
p.tags << [tag1, tag3]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
let(:post4) do
|
39
|
+
Post.create!(title: 'post4', user: user2).tap do |p|
|
40
|
+
p.tags << [tag2, tag4]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
let(:post5) do
|
45
|
+
Post.create!(title: 'post5', user: user3).tap do |p|
|
46
|
+
p.tags << [tag1, tag4]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
let(:post6) do
|
51
|
+
Post.create!(title: 'post6', user: user3).tap do |p|
|
52
|
+
p.tags << [tag2, tag4]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'has_one relation' do
|
57
|
+
before { user1 && user2 && user3 }
|
58
|
+
|
59
|
+
it 'should eager load' do
|
60
|
+
users = User.all.to_a
|
61
|
+
users.each do |user|
|
62
|
+
expect(user.ivar(:device)).to be false
|
63
|
+
end
|
64
|
+
|
65
|
+
users.first.device
|
66
|
+
users.each do |user|
|
67
|
+
expect(user.ivar(:device)).to be_truthy
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe 'has_many relation' do
|
73
|
+
before { post1 && post2 && post3 && post4 && post5 && post6 }
|
74
|
+
|
75
|
+
it 'should eager load' do
|
76
|
+
users = User.all.to_a
|
77
|
+
users.each do |user|
|
78
|
+
expect(user.posts._loaded?).to be false
|
79
|
+
end
|
80
|
+
|
81
|
+
users.first.posts.to_a
|
82
|
+
users.each do |user|
|
83
|
+
expect(user.posts._loaded?).to be true
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe 'belongs_to' do
|
89
|
+
context 'inverse of has_one' do
|
90
|
+
before { user1 && user2 && user3 }
|
91
|
+
|
92
|
+
it 'should eager load' do
|
93
|
+
devices = Device.all.to_a
|
94
|
+
devices.each do |device|
|
95
|
+
expect(device.ivar(:user)).to be false
|
96
|
+
end
|
97
|
+
|
98
|
+
devices.first.user
|
99
|
+
devices.each do |device|
|
100
|
+
expect(device.ivar(:user)).to be_truthy
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context 'inverse of has_many' do
|
106
|
+
before { post1 && post2 && post3 && post4 && post5 && post6 }
|
107
|
+
|
108
|
+
it 'should eager load' do
|
109
|
+
posts = Post.all.to_a
|
110
|
+
posts.each do |post|
|
111
|
+
expect(post.ivar(:user)).to be false
|
112
|
+
end
|
113
|
+
|
114
|
+
posts.first.user
|
115
|
+
posts.each do |post|
|
116
|
+
expect(post.ivar(:user)).to be_truthy
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'has_and_belongs_to_many' do
|
123
|
+
before { post1 && post2 && post3 && post4 && post5 && post6 }
|
124
|
+
|
125
|
+
it 'should eager load' do
|
126
|
+
posts = Post.all.to_a
|
127
|
+
posts.each do |post|
|
128
|
+
expect(post.tags._loaded?).to be false
|
129
|
+
end
|
130
|
+
|
131
|
+
posts.first.tags.to_a
|
132
|
+
posts.each do |post|
|
133
|
+
expect(post.tags._loaded?).to be true
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'rspec'
|
3
|
+
require 'database_cleaner'
|
4
|
+
require 'mongoload'
|
5
|
+
|
6
|
+
# initialize model definitions
|
7
|
+
ENV['MONGOID_ENV'] = 'test'
|
8
|
+
Mongoid.load!(File.join(File.dirname(__FILE__), 'db', 'mongoid.yml'))
|
9
|
+
require_relative 'db/models'
|
10
|
+
Mongo::Logger.logger = Logger.new('log/test.log')
|
11
|
+
|
12
|
+
RSpec.configure do |config|
|
13
|
+
config.order = 'random'
|
14
|
+
|
15
|
+
config.before(:suite) do
|
16
|
+
DatabaseCleaner.strategy = :truncation
|
17
|
+
DatabaseCleaner.clean_with(:truncation)
|
18
|
+
end
|
19
|
+
|
20
|
+
config.around(:each) do |example|
|
21
|
+
DatabaseCleaner.cleaning do
|
22
|
+
example.run
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
ADDED
@@ -0,0 +1,189 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoload
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kaloku Sang
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-04-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mongoid
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 5.0.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 5.0.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '11.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '11.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: database_cleaner
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 1.5.3
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 1.5.3
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: byebug
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubygems-tasks
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.2'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.2'
|
125
|
+
description: Automatic Mongoid eager loading
|
126
|
+
email: karloku@gmail.com
|
127
|
+
executables: []
|
128
|
+
extensions: []
|
129
|
+
extra_rdoc_files: []
|
130
|
+
files:
|
131
|
+
- ".document"
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rdoc_options"
|
134
|
+
- ".rspec"
|
135
|
+
- ".ruby-version"
|
136
|
+
- ".travis.yml"
|
137
|
+
- ChangeLog.md
|
138
|
+
- Gemfile
|
139
|
+
- LICENSE.txt
|
140
|
+
- README.md
|
141
|
+
- Rakefile
|
142
|
+
- gemfiles/mongoid_50.gemfile
|
143
|
+
- gemfiles/mongoid_51.gemfile
|
144
|
+
- gemfiles/mongoid_master.gemfile
|
145
|
+
- lib/mongoload.rb
|
146
|
+
- lib/mongoload/auto_include_context.rb
|
147
|
+
- lib/mongoload/patches/mongoid_contextual_mongo_patch.rb
|
148
|
+
- lib/mongoload/patches/mongoid_document_patch.rb
|
149
|
+
- lib/mongoload/patches/mongoid_relations_accessors_patch.rb
|
150
|
+
- lib/mongoload/patches/mongoid_relations_targets_enumerable_patch.rb
|
151
|
+
- lib/mongoload/relation_loader.rb
|
152
|
+
- lib/mongoload/version.rb
|
153
|
+
- log/.keep
|
154
|
+
- mongoload.gemspec
|
155
|
+
- spec/db/models.rb
|
156
|
+
- spec/db/mongoid.yml
|
157
|
+
- spec/mongoload/auto_include_context_spec.rb
|
158
|
+
- spec/mongoload/mongoload_spec.rb
|
159
|
+
- spec/spec_helper.rb
|
160
|
+
homepage: https://github.com/karloku/mongoload
|
161
|
+
licenses:
|
162
|
+
- MIT
|
163
|
+
metadata: {}
|
164
|
+
post_install_message:
|
165
|
+
rdoc_options: []
|
166
|
+
require_paths:
|
167
|
+
- lib
|
168
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: 2.1.0
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
requirements:
|
175
|
+
- - ">="
|
176
|
+
- !ruby/object:Gem::Version
|
177
|
+
version: '0'
|
178
|
+
requirements: []
|
179
|
+
rubyforge_project:
|
180
|
+
rubygems_version: 2.6.3
|
181
|
+
signing_key:
|
182
|
+
specification_version: 4
|
183
|
+
summary: Perform eager loading automatically for Mongoid
|
184
|
+
test_files:
|
185
|
+
- spec/db/models.rb
|
186
|
+
- spec/db/mongoid.yml
|
187
|
+
- spec/mongoload/auto_include_context_spec.rb
|
188
|
+
- spec/mongoload/mongoload_spec.rb
|
189
|
+
- spec/spec_helper.rb
|