delayed_job_mongoid 1.0.0.rc → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,9 +2,13 @@
2
2
 
3
3
  ## Installation
4
4
 
5
- Add the gems to you Gemfile:
5
+ Add the gems to your Gemfile:
6
+
7
+ gem 'delayed_job', '2.1.0.pre2'
8
+ gem 'delayed_job_mongoid', '1.0.0.rc'
9
+
10
+ Create the indexes:
11
+
12
+ script/rails runner 'Delayed::Backend::Mongoid::Job.create_indexes'
6
13
 
7
- gem 'delayed_job', '2.1.0.pre2'
8
- gem 'delayed_job_mongoid', '1.0.0.rc'
9
-
10
14
  That's it. Use [delayed_job as normal](http://github.com/collectiveidea/delayed_job).
@@ -10,33 +10,34 @@ module Delayed
10
10
  field :handler, :type=> String
11
11
  field :run_at, :type=> Time
12
12
  field :locked_at, :type=> Time
13
- field :locked_by, :type=> String, :index => true
13
+ field :locked_by, :type=> String
14
14
  field :failed_at, :type=> Time
15
15
  field :last_error, :type=> String
16
-
17
-
16
+
17
+ index :locked_by
18
+
18
19
  before_save :set_default_run_at
19
-
20
+
20
21
  def self.before_fork
21
22
  ::Mongoid.master.connection.close
22
23
  end
23
24
 
24
25
  def self.after_fork
25
- ::Mongoid.master.connection.connect_to_master
26
+ ::Mongoid.master.connection.connect
26
27
  end
27
-
28
+
28
29
  def self.db_time_now
29
30
  Time.now.utc
30
31
  end
31
-
32
+
32
33
  def self.find_available(worker_name, limit = 5, max_run_time = Worker.max_run_time)
33
34
  right_now = db_time_now
34
35
 
35
36
  conditions = {:run_at => {"$lte" => right_now}, :failed_at => nil}
36
37
  (conditions[:priority] ||= {})['$gte'] = Worker.min_priority.to_i if Worker.min_priority
37
38
  (conditions[:priority] ||= {})['$lte'] = Worker.max_priority.to_i if Worker.max_priority
38
-
39
-
39
+
40
+
40
41
  where = "this.locked_at == null || this.locked_at < #{make_date(right_now - max_run_time)}"
41
42
  results = self.where(conditions.merge(:locked_by => worker_name)).limit(-limit).order_by([['priority', 1], ['run_at', 1]]).to_a
42
43
  results += self.where(conditions.merge('$where' => where)).limit(-limit+results.size).order_by([['priority', 1], ['run_at', 1]]).to_a if results.size < limit
@@ -46,16 +47,16 @@ module Delayed
46
47
  def self.clear_locks!(worker_name)
47
48
  self.collection.update({:locked_by => worker_name}, {"$set" => {:locked_at => nil, :locked_by => nil}}, :multi => true)
48
49
  end
49
-
50
+
50
51
  # Lock this job for this worker.
51
52
  # Returns true if we have the lock, false otherwise.
52
53
  def lock_exclusively!(max_run_time, worker = worker_name)
53
54
  right_now = self.class.db_time_now
54
55
  overtime = right_now - max_run_time.to_i
55
-
56
+
56
57
  query = "this.locked_at == null || this.locked_at < #{make_date(overtime)} || this.locked_by == #{worker.to_json}"
57
58
  conditions = {:_id => id, :run_at => {"$lte" => right_now}, "$where" => query}
58
-
59
+
59
60
  self.collection.update(conditions, {"$set" => {:locked_at => right_now, :locked_by => worker}})
60
61
  affected_rows = self.collection.find({:_id => id, :locked_by => worker}).count
61
62
  if affected_rows == 1
@@ -66,7 +67,7 @@ module Delayed
66
67
  return false
67
68
  end
68
69
  end
69
-
70
+
70
71
  private
71
72
 
72
73
  def self.make_date(date_or_seconds)
@@ -1,14 +1,14 @@
1
1
  Mongoid::Document.class_eval do
2
2
  yaml_as "tag:ruby.yaml.org,2002:Mongoid"
3
-
3
+
4
4
  def self.yaml_new(klass, tag, val)
5
5
  begin
6
6
  klass.find(val['attributes']['_id'])
7
7
  rescue Mongoid::Errors::DocumentNotFound
8
- nil
8
+ raise Delayed::DeserializationError
9
9
  end
10
10
  end
11
-
11
+
12
12
  def to_yaml_properties
13
13
  ['@attributes']
14
14
  end
data/spec/spec_helper.rb CHANGED
@@ -2,22 +2,17 @@ require 'rubygems'
2
2
  require 'bundler/setup'
3
3
  $LOAD_PATH.unshift(File.dirname(__FILE__))
4
4
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
- require 'spec'
6
- require 'spec/autorun'
5
+ require 'rspec'
7
6
  require 'delayed_job_mongoid'
8
7
  require 'delayed/backend/shared_spec'
9
8
 
10
- Spec::Runner.configure do |config|
11
-
12
- end
13
-
14
9
  Mongoid.configure do |config|
15
- config.master = config.master = Mongo::Connection.new.db('dl_spec')
10
+ config.master = config.master = Mongo::Connection.new.db('dl_spec')
16
11
  end
17
12
 
18
13
  class Story
19
14
  include ::Mongoid::Document
20
- def tell; text; end
15
+ def tell; text; end
21
16
  def whatever(n, _); tell*n; end
22
17
  def self.count; end
23
18
 
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: delayed_job_mongoid
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ prerelease: false
5
5
  segments:
6
6
  - 1
7
7
  - 0
8
8
  - 0
9
- - rc
10
- version: 1.0.0.rc
9
+ version: 1.0.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Brandon Keepers
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-09-05 00:00:00 -04:00
17
+ date: 2010-11-14 00:00:00 -06:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -41,7 +40,8 @@ dependencies:
41
40
  segments:
42
41
  - 2
43
42
  - 1
44
- version: "2.1"
43
+ - 1
44
+ version: 2.1.1
45
45
  type: :runtime
46
46
  version_requirements: *id002
47
47
  - !ruby/object:Gem::Dependency
@@ -52,10 +52,9 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  segments:
55
- - 1
56
55
  - 2
57
- - 9
58
- version: 1.2.9
56
+ - 0
57
+ version: "2.0"
59
58
  type: :development
60
59
  version_requirements: *id003
61
60
  description:
@@ -94,13 +93,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
94
93
  version: "0"
95
94
  required_rubygems_version: !ruby/object:Gem::Requirement
96
95
  requirements:
97
- - - ">"
96
+ - - ">="
98
97
  - !ruby/object:Gem::Version
99
98
  segments:
100
- - 1
101
- - 3
102
- - 1
103
- version: 1.3.1
99
+ - 0
100
+ version: "0"
104
101
  requirements: []
105
102
 
106
103
  rubyforge_project: