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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/bin/rocketjob +2 -2
  3. data/bin/rocketjob_batch_perf +1 -1
  4. data/bin/rocketjob_perf +1 -1
  5. data/lib/rocket_job/active_worker.rb +1 -0
  6. data/lib/rocket_job/batch.rb +16 -17
  7. data/lib/rocket_job/batch/callbacks.rb +1 -2
  8. data/lib/rocket_job/batch/io.rb +10 -6
  9. data/lib/rocket_job/batch/logger.rb +2 -2
  10. data/lib/rocket_job/batch/lower_priority.rb +2 -2
  11. data/lib/rocket_job/batch/model.rb +23 -23
  12. data/lib/rocket_job/batch/performance.rb +19 -21
  13. data/lib/rocket_job/batch/result.rb +1 -1
  14. data/lib/rocket_job/batch/results.rb +1 -1
  15. data/lib/rocket_job/batch/state_machine.rb +5 -6
  16. data/lib/rocket_job/batch/statistics.rb +10 -8
  17. data/lib/rocket_job/batch/tabular.rb +2 -2
  18. data/lib/rocket_job/batch/tabular/input.rb +11 -7
  19. data/lib/rocket_job/batch/tabular/output.rb +1 -1
  20. data/lib/rocket_job/batch/throttle.rb +11 -30
  21. data/lib/rocket_job/batch/{throttle_running_slices.rb → throttle_running_workers.rb} +13 -10
  22. data/lib/rocket_job/batch/worker.rb +102 -85
  23. data/lib/rocket_job/cli.rb +57 -54
  24. data/lib/rocket_job/config.rb +8 -10
  25. data/lib/rocket_job/dirmon_entry.rb +13 -10
  26. data/lib/rocket_job/event.rb +16 -16
  27. data/lib/rocket_job/extensions/mongo/logging.rb +2 -2
  28. data/lib/rocket_job/extensions/mongoid/clients/options.rb +2 -2
  29. data/lib/rocket_job/extensions/mongoid/contextual/mongo.rb +4 -2
  30. data/lib/rocket_job/extensions/mongoid/factory.rb +13 -5
  31. data/lib/rocket_job/extensions/rocket_job_adapter.rb +2 -1
  32. data/lib/rocket_job/job_exception.rb +0 -3
  33. data/lib/rocket_job/jobs/dirmon_job.rb +4 -4
  34. data/lib/rocket_job/jobs/housekeeping_job.rb +7 -7
  35. data/lib/rocket_job/jobs/on_demand_batch_job.rb +14 -4
  36. data/lib/rocket_job/jobs/on_demand_job.rb +3 -3
  37. data/lib/rocket_job/jobs/performance_job.rb +1 -1
  38. data/lib/rocket_job/jobs/re_encrypt/relational_job.rb +11 -10
  39. data/lib/rocket_job/jobs/upload_file_job.rb +9 -5
  40. data/lib/rocket_job/performance.rb +24 -22
  41. data/lib/rocket_job/plugins/cron.rb +7 -3
  42. data/lib/rocket_job/plugins/document.rb +7 -5
  43. data/lib/rocket_job/plugins/job/callbacks.rb +1 -1
  44. data/lib/rocket_job/plugins/job/logger.rb +3 -3
  45. data/lib/rocket_job/plugins/job/model.rb +34 -27
  46. data/lib/rocket_job/plugins/job/persistence.rb +7 -34
  47. data/lib/rocket_job/plugins/job/state_machine.rb +5 -4
  48. data/lib/rocket_job/plugins/job/throttle.rb +12 -28
  49. data/lib/rocket_job/plugins/job/throttle_running_jobs.rb +2 -2
  50. data/lib/rocket_job/plugins/job/worker.rb +22 -70
  51. data/lib/rocket_job/plugins/processing_window.rb +5 -4
  52. data/lib/rocket_job/plugins/restart.rb +3 -3
  53. data/lib/rocket_job/plugins/retry.rb +2 -2
  54. data/lib/rocket_job/plugins/singleton.rb +1 -2
  55. data/lib/rocket_job/plugins/state_machine.rb +4 -4
  56. data/lib/rocket_job/plugins/transaction.rb +1 -1
  57. data/lib/rocket_job/rocket_job.rb +5 -4
  58. data/lib/rocket_job/server.rb +2 -2
  59. data/lib/rocket_job/server/model.rb +14 -13
  60. data/lib/rocket_job/server/state_machine.rb +1 -2
  61. data/lib/rocket_job/sliced/compressed_slice.rb +4 -4
  62. data/lib/rocket_job/sliced/encrypted_slice.rb +4 -4
  63. data/lib/rocket_job/sliced/input.rb +16 -16
  64. data/lib/rocket_job/sliced/output.rb +2 -2
  65. data/lib/rocket_job/sliced/slice.rb +43 -20
  66. data/lib/rocket_job/sliced/slices.rb +14 -11
  67. data/lib/rocket_job/subscriber.rb +6 -6
  68. data/lib/rocket_job/subscribers/logger.rb +3 -3
  69. data/lib/rocket_job/supervisor.rb +12 -12
  70. data/lib/rocket_job/supervisor/shutdown.rb +7 -7
  71. data/lib/rocket_job/throttle_definition.rb +37 -0
  72. data/lib/rocket_job/throttle_definitions.rb +39 -0
  73. data/lib/rocket_job/version.rb +1 -1
  74. data/lib/rocket_job/worker.rb +116 -34
  75. data/lib/rocket_job/worker_pool.rb +6 -6
  76. data/lib/rocketjob.rb +72 -76
  77. metadata +16 -18
  78. data/lib/rocket_job/extensions/mongoid_5/clients/options.rb +0 -38
  79. data/lib/rocket_job/extensions/mongoid_5/contextual/mongo.rb +0 -64
  80. data/lib/rocket_job/extensions/mongoid_5/factory.rb +0 -13
@@ -1,5 +1,5 @@
1
- require 'concurrent-ruby'
2
- require 'rocket_job/supervisor/shutdown'
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 > 0
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 => exc
94
- logger.fatal('Cannot start worker', exc)
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
@@ -1,105 +1,101 @@
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)
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
- if Mongoid::VERSION.to_i >= 6
13
- require 'rocket_job/extensions/mongoid/clients/options'
14
- require 'rocket_job/extensions/mongoid/contextual/mongo'
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, 'rocket_job/active_worker'
25
- autoload :Batch, 'rocket_job/batch'
26
- autoload :CLI, 'rocket_job/cli'
27
- autoload :DirmonEntry, 'rocket_job/dirmon_entry'
28
- autoload :Event, 'rocket_job/event'
29
- autoload :Heartbeat, 'rocket_job/heartbeat'
30
- autoload :Job, 'rocket_job/job'
31
- autoload :JobException, 'rocket_job/job_exception'
32
- autoload :Worker, 'rocket_job/worker'
33
- autoload :Performance, 'rocket_job/performance'
34
- autoload :Server, 'rocket_job/server'
35
- autoload :Subscriber, 'rocket_job/subscriber'
36
- autoload :Supervisor, 'rocket_job/supervisor'
37
- autoload :WorkerPool, 'rocket_job/worker_pool'
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, 'rocket_job/plugins/job/callbacks'
42
- autoload :Defaults, 'rocket_job/plugins/job/defaults'
43
- autoload :StateMachine, 'rocket_job/plugins/job/state_machine'
44
- autoload :Logger, 'rocket_job/plugins/job/logger'
45
- autoload :Model, 'rocket_job/plugins/job/model'
46
- autoload :Persistence, 'rocket_job/plugins/job/persistence'
47
- autoload :Throttle, 'rocket_job/plugins/job/throttle'
48
- autoload :ThrottleRunningJobs, 'rocket_job/plugins/job/throttle_running_jobs'
49
- autoload :Transaction, 'rocket_job/plugins/job/transaction'
50
- autoload :Worker, 'rocket_job/plugins/job/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, 'rocket_job/plugins/rufus/cron_line'
54
- autoload :ZoTime, 'rocket_job/plugins/rufus/zo_time'
49
+ autoload :CronLine, "rocket_job/plugins/rufus/cron_line"
50
+ autoload :ZoTime, "rocket_job/plugins/rufus/zo_time"
55
51
  end
56
- autoload :Cron, 'rocket_job/plugins/cron'
57
- autoload :Document, 'rocket_job/plugins/document'
58
- autoload :ProcessingWindow, 'rocket_job/plugins/processing_window'
59
- autoload :Restart, 'rocket_job/plugins/restart'
60
- autoload :Retry, 'rocket_job/plugins/retry'
61
- autoload :Singleton, 'rocket_job/plugins/singleton'
62
- autoload :StateMachine, 'rocket_job/plugins/state_machine'
63
- autoload :Transaction, 'rocket_job/plugins/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, 'rocket_job/jobs/active_job'
68
- autoload :CopyFileJob, 'rocket_job/jobs/copy_file_job'
69
- autoload :DirmonJob, 'rocket_job/jobs/dirmon_job'
70
- autoload :OnDemandBatchJob, 'rocket_job/jobs/on_demand_batch_job'
71
- autoload :OnDemandBatchTabularJob, 'rocket_job/jobs/on_demand_batch_tabular_job'
72
- autoload :OnDemandJob, 'rocket_job/jobs/on_demand_job'
73
- autoload :HousekeepingJob, 'rocket_job/jobs/housekeeping_job'
74
- autoload :PerformanceJob, 'rocket_job/jobs/performance_job'
75
- autoload :SimpleJob, 'rocket_job/jobs/simple_job'
76
- autoload :UploadFileJob, 'rocket_job/jobs/upload_file_job'
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, 'rocket_job/jobs/re_encrypt/relational_job'
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, 'rocket_job/sliced/compressed_slice'
84
- autoload :EncryptedSlice, 'rocket_job/sliced/encrypted_slice'
85
- autoload :Input, 'rocket_job/sliced/input'
86
- autoload :Output, 'rocket_job/sliced/output'
87
- autoload :Slice, 'rocket_job/sliced/slice'
88
- autoload :Slices, 'rocket_job/sliced/slices'
89
- autoload :Store, 'rocket_job/sliced/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, 'rocket_job/sliced/writer/input'
93
- autoload :Output, 'rocket_job/sliced/writer/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, 'rocket_job/subscribers/logger'
99
- autoload :Server, 'rocket_job/subscribers/server'
100
- autoload :Worker, 'rocket_job/subscribers/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 'rocket_job/extensions/rocket_job_adapter' if defined?(ActiveJob)
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.1.1
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-02-25 00:00:00.000000000 Z
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: '5.4'
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: '5.4'
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/throttle_running_slices.rb
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: '0'
212
+ version: 1.3.1
215
213
  requirements: []
216
- rubygems_version: 3.0.6
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)