rocketjob 5.1.1 → 5.2.0.beta1
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/bin/rocketjob +2 -2
- data/bin/rocketjob_batch_perf +1 -1
- data/bin/rocketjob_perf +1 -1
- data/lib/rocket_job/active_worker.rb +1 -0
- data/lib/rocket_job/batch.rb +16 -17
- data/lib/rocket_job/batch/callbacks.rb +1 -2
- data/lib/rocket_job/batch/io.rb +10 -6
- data/lib/rocket_job/batch/logger.rb +2 -2
- data/lib/rocket_job/batch/lower_priority.rb +2 -2
- data/lib/rocket_job/batch/model.rb +23 -23
- data/lib/rocket_job/batch/performance.rb +19 -21
- data/lib/rocket_job/batch/result.rb +1 -1
- data/lib/rocket_job/batch/results.rb +1 -1
- data/lib/rocket_job/batch/state_machine.rb +5 -6
- data/lib/rocket_job/batch/statistics.rb +10 -8
- data/lib/rocket_job/batch/tabular.rb +2 -2
- data/lib/rocket_job/batch/tabular/input.rb +11 -7
- data/lib/rocket_job/batch/tabular/output.rb +1 -1
- data/lib/rocket_job/batch/throttle.rb +11 -30
- data/lib/rocket_job/batch/{throttle_running_slices.rb → throttle_running_workers.rb} +13 -10
- data/lib/rocket_job/batch/worker.rb +102 -85
- data/lib/rocket_job/cli.rb +57 -54
- data/lib/rocket_job/config.rb +8 -10
- data/lib/rocket_job/dirmon_entry.rb +13 -10
- data/lib/rocket_job/event.rb +16 -16
- data/lib/rocket_job/extensions/mongo/logging.rb +2 -2
- data/lib/rocket_job/extensions/mongoid/clients/options.rb +2 -2
- data/lib/rocket_job/extensions/mongoid/contextual/mongo.rb +4 -2
- data/lib/rocket_job/extensions/mongoid/factory.rb +13 -5
- data/lib/rocket_job/extensions/rocket_job_adapter.rb +2 -1
- data/lib/rocket_job/job_exception.rb +0 -3
- data/lib/rocket_job/jobs/dirmon_job.rb +4 -4
- data/lib/rocket_job/jobs/housekeeping_job.rb +7 -7
- data/lib/rocket_job/jobs/on_demand_batch_job.rb +14 -4
- data/lib/rocket_job/jobs/on_demand_job.rb +3 -3
- data/lib/rocket_job/jobs/performance_job.rb +1 -1
- data/lib/rocket_job/jobs/re_encrypt/relational_job.rb +11 -10
- data/lib/rocket_job/jobs/upload_file_job.rb +9 -5
- data/lib/rocket_job/performance.rb +24 -22
- data/lib/rocket_job/plugins/cron.rb +7 -3
- data/lib/rocket_job/plugins/document.rb +7 -5
- data/lib/rocket_job/plugins/job/callbacks.rb +1 -1
- data/lib/rocket_job/plugins/job/logger.rb +3 -3
- data/lib/rocket_job/plugins/job/model.rb +34 -27
- data/lib/rocket_job/plugins/job/persistence.rb +7 -34
- data/lib/rocket_job/plugins/job/state_machine.rb +5 -4
- data/lib/rocket_job/plugins/job/throttle.rb +12 -28
- data/lib/rocket_job/plugins/job/throttle_running_jobs.rb +2 -2
- data/lib/rocket_job/plugins/job/worker.rb +22 -70
- data/lib/rocket_job/plugins/processing_window.rb +5 -4
- data/lib/rocket_job/plugins/restart.rb +3 -3
- data/lib/rocket_job/plugins/retry.rb +2 -2
- data/lib/rocket_job/plugins/singleton.rb +1 -2
- data/lib/rocket_job/plugins/state_machine.rb +4 -4
- data/lib/rocket_job/plugins/transaction.rb +1 -1
- data/lib/rocket_job/rocket_job.rb +5 -4
- data/lib/rocket_job/server.rb +2 -2
- data/lib/rocket_job/server/model.rb +14 -13
- data/lib/rocket_job/server/state_machine.rb +1 -2
- data/lib/rocket_job/sliced/compressed_slice.rb +4 -4
- data/lib/rocket_job/sliced/encrypted_slice.rb +4 -4
- data/lib/rocket_job/sliced/input.rb +16 -16
- data/lib/rocket_job/sliced/output.rb +2 -2
- data/lib/rocket_job/sliced/slice.rb +43 -20
- data/lib/rocket_job/sliced/slices.rb +14 -11
- data/lib/rocket_job/subscriber.rb +6 -6
- data/lib/rocket_job/subscribers/logger.rb +3 -3
- data/lib/rocket_job/supervisor.rb +12 -12
- data/lib/rocket_job/supervisor/shutdown.rb +7 -7
- data/lib/rocket_job/throttle_definition.rb +37 -0
- data/lib/rocket_job/throttle_definitions.rb +39 -0
- data/lib/rocket_job/version.rb +1 -1
- data/lib/rocket_job/worker.rb +116 -34
- data/lib/rocket_job/worker_pool.rb +6 -6
- data/lib/rocketjob.rb +72 -76
- metadata +16 -18
- data/lib/rocket_job/extensions/mongoid_5/clients/options.rb +0 -38
- data/lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb +0 -64
- data/lib/rocket_job/extensions/mongoid_5/factory.rb +0 -13
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
require
|
1
|
+
require "concurrent-ruby"
|
2
|
+
require "rocket_job/supervisor/shutdown"
|
3
3
|
|
4
4
|
module RocketJob
|
5
5
|
class WorkerPool
|
@@ -27,7 +27,7 @@ module RocketJob
|
|
27
27
|
# The worker also responds faster than max_poll_seconds when a new job is created.
|
28
28
|
def rebalance(max_workers, stagger_start = false)
|
29
29
|
count = max_workers.to_i - living_count
|
30
|
-
return 0 unless count
|
30
|
+
return 0 unless count.positive?
|
31
31
|
|
32
32
|
logger.info("#{'Stagger ' if stagger_start}Starting #{count} workers")
|
33
33
|
|
@@ -38,6 +38,7 @@ module RocketJob
|
|
38
38
|
count.times.each do
|
39
39
|
sleep(delay) if stagger_start
|
40
40
|
return -1 if Supervisor.shutdown?
|
41
|
+
|
41
42
|
add_one
|
42
43
|
end
|
43
44
|
end
|
@@ -90,13 +91,12 @@ module RocketJob
|
|
90
91
|
|
91
92
|
def add_one
|
92
93
|
workers << Worker.new(id: next_worker_id, server_name: server_name)
|
93
|
-
rescue StandardError =>
|
94
|
-
logger.fatal(
|
94
|
+
rescue StandardError => e
|
95
|
+
logger.fatal("Cannot start worker", e)
|
95
96
|
end
|
96
97
|
|
97
98
|
def next_worker_id
|
98
99
|
@worker_id += 1
|
99
100
|
end
|
100
|
-
|
101
101
|
end
|
102
102
|
end
|
data/lib/rocketjob.rb
CHANGED
@@ -1,105 +1,101 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
1
|
+
require "iostreams"
|
2
|
+
require "semantic_logger"
|
3
|
+
require "symmetric-encryption"
|
4
|
+
require "mongoid"
|
5
|
+
require "rocket_job/extensions/mongo/logging"
|
6
|
+
require "rocket_job/version"
|
7
|
+
require "rocket_job/rocket_job"
|
8
|
+
require "rocket_job/config"
|
9
|
+
require "rocket_job/railtie" if defined?(Rails)
|
10
10
|
|
11
11
|
# Apply patches to implement `with_collection`
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
require 'rocket_job/extensions/mongoid/factory'
|
16
|
-
else
|
17
|
-
require 'rocket_job/extensions/mongoid_5/clients/options'
|
18
|
-
require 'rocket_job/extensions/mongoid_5/contextual/mongo'
|
19
|
-
require 'rocket_job/extensions/mongoid_5/factory'
|
20
|
-
end
|
12
|
+
require "rocket_job/extensions/mongoid/clients/options"
|
13
|
+
require "rocket_job/extensions/mongoid/contextual/mongo"
|
14
|
+
require "rocket_job/extensions/mongoid/factory"
|
21
15
|
|
22
16
|
# @formatter:off
|
23
17
|
module RocketJob
|
24
|
-
autoload :ActiveWorker,
|
25
|
-
autoload :Batch,
|
26
|
-
autoload :CLI,
|
27
|
-
autoload :DirmonEntry,
|
28
|
-
autoload :Event,
|
29
|
-
autoload :Heartbeat,
|
30
|
-
autoload :Job,
|
31
|
-
autoload :JobException,
|
32
|
-
autoload :Worker,
|
33
|
-
autoload :Performance,
|
34
|
-
autoload :Server,
|
35
|
-
autoload :Subscriber,
|
36
|
-
autoload :Supervisor,
|
37
|
-
autoload :
|
18
|
+
autoload :ActiveWorker, "rocket_job/active_worker"
|
19
|
+
autoload :Batch, "rocket_job/batch"
|
20
|
+
autoload :CLI, "rocket_job/cli"
|
21
|
+
autoload :DirmonEntry, "rocket_job/dirmon_entry"
|
22
|
+
autoload :Event, "rocket_job/event"
|
23
|
+
autoload :Heartbeat, "rocket_job/heartbeat"
|
24
|
+
autoload :Job, "rocket_job/job"
|
25
|
+
autoload :JobException, "rocket_job/job_exception"
|
26
|
+
autoload :Worker, "rocket_job/worker"
|
27
|
+
autoload :Performance, "rocket_job/performance"
|
28
|
+
autoload :Server, "rocket_job/server"
|
29
|
+
autoload :Subscriber, "rocket_job/subscriber"
|
30
|
+
autoload :Supervisor, "rocket_job/supervisor"
|
31
|
+
autoload :ThrottleDefinition, "rocket_job/throttle_definition"
|
32
|
+
autoload :ThrottleDefinitions, "rocket_job/throttle_definitions"
|
33
|
+
autoload :WorkerPool, "rocket_job/worker_pool"
|
38
34
|
|
39
35
|
module Plugins
|
40
36
|
module Job
|
41
|
-
autoload :Callbacks,
|
42
|
-
autoload :Defaults,
|
43
|
-
autoload :StateMachine,
|
44
|
-
autoload :Logger,
|
45
|
-
autoload :Model,
|
46
|
-
autoload :Persistence,
|
47
|
-
autoload :Throttle,
|
48
|
-
autoload :ThrottleRunningJobs,
|
49
|
-
autoload :Transaction,
|
50
|
-
autoload :Worker,
|
37
|
+
autoload :Callbacks, "rocket_job/plugins/job/callbacks"
|
38
|
+
autoload :Defaults, "rocket_job/plugins/job/defaults"
|
39
|
+
autoload :StateMachine, "rocket_job/plugins/job/state_machine"
|
40
|
+
autoload :Logger, "rocket_job/plugins/job/logger"
|
41
|
+
autoload :Model, "rocket_job/plugins/job/model"
|
42
|
+
autoload :Persistence, "rocket_job/plugins/job/persistence"
|
43
|
+
autoload :Throttle, "rocket_job/plugins/job/throttle"
|
44
|
+
autoload :ThrottleRunningJobs, "rocket_job/plugins/job/throttle_running_jobs"
|
45
|
+
autoload :Transaction, "rocket_job/plugins/job/transaction"
|
46
|
+
autoload :Worker, "rocket_job/plugins/job/worker"
|
51
47
|
end
|
52
48
|
module Rufus
|
53
|
-
autoload :CronLine,
|
54
|
-
autoload :ZoTime,
|
49
|
+
autoload :CronLine, "rocket_job/plugins/rufus/cron_line"
|
50
|
+
autoload :ZoTime, "rocket_job/plugins/rufus/zo_time"
|
55
51
|
end
|
56
|
-
autoload :Cron,
|
57
|
-
autoload :Document,
|
58
|
-
autoload :ProcessingWindow,
|
59
|
-
autoload :Restart,
|
60
|
-
autoload :Retry,
|
61
|
-
autoload :Singleton,
|
62
|
-
autoload :StateMachine,
|
63
|
-
autoload :Transaction,
|
52
|
+
autoload :Cron, "rocket_job/plugins/cron"
|
53
|
+
autoload :Document, "rocket_job/plugins/document"
|
54
|
+
autoload :ProcessingWindow, "rocket_job/plugins/processing_window"
|
55
|
+
autoload :Restart, "rocket_job/plugins/restart"
|
56
|
+
autoload :Retry, "rocket_job/plugins/retry"
|
57
|
+
autoload :Singleton, "rocket_job/plugins/singleton"
|
58
|
+
autoload :StateMachine, "rocket_job/plugins/state_machine"
|
59
|
+
autoload :Transaction, "rocket_job/plugins/transaction"
|
64
60
|
end
|
65
61
|
|
66
62
|
module Jobs
|
67
|
-
autoload :ActiveJob,
|
68
|
-
autoload :CopyFileJob,
|
69
|
-
autoload :DirmonJob,
|
70
|
-
autoload :OnDemandBatchJob,
|
71
|
-
autoload :OnDemandBatchTabularJob,
|
72
|
-
autoload :OnDemandJob,
|
73
|
-
autoload :HousekeepingJob,
|
74
|
-
autoload :PerformanceJob,
|
75
|
-
autoload :SimpleJob,
|
76
|
-
autoload :UploadFileJob,
|
63
|
+
autoload :ActiveJob, "rocket_job/jobs/active_job"
|
64
|
+
autoload :CopyFileJob, "rocket_job/jobs/copy_file_job"
|
65
|
+
autoload :DirmonJob, "rocket_job/jobs/dirmon_job"
|
66
|
+
autoload :OnDemandBatchJob, "rocket_job/jobs/on_demand_batch_job"
|
67
|
+
autoload :OnDemandBatchTabularJob, "rocket_job/jobs/on_demand_batch_tabular_job"
|
68
|
+
autoload :OnDemandJob, "rocket_job/jobs/on_demand_job"
|
69
|
+
autoload :HousekeepingJob, "rocket_job/jobs/housekeeping_job"
|
70
|
+
autoload :PerformanceJob, "rocket_job/jobs/performance_job"
|
71
|
+
autoload :SimpleJob, "rocket_job/jobs/simple_job"
|
72
|
+
autoload :UploadFileJob, "rocket_job/jobs/upload_file_job"
|
77
73
|
module ReEncrypt
|
78
|
-
autoload :RelationalJob,
|
74
|
+
autoload :RelationalJob, "rocket_job/jobs/re_encrypt/relational_job"
|
79
75
|
end
|
80
76
|
end
|
81
77
|
|
82
78
|
module Sliced
|
83
|
-
autoload :CompressedSlice,
|
84
|
-
autoload :EncryptedSlice,
|
85
|
-
autoload :Input,
|
86
|
-
autoload :Output,
|
87
|
-
autoload :Slice,
|
88
|
-
autoload :Slices,
|
89
|
-
autoload :Store,
|
79
|
+
autoload :CompressedSlice, "rocket_job/sliced/compressed_slice"
|
80
|
+
autoload :EncryptedSlice, "rocket_job/sliced/encrypted_slice"
|
81
|
+
autoload :Input, "rocket_job/sliced/input"
|
82
|
+
autoload :Output, "rocket_job/sliced/output"
|
83
|
+
autoload :Slice, "rocket_job/sliced/slice"
|
84
|
+
autoload :Slices, "rocket_job/sliced/slices"
|
85
|
+
autoload :Store, "rocket_job/sliced/store"
|
90
86
|
|
91
87
|
module Writer
|
92
|
-
autoload :Input,
|
93
|
-
autoload :Output,
|
88
|
+
autoload :Input, "rocket_job/sliced/writer/input"
|
89
|
+
autoload :Output, "rocket_job/sliced/writer/output"
|
94
90
|
end
|
95
91
|
end
|
96
92
|
|
97
93
|
module Subscribers
|
98
|
-
autoload :Logger,
|
99
|
-
autoload :Server,
|
100
|
-
autoload :Worker,
|
94
|
+
autoload :Logger, "rocket_job/subscribers/logger"
|
95
|
+
autoload :Server, "rocket_job/subscribers/server"
|
96
|
+
autoload :Worker, "rocket_job/subscribers/worker"
|
101
97
|
end
|
102
98
|
end
|
103
99
|
|
104
100
|
# Add Active Job adapter for Rails
|
105
|
-
require
|
101
|
+
require "rocket_job/extensions/rocket_job_adapter" if defined?(ActiveJob)
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rocketjob
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.2.0.beta1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Reid Morrison
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aasm
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '4.12'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '4.12'
|
27
27
|
- !ruby/object:Gem::Dependency
|
@@ -56,16 +56,16 @@ dependencies:
|
|
56
56
|
name: mongoid
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '7.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '7.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: semantic_logger
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,8 +95,7 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '4.0'
|
97
97
|
description:
|
98
|
-
email:
|
99
|
-
- support@rocketjob.io
|
98
|
+
email:
|
100
99
|
executables:
|
101
100
|
- rocketjob
|
102
101
|
- rocketjob_perf
|
@@ -124,7 +123,7 @@ files:
|
|
124
123
|
- lib/rocket_job/batch/tabular/input.rb
|
125
124
|
- lib/rocket_job/batch/tabular/output.rb
|
126
125
|
- lib/rocket_job/batch/throttle.rb
|
127
|
-
- lib/rocket_job/batch/
|
126
|
+
- lib/rocket_job/batch/throttle_running_workers.rb
|
128
127
|
- lib/rocket_job/batch/worker.rb
|
129
128
|
- lib/rocket_job/cli.rb
|
130
129
|
- lib/rocket_job/config.rb
|
@@ -134,9 +133,6 @@ files:
|
|
134
133
|
- lib/rocket_job/extensions/mongoid/clients/options.rb
|
135
134
|
- lib/rocket_job/extensions/mongoid/contextual/mongo.rb
|
136
135
|
- lib/rocket_job/extensions/mongoid/factory.rb
|
137
|
-
- lib/rocket_job/extensions/mongoid_5/clients/options.rb
|
138
|
-
- lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb
|
139
|
-
- lib/rocket_job/extensions/mongoid_5/factory.rb
|
140
136
|
- lib/rocket_job/extensions/rocket_job_adapter.rb
|
141
137
|
- lib/rocket_job/heartbeat.rb
|
142
138
|
- lib/rocket_job/job.rb
|
@@ -190,6 +186,8 @@ files:
|
|
190
186
|
- lib/rocket_job/subscribers/worker.rb
|
191
187
|
- lib/rocket_job/supervisor.rb
|
192
188
|
- lib/rocket_job/supervisor/shutdown.rb
|
189
|
+
- lib/rocket_job/throttle_definition.rb
|
190
|
+
- lib/rocket_job/throttle_definitions.rb
|
193
191
|
- lib/rocket_job/version.rb
|
194
192
|
- lib/rocket_job/worker.rb
|
195
193
|
- lib/rocket_job/worker_pool.rb
|
@@ -209,12 +207,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
207
|
version: '2.3'
|
210
208
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
209
|
requirements:
|
212
|
-
- - "
|
210
|
+
- - ">"
|
213
211
|
- !ruby/object:Gem::Version
|
214
|
-
version:
|
212
|
+
version: 1.3.1
|
215
213
|
requirements: []
|
216
|
-
rubygems_version: 3.0.
|
214
|
+
rubygems_version: 3.0.8
|
217
215
|
signing_key:
|
218
216
|
specification_version: 4
|
219
|
-
summary: Ruby's missing batch system.
|
217
|
+
summary: Ruby's missing batch processing system.
|
220
218
|
test_files: []
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require 'mongoid/criteria'
|
2
|
-
require 'mongoid/document'
|
3
|
-
module RocketJob
|
4
|
-
module Mongoid5Clients
|
5
|
-
module Options
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
def with_collection(collection_name)
|
9
|
-
self.collection_name = collection_name
|
10
|
-
self
|
11
|
-
end
|
12
|
-
|
13
|
-
def collection
|
14
|
-
return (@klass || self.class).with(persistence_options || {}).collection unless @collection_name
|
15
|
-
(@klass || self.class).mongo_client[@collection_name]
|
16
|
-
end
|
17
|
-
|
18
|
-
def collection_name
|
19
|
-
@collection_name || super
|
20
|
-
end
|
21
|
-
|
22
|
-
def collection_name=(collection_name)
|
23
|
-
@collection_name = collection_name&.to_sym
|
24
|
-
end
|
25
|
-
|
26
|
-
private
|
27
|
-
|
28
|
-
module ClassMethods
|
29
|
-
def with_collection(collection_name)
|
30
|
-
all.with_collection(collection_name)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
::Mongoid::Criteria.include(RocketJob::Mongoid5Clients::Options)
|
38
|
-
::Mongoid::Document.include(RocketJob::Mongoid5Clients::Options)
|
@@ -1,64 +0,0 @@
|
|
1
|
-
::Mongoid::Contextual::Mongo
|
2
|
-
module Mongoid
|
3
|
-
module Contextual
|
4
|
-
class Mongo
|
5
|
-
def initialize(criteria)
|
6
|
-
@criteria, @klass, @cache = criteria, criteria.klass, criteria.options[:cache]
|
7
|
-
|
8
|
-
# Only line changed is here, get collection name from criteria, not @klass
|
9
|
-
#@collection = @klass.with(criteria.persistence_options || {}).collection
|
10
|
-
@collection = criteria.collection
|
11
|
-
|
12
|
-
criteria.send(:merge_type_selection)
|
13
|
-
@view = collection.find(criteria.selector)
|
14
|
-
apply_options
|
15
|
-
end
|
16
|
-
|
17
|
-
#
|
18
|
-
# Patches below add `criteria` as the last argument to `Factory.from_db`
|
19
|
-
#
|
20
|
-
def first
|
21
|
-
return documents.first if cached? && cache_loaded?
|
22
|
-
try_cache(:first) do
|
23
|
-
if raw_doc = view.limit(-1).first
|
24
|
-
doc = Factory.from_db(klass, raw_doc, criteria.options[:fields], criteria)
|
25
|
-
eager_load([doc]).first
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def find_first
|
31
|
-
return documents.first if cached? && cache_loaded?
|
32
|
-
if raw_doc = view.first
|
33
|
-
doc = Factory.from_db(klass, raw_doc, criteria.options[:fields], criteria)
|
34
|
-
eager_load([doc]).first
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
def last
|
39
|
-
try_cache(:last) do
|
40
|
-
with_inverse_sorting do
|
41
|
-
if raw_doc = view.limit(-1).first
|
42
|
-
doc = Factory.from_db(klass, raw_doc, criteria.options[:fields], criteria)
|
43
|
-
eager_load([doc]).first
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def documents_for_iteration
|
50
|
-
return documents if cached? && !documents.empty?
|
51
|
-
return view unless eager_loadable?
|
52
|
-
docs = view.map{ |doc| Factory.from_db(klass, doc, criteria.options[:fields], criteria) }
|
53
|
-
eager_load(docs)
|
54
|
-
end
|
55
|
-
|
56
|
-
def yield_document(document, &block)
|
57
|
-
doc = document.respond_to?(:_id) ?
|
58
|
-
document : Factory.from_db(klass, document, criteria.options[:fields], criteria)
|
59
|
-
yield(doc)
|
60
|
-
documents.push(doc) if cacheable?
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'mongoid/factory'
|
2
|
-
|
3
|
-
module RocketJob
|
4
|
-
module Mongoid5Factory
|
5
|
-
def from_db(klass, attributes = nil, selected_fields = nil, criteria = nil)
|
6
|
-
obj = super(klass, attributes, selected_fields)
|
7
|
-
obj.collection_name = criteria.collection_name if criteria
|
8
|
-
obj
|
9
|
-
end
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
::Mongoid::Factory.extend(RocketJob::Mongoid5Factory)
|