activejob 4.2.0.beta3 → 4.2.0.beta4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c5a2b58acaf46d3c73b8e4912dae2b8eb8641925
4
- data.tar.gz: c5e4a57013c1b509b26ee75f915eb22a1df9cf7f
3
+ metadata.gz: b7f0d0bb6e1251caa7d81084bb08533b08fad421
4
+ data.tar.gz: 68455756afb12ee46fd20d005339f53b429ffc06
5
5
  SHA512:
6
- metadata.gz: 5dc374de91f62afd1b734992fdde22c5165164f296dc336e043e3c33d2de0054e0e7e26838ce1b4b46d7e1bffddaf5c56bb99f145cf76ac1d7c8793215f55a31
7
- data.tar.gz: 8527e31bdbb06eb5afaf8502023c38688ffc7d5c7a7ec2227ef2d70b3918b7f4df8064238040a11fb3006e9fedd0227ef41d905d0d0ad19739a317e7eb560ed2
6
+ metadata.gz: ad1b0d84c6ef53c2f1c9e0859d7dc1b4d1a08dd24f2eca11c181b433cfd318984216b63e9f32330f9bbabf5581a1e4c7f7d8dd897cebab16f40f3ab05a0c484c
7
+ data.tar.gz: af98007efc01844df75eade2e77443043f543a120fbdc58319aa95340bcec5f5a1fac82162d098dff3de90e7fc2d680192d4094d8d41663d9de6f7425912c2f9
@@ -24,10 +24,16 @@ module ActiveJob
24
24
  extend self
25
25
  TYPE_WHITELIST = [ NilClass, Fixnum, Float, String, TrueClass, FalseClass, Bignum ]
26
26
 
27
+ # Serializes a set of arguments. Whitelisted types are returned
28
+ # as-is. Arrays/Hashes are serialized element by element.
29
+ # All other types are serialized using GlobalID.
27
30
  def serialize(arguments)
28
31
  arguments.map { |argument| serialize_argument(argument) }
29
32
  end
30
33
 
34
+ # Deserializes a set of arguments. Whitelisted types are returned
35
+ # as-is. Arrays/Hashes are deserialized element by element.
36
+ # All other types are deserialized using GlobalID.
31
37
  def deserialize(arguments)
32
38
  arguments.map { |argument| deserialize_argument(argument) }
33
39
  rescue => e
@@ -6,7 +6,52 @@ require 'active_job/execution'
6
6
  require 'active_job/callbacks'
7
7
  require 'active_job/logging'
8
8
 
9
- module ActiveJob
9
+ module ActiveJob #:nodoc:
10
+ # = Active Job
11
+ #
12
+ # Active Job objects can be configured to work with different backend
13
+ # queuing frameworks. To specify a queue adapter to use:
14
+ #
15
+ # ActiveJob::Base.queue_adapter = :inline
16
+ #
17
+ # A list of supported adapters can be found in QueueAdapters.
18
+ #
19
+ # Active Job objects can be defined by creating a class that inherits
20
+ # from the ActiveJob::Base class. The only necessary method to
21
+ # implement is the "perform" method.
22
+ #
23
+ # To define an Active Job object:
24
+ #
25
+ # class ProcessPhotoJob < ActiveJob::Base
26
+ # def perform(photo)
27
+ # photo.watermark!('Rails')
28
+ # photo.rotate!(90.degrees)
29
+ # photo.resize_to_fit!(300, 300)
30
+ # photo.upload!
31
+ # end
32
+ # end
33
+ #
34
+ # Records that are passed in are serialized/deserialized using Global
35
+ # Id. More information can be found in Arguments.
36
+ #
37
+ # To enqueue a job to be performed as soon the queueing system is free:
38
+ #
39
+ # ProcessPhotoJob.perform_later(photo)
40
+ #
41
+ # To enqueue a job to be processed at some point in the future:
42
+ #
43
+ # ProcessPhotoJob.set(wait_until: Date.tomorrow.noon).perform_later(photo)
44
+ #
45
+ # More information can be found in ActiveJob::Core::ClassMethods#set
46
+ #
47
+ # A job can also be processed immediately without sending to the queue:
48
+ #
49
+ # ProcessPhotoJob.perform_now(photo)
50
+ #
51
+ # == Exceptions
52
+ #
53
+ # * DeserializationError - Error class for deserialization errors.
54
+ # * SerializationError - Error class for serialization errors.
10
55
  class Base
11
56
  include Core
12
57
  include QueueAdapter
@@ -40,9 +40,9 @@ module ActiveJob
40
40
  #
41
41
  # VideoJob.set(queue: :some_queue).perform_later(Video.last)
42
42
  # VideoJob.set(wait: 5.minutes).perform_later(Video.last)
43
- # VideoJob.set(wait_until: Time.tomorroe).perform_later(Video.last)
43
+ # VideoJob.set(wait_until: Time.now.tomorrow).perform_later(Video.last)
44
44
  # VideoJob.set(queue: :some_queue, wait: 5.minutes).perform_later(Video.last)
45
- # VideoJob.set(queue: :some_queue, wait_until: Time.tomorroe).perform_later(Video.last)
45
+ # VideoJob.set(queue: :some_queue, wait_until: Time.now.tomorrow).perform_later(Video.last)
46
46
  def set(options={})
47
47
  ConfiguredJob.new(self, options)
48
48
  end
@@ -10,7 +10,7 @@ module ActiveJob
10
10
  # GlobalID::Identification instances. Arbitrary Ruby objects
11
11
  # are not supported.
12
12
  #
13
- # Returns an instance of the job class queued with args available in
13
+ # Returns an instance of the job class queued with arguments available in
14
14
  # Job#arguments.
15
15
  def perform_later(*args)
16
16
  job_or_instantiate(*args).enqueue
@@ -8,7 +8,7 @@ module ActiveJob
8
8
  MAJOR = 4
9
9
  MINOR = 2
10
10
  TINY = 0
11
- PRE = "beta3"
11
+ PRE = "beta4"
12
12
 
13
13
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
14
14
  end
@@ -3,7 +3,7 @@ require 'active_support/tagged_logging'
3
3
  require 'active_support/logger'
4
4
 
5
5
  module ActiveJob
6
- module Logging
6
+ module Logging #:nodoc:
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  included do
@@ -2,12 +2,15 @@ require 'active_job/queue_adapters/inline_adapter'
2
2
  require 'active_support/core_ext/string/inflections'
3
3
 
4
4
  module ActiveJob
5
- module QueueAdapter
5
+ module QueueAdapter #:nodoc:
6
6
  extend ActiveSupport::Concern
7
7
 
8
8
  module ClassMethods
9
9
  mattr_reader(:queue_adapter) { ActiveJob::QueueAdapters::InlineAdapter }
10
10
 
11
+ # Specify the backend queue provider. The default queue adapter
12
+ # is the :inline queue. See QueueAdapters for more
13
+ # information.
11
14
  def queue_adapter=(name_or_adapter)
12
15
  @@queue_adapter = \
13
16
  case name_or_adapter
@@ -26,4 +29,4 @@ module ActiveJob
26
29
  end
27
30
  end
28
31
  end
29
- end
32
+ end
@@ -7,7 +7,7 @@ module ActiveJob
7
7
  # * {Delayed Job}[https://github.com/collectiveidea/delayed_job]
8
8
  # * {Qu}[https://github.com/bkeepers/qu]
9
9
  # * {Que}[https://github.com/chanks/que]
10
- # * {QueueClassic 2.x}[https://github.com/ryandotsmith/queue_classic/tree/v2.2.3]
10
+ # * {queue_classic}[https://github.com/QueueClassic/queue_classic]
11
11
  # * {Resque 1.x}[https://github.com/resque/resque/tree/1-x-stable]
12
12
  # * {Sidekiq}[http://sidekiq.org]
13
13
  # * {Sneakers}[https://github.com/jondot/sneakers]
@@ -20,7 +20,7 @@ module ActiveJob
20
20
  # | Backburner | Yes | Yes | Yes | Yes | Job | Global |
21
21
  # | Delayed Job | Yes | Yes | Yes | Job | Global | Global |
22
22
  # | Que | Yes | Yes | Yes | Job | No | Job |
23
- # | Queue Classic | Yes | Yes | No* | No | No | No |
23
+ # | queue_classic | Yes | Yes | No* | No | No | No |
24
24
  # | Resque | Yes | Yes | Yes (Gem) | Queue | Global | Yes |
25
25
  # | Sidekiq | Yes | Yes | Yes | Queue | No | Job |
26
26
  # | Sneakers | Yes | Yes | No | Queue | Queue | No |
@@ -29,7 +29,7 @@ module ActiveJob
29
29
  # | Active Job | Yes | Yes | Yes | No | No | No |
30
30
  #
31
31
  # NOTE:
32
- # Queue Classic does not support Job scheduling. However you can implement this
32
+ # queue_classic does not support Job scheduling. However you can implement this
33
33
  # yourself or you can use the queue_classic-later gem. See the documentation for
34
34
  # ActiveJob::QueueAdapters::QueueClassicAdapter.
35
35
  #
@@ -15,7 +15,7 @@ module ActiveJob
15
15
  end
16
16
 
17
17
  def enqueue_at(*) #:nodoc:
18
- raise NotImplementedError.new("Use a queueing backend to enqueue jobs in the future. Read more at https://github.com/rails/activejob")
18
+ raise NotImplementedError.new("Use a queueing backend to enqueue jobs in the future. Read more at http://guides.rubyonrails.org/v4.2.0/active_job_basics.html")
19
19
  end
20
20
  end
21
21
  end
@@ -6,11 +6,11 @@ module ActiveJob
6
6
  #
7
7
  # Qu is a Ruby library for queuing and processing background jobs. It is
8
8
  # heavily inspired by delayed_job and Resque. Qu was created to overcome
9
- # some shortcomings in the existing queuing libraries that we experienced.
9
+ # some shortcomings in the existing queuing libraries.
10
10
  # The advantages of Qu are: Multiple backends (redis, mongo), jobs are
11
11
  # requeued when worker is killed, resque-like API.
12
12
  #
13
- # Read more about Que {here}[https://github.com/bkeepers/qu].
13
+ # Read more about Qu {here}[https://github.com/bkeepers/qu].
14
14
  #
15
15
  # To use Qu set the queue_adapter config to +:qu+.
16
16
  #
@@ -2,7 +2,7 @@ require 'queue_classic'
2
2
 
3
3
  module ActiveJob
4
4
  module QueueAdapters
5
- # == Queue Classic adapter for Active Job
5
+ # == queue_classic adapter for Active Job
6
6
  #
7
7
  # queue_classic provides a simple interface to a PostgreSQL-backed message
8
8
  # queue. queue_classic specializes in concurrent locking and minimizing
@@ -11,9 +11,9 @@ module ActiveJob
11
11
  # production environment and that adding another dependency (e.g. redis,
12
12
  # beanstalkd, 0mq) is undesirable.
13
13
  #
14
- # Read more about Queue Classic {here}[https://github.com/ryandotsmith/queue_classic].
14
+ # Read more about queue_classic {here}[https://github.com/QueueClassic/queue_classic].
15
15
  #
16
- # To use Queue Classic set the queue_adapter config to +:queue_classic+.
16
+ # To use queue_classic set the queue_adapter config to +:queue_classic+.
17
17
  #
18
18
  # Rails.application.config.active_job.queue_adapter = :queue_classic
19
19
  class QueueClassicAdapter
@@ -25,8 +25,8 @@ module ActiveJob
25
25
  def enqueue_at(job, timestamp) #:nodoc:
26
26
  queue = build_queue(job.queue_name)
27
27
  unless queue.respond_to?(:enqueue_at)
28
- raise NotImplementedError, 'To be able to schedule jobs with Queue Classic ' \
29
- 'the QC::Queue needs to respond to `enqueue_at(timestamp, method, *args)`. '
28
+ raise NotImplementedError, 'To be able to schedule jobs with queue_classic ' \
29
+ 'the QC::Queue needs to respond to `enqueue_at(timestamp, method, *args)`. ' \
30
30
  'You can implement this yourself or you can use the queue_classic-later gem.'
31
31
  end
32
32
  queue.enqueue_at(timestamp, "#{JobWrapper.name}.perform", job.serialize)
@@ -34,7 +34,7 @@ module ActiveJob
34
34
 
35
35
  # Builds a <tt>QC::Queue</tt> object to schedule jobs on.
36
36
  #
37
- # If you have a custom <tt>QC::Queue</tt> subclass you'll need to suclass
37
+ # If you have a custom <tt>QC::Queue</tt> subclass you'll need to subclass
38
38
  # <tt>ActiveJob::QueueAdapters::QueueClassicAdapter</tt> and override the
39
39
  # <tt>build_queue</tt> method.
40
40
  def build_queue(queue_name)
@@ -6,8 +6,8 @@ module ActiveJob
6
6
  #
7
7
  # Simple, efficient background processing for Ruby. Sidekiq uses threads to
8
8
  # handle many jobs at the same time in the same process. It does not
9
- # require Rails but will integrate tightly with Rails 3/4 to make
10
- # background processing dead simple.
9
+ # require Rails but will integrate tightly with it to make background
10
+ # processing dead simple.
11
11
  #
12
12
  # Read more about Sidekiq {here}[http://sidekiq.org].
13
13
  #
@@ -21,8 +21,7 @@ module ActiveJob
21
21
  Sidekiq::Client.push \
22
22
  'class' => JobWrapper,
23
23
  'queue' => job.queue_name,
24
- 'args' => [ job.serialize ],
25
- 'retry' => true
24
+ 'args' => [ job.serialize ]
26
25
  end
27
26
 
28
27
  def enqueue_at(job, timestamp) #:nodoc:
@@ -30,7 +29,6 @@ module ActiveJob
30
29
  'class' => JobWrapper,
31
30
  'queue' => job.queue_name,
32
31
  'args' => [ job.serialize ],
33
- 'retry' => true,
34
32
  'at' => timestamp
35
33
  end
36
34
  end
@@ -6,6 +6,15 @@ module ActiveJob
6
6
  mattr_accessor(:queue_name_prefix)
7
7
  mattr_accessor(:default_queue_name) { "default" }
8
8
 
9
+ # Specifies the name of the queue to process the job on.
10
+ #
11
+ # class PublishToFeedJob < ActiveJob::Base
12
+ # queue_as :feeds
13
+ #
14
+ # def perform(post)
15
+ # post.to_feed!
16
+ # end
17
+ # end
9
18
  def queue_as(part_name=nil, &block)
10
19
  if block_given?
11
20
  self.queue_name = block
@@ -15,15 +24,18 @@ module ActiveJob
15
24
  end
16
25
 
17
26
  def queue_name_from_part(part_name) #:nodoc:
18
- queue_name = part_name.to_s.presence || default_queue_name
27
+ queue_name = part_name || default_queue_name
19
28
  name_parts = [queue_name_prefix.presence, queue_name]
20
- name_parts.compact.join('_')
29
+ name_parts.compact.join(queue_name_delimiter)
21
30
  end
22
31
  end
23
32
 
24
33
  included do
25
34
  class_attribute :queue_name, instance_accessor: false
35
+ class_attribute :queue_name_delimiter, instance_accessor: false
36
+
26
37
  self.queue_name = default_queue_name
38
+ self.queue_name_delimiter = '_' # set default delimiter to '_'
27
39
  end
28
40
 
29
41
  # Returns the name of the queue the job will be run on
@@ -71,7 +71,7 @@ module ActiveJob
71
71
  #
72
72
  # Note: This assertion is simply a shortcut for:
73
73
  #
74
- # assert_enqueued_jobs 0
74
+ # assert_enqueued_jobs 0, &block
75
75
  def assert_no_enqueued_jobs(&block)
76
76
  assert_enqueued_jobs 0, &block
77
77
  end
@@ -130,7 +130,7 @@ module ActiveJob
130
130
  #
131
131
  # Note: This assertion is simply a shortcut for:
132
132
  #
133
- # assert_performed_jobs 0
133
+ # assert_performed_jobs 0, &block
134
134
  def assert_no_performed_jobs(&block)
135
135
  assert_performed_jobs 0, &block
136
136
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activejob
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0.beta3
4
+ version: 4.2.0.beta4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-29 00:00:00.000000000 Z
11
+ date: 2014-10-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,26 +16,26 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0.beta3
19
+ version: 4.2.0.beta4
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
- version: 4.2.0.beta3
26
+ version: 4.2.0.beta4
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: globalid
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.3.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 0.3.0
41
41
  description: Declare job classes that can be run by a variety of queueing backends.
@@ -87,17 +87,17 @@ require_paths:
87
87
  - lib
88
88
  required_ruby_version: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - ">="
90
+ - - '>='
91
91
  - !ruby/object:Gem::Version
92
92
  version: 1.9.3
93
93
  required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - ">"
95
+ - - '>'
96
96
  - !ruby/object:Gem::Version
97
97
  version: 1.3.1
98
98
  requirements: []
99
99
  rubyforge_project:
100
- rubygems_version: 2.2.2
100
+ rubygems_version: 2.2.1
101
101
  signing_key:
102
102
  specification_version: 4
103
103
  summary: Job framework with pluggable queues.