quebert 2.0.2 → 2.0.3

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 063bc22b230d2549c427562deb220554b1b6b931
4
+ data.tar.gz: 0f4db324c52f319abe1229112f0ea4219172f47d
5
+ SHA512:
6
+ metadata.gz: b001d8710708db59714b9722c75cf0919ab1520a369ff2c3c246645450a02ba0e47235be186f805984d46693c7766b654bc579e73f8bca176c7176e37935e2ad
7
+ data.tar.gz: 76331a2a7b8600945285f562802b80f68954909d0b0a62f8b5ae857c8c5d782d5c364e74438f38ef542a91588ea2f2ba8dc7d46fa6abd107c59c07c46f4b5d28
data/.rbenv-version CHANGED
@@ -1 +1 @@
1
- 1.9.3-p392
1
+ 1.9.3-p484
data/.travis.yml CHANGED
@@ -1,6 +1,12 @@
1
- script: bundle exec rspec
2
1
  language: ruby
3
2
  rvm:
4
3
  - 2.0.0
5
- - 1.9.3
6
- - 1.8.7
4
+ before_install:
5
+ - curl -L https://github.com/kr/beanstalkd/archive/v1.9.tar.gz | tar xz -C /tmp
6
+ - cd /tmp/beanstalkd-1.9/
7
+ - make
8
+ - ./beanstalkd &
9
+ - cd $TRAVIS_BUILD_DIR
10
+ script:
11
+ - bundle install
12
+ - bundle exec rspec
data/Gemfile CHANGED
@@ -3,14 +3,8 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in quebert.gemspec
4
4
  gemspec
5
5
 
6
- group :development do
7
- gem 'system_timer', :require => false, :platform => :ruby_18
8
- end
9
-
10
6
  group :test do
11
- # gem 'ruby-debug', :platform => :ruby_18
12
- # gem 'ruby-debug19', :platform => :ruby_19
13
- gem 'activerecord', '~> 2.3.0'
7
+ gem 'activerecord', '~> 4.0'
14
8
  gem 'sqlite3-ruby'
15
9
  gem 'guard-rspec'
16
10
  gem 'rb-fsevent'
data/lib/quebert.rb CHANGED
@@ -4,7 +4,6 @@ module Quebert
4
4
  autoload :Logging, 'quebert/logging'
5
5
  autoload :Serializer, 'quebert/serializer'
6
6
  autoload :Configuration, 'quebert/configuration'
7
- autoload :Timeout, 'quebert/timeout'
8
7
  autoload :Job, 'quebert/job'
9
8
  autoload :Controller, 'quebert/controller'
10
9
  autoload :Backend, 'quebert/backend'
@@ -23,11 +22,11 @@ module Quebert
23
22
  def backends
24
23
  @backends ||= Support::Registry.new
25
24
  end
26
-
25
+
27
26
  def serializers
28
27
  @serializers ||= Support::ClassRegistry.new
29
28
  end
30
-
29
+
31
30
  # Make this easier for elsewhere in the app
32
31
  def logger
33
32
  config.logger
@@ -39,9 +38,9 @@ module Quebert
39
38
  block.call
40
39
  end
41
40
  end
42
-
41
+
43
42
  # Register built-in Quebert backends
44
43
  Quebert.backends.register :beanstalk, Backend::Beanstalk
45
44
  Quebert.backends.register :in_process, Backend::InProcess
46
45
  Quebert.backends.register :sync, Backend::Sync
47
- end
46
+ end
@@ -5,17 +5,21 @@ module Quebert
5
5
 
6
6
  # Manage jobs on a Beanstalk queue out of process
7
7
  class Beanstalk
8
+ def initialize(host, tube_name)
9
+ @host, @tube_name = host, tube_name
10
+ end
11
+
8
12
  def put(job, *args)
9
13
  priority, delay, ttr = args
10
14
  opts = {}
11
15
  opts[:pri] = priority unless priority.nil?
12
16
  opts[:delay] = delay unless delay.nil?
13
17
  opts[:ttr] = ttr unless ttr.nil?
14
- @tube.put job.to_json, opts
18
+ tube.put job.to_json, opts
15
19
  end
16
20
 
17
21
  def reserve_without_controller(timeout=nil)
18
- @tube.reserve timeout
22
+ tube.reserve timeout
19
23
  end
20
24
 
21
25
  def reserve(timeout=nil)
@@ -23,7 +27,7 @@ module Quebert
23
27
  end
24
28
 
25
29
  def peek(state)
26
- @tube.peek state
30
+ tube.peek state
27
31
  end
28
32
 
29
33
  # For testing purposes... I think there's a better way to do this though.
@@ -35,19 +39,24 @@ module Quebert
35
39
  reserve_without_controller.delete
36
40
  end
37
41
  while peek(:buried) do
38
- @tube.kick
42
+ tube.kick
39
43
  reserve_without_controller.delete
40
44
  end
41
45
  end
42
46
 
43
- def initialize(host, tube)
44
- @pool = Beaneater::Pool.new Array(host)
45
- @tube = @pool.tubes[tube]
46
- end
47
47
  def self.configure(opts={})
48
48
  opts[:host] ||= ['127.0.0.1:11300']
49
49
  new(opts[:host], opts[:tube])
50
50
  end
51
+
52
+ private
53
+ def pool
54
+ @pool ||= Beaneater::Pool.new Array(@host)
55
+ end
56
+
57
+ def tube
58
+ @tube ||= pool.tubes[@tube_name]
59
+ end
51
60
  end
52
61
  end
53
62
  end
@@ -68,7 +68,7 @@ module Quebert
68
68
  log "Manually retrying with delay"
69
69
  retry_with_delay
70
70
  rescue Exception => e
71
- log "Exception caught on perform. Burrying job. #{e.inspect}", :error
71
+ log "Exception caught on perform. Burying job. #{e.inspect} #{e.backtrace.join("\n")}", :error
72
72
  beanstalk_job.bury
73
73
  log "Job buried", :error
74
74
  raise e
@@ -89,7 +89,7 @@ module Quebert
89
89
  beanstalk_job.release :pri => @job.priority, :delay => delay
90
90
  log "Job released"
91
91
  end
92
- rescue ::Beaneater::NotFoundError => e
92
+ rescue ::Beaneater::NotFoundError
93
93
  log "Job ran longer than allowed. Beanstalk already deleted it!!!!", :error
94
94
  # Sometimes the timer doesn't behave correctly and this job actually runs longer than
95
95
  # allowed. At that point the beanstalk job no longer exists anymore. Lets let it go and don't blow up.
@@ -102,4 +102,4 @@ module Quebert
102
102
  end
103
103
  end
104
104
  end
105
- end
105
+ end
data/lib/quebert/job.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'timeout'
2
3
 
3
4
  module Quebert
4
5
  class Job
@@ -53,7 +54,7 @@ module Quebert
53
54
  # Honor the timeout and kill the job in ruby-space. Beanstalk
54
55
  # should be cleaning up this job and returning it to the queue
55
56
  # as well.
56
- Quebert::Timeout.timeout(@ttr, Job::Timeout){ perform(*args) }
57
+ ::Timeout.timeout(@ttr, Job::Timeout){ perform(*args) }
57
58
  end
58
59
 
59
60
  # Accepts arguments that override the job options and enqueu this stuff.
@@ -58,7 +58,7 @@ module Quebert
58
58
  hash[attr] = val
59
59
  hash
60
60
  end
61
- { 'model' => record.class.model_name, 'attributes' => attrs }
61
+ { 'model' => record.class.model_name.to_s, 'attributes' => attrs }
62
62
  end
63
63
 
64
64
  def self.deserialize(hash)
@@ -83,4 +83,4 @@ module Quebert
83
83
  end
84
84
 
85
85
  end
86
- end
86
+ end
@@ -1,3 +1,3 @@
1
1
  module Quebert
2
- VERSION = "2.0.2"
2
+ VERSION = "2.0.3"
3
3
  end
@@ -114,7 +114,7 @@ describe AsyncSender::ActiveRecord do
114
114
  it "should async_send and successfully serialize param object" do
115
115
  user = User.new(:first_name => 'Brad')
116
116
  user2 = User.new(:first_name => 'Steel')
117
- user.async.email(user2)
117
+ user.async.email!(user2)
118
118
  @q.reserve.perform.first_name.should eql('Steel')
119
119
  end
120
- end
120
+ end
@@ -10,9 +10,9 @@ describe Configuration do
10
10
  backend = @config.backend
11
11
  backend.should be_instance_of(Quebert::Backend::Beanstalk)
12
12
  # Blech, gross nastiness in their lib, but we need to look in to see if this stuff as configed
13
- pool = backend.instance_variable_get('@pool')
13
+ pool = backend.send(:pool)
14
14
  pool.connections.first.address.should eql('localhost:11300')
15
- tube = backend.instance_variable_get('@tube')
15
+ tube = backend.send(:tube)
16
16
  tube.name.should eql('quebert-config-test')
17
17
  end
18
18
 
@@ -89,11 +89,11 @@ describe Controller::Beanstalk do
89
89
  sleep(3)
90
90
 
91
91
  # lets set the max retry delay so it should bury instead of delay
92
- Quebert::Controller::Beanstalk::MAX_TIMEOUT_RETRY_DELAY = 1
92
+ redefine_constant Quebert::Controller::Beanstalk, :MAX_TIMEOUT_RETRY_DELAY, 1
93
93
  lambda{@q.reserve.perform}.should raise_exception(Quebert::Job::Timeout)
94
94
 
95
95
  @q.peek(:ready).should be_nil
96
96
  @q.peek(:delayed).should be_nil
97
97
  @q.peek(:buried).should_not be_nil
98
98
  end
99
- end
99
+ end
data/spec/job_spec.rb CHANGED
@@ -109,7 +109,7 @@ describe Quebert::Job do
109
109
  describe "async promise DSL" do
110
110
  it "should enqueue and honor beanstalk options" do
111
111
  user = User.new(:first_name => "Steel")
112
- user.async(:priority => 1, :delay => 2, :ttr => 300).email("somebody", nil, nil)
112
+ user.async(:priority => 1, :delay => 2, :ttr => 300).email!("somebody", nil, nil)
113
113
  job = @q.reserve
114
114
  job.beanstalk_job.pri.should eql(1)
115
115
  job.beanstalk_job.delay.should eql(2)
@@ -128,7 +128,7 @@ describe Quebert::Job do
128
128
  describe "legacy async_send" do
129
129
  it "should enqueue and honor beanstalk options" do
130
130
  user = User.new(:first_name => "Steel")
131
- user.async_send(:email, "somebody", nil, nil, :beanstalk => {:priority => 1, :delay => 2, :ttr => 300})
131
+ user.async_send(:email!, "somebody", nil, nil, :beanstalk => {:priority => 1, :delay => 2, :ttr => 300})
132
132
  job = @q.reserve
133
133
  job.beanstalk_job.pri.should eql(1)
134
134
  job.beanstalk_job.delay.should eql(2)
@@ -153,4 +153,4 @@ describe Quebert::Job do
153
153
  }.should raise_exception(Quebert::Job::Timeout)
154
154
  end
155
155
  end
156
- end
156
+ end
@@ -90,4 +90,4 @@ describe Serializer::Job do
90
90
  deserialized.ttr.should eql(300)
91
91
  end
92
92
  end
93
- end
93
+ end
data/spec/spec_helper.rb CHANGED
@@ -22,6 +22,11 @@ def clean_file(path, contents=nil, &block)
22
22
  end
23
23
  end
24
24
 
25
+ def redefine_constant(obj, const, value)
26
+ obj.send(:remove_const, const) if obj.const_defined?(const)
27
+ obj.const_set(const, value)
28
+ end
29
+
25
30
  Dir[File.join(File.dirname(__FILE__), 'support/*.rb')].each {|file| require file }
26
31
 
27
- Quebert.serializers.register 'ActiveRecord::Base', Serializer::ActiveRecord
32
+ Quebert.serializers.register 'ActiveRecord::Base', Serializer::ActiveRecord
@@ -24,7 +24,7 @@ class User < ActiveRecord::Base
24
24
  address
25
25
  end
26
26
 
27
- def email(address)
27
+ def email!(address)
28
28
  address
29
29
  end
30
- end
30
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quebert
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
5
- prerelease:
4
+ version: 2.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brad Gessler
@@ -11,42 +10,50 @@ authors:
11
10
  autorequire:
12
11
  bindir: bin
13
12
  cert_chain: []
14
- date: 2013-10-29 00:00:00.000000000 -07:00
15
- default_executable:
13
+ date: 2014-07-18 00:00:00.000000000 Z
16
14
  dependencies:
17
15
  - !ruby/object:Gem::Dependency
18
16
  name: json
19
- requirement: &70292801264260 !ruby/object:Gem::Requirement
20
- none: false
17
+ requirement: !ruby/object:Gem::Requirement
21
18
  requirements:
22
- - - ! '>='
19
+ - - '>='
23
20
  - !ruby/object:Gem::Version
24
21
  version: '0'
25
22
  type: :runtime
26
23
  prerelease: false
27
- version_requirements: *70292801264260
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - '>='
27
+ - !ruby/object:Gem::Version
28
+ version: '0'
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: beaneater
30
- requirement: &70292801263460 !ruby/object:Gem::Requirement
31
- none: false
31
+ requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ! '>='
33
+ - - '>='
34
34
  - !ruby/object:Gem::Version
35
35
  version: '0'
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *70292801263460
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0'
39
43
  - !ruby/object:Gem::Dependency
40
44
  name: rspec
41
- requirement: &70292801262540 !ruby/object:Gem::Requirement
42
- none: false
45
+ requirement: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - =
47
+ - - '='
45
48
  - !ruby/object:Gem::Version
46
49
  version: 2.7.0
47
50
  type: :development
48
51
  prerelease: false
49
- version_requirements: *70292801262540
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - '='
55
+ - !ruby/object:Gem::Version
56
+ version: 2.7.0
50
57
  description: A worker queue framework built around beanstalkd
51
58
  email:
52
59
  - brad@bradgessler.com
@@ -89,7 +96,6 @@ files:
89
96
  - lib/quebert/support.rb
90
97
  - lib/quebert/support/pid_file.rb
91
98
  - lib/quebert/support/registry.rb
92
- - lib/quebert/timeout.rb
93
99
  - lib/quebert/version.rb
94
100
  - lib/quebert/worker.rb
95
101
  - quebert.gemspec
@@ -106,30 +112,28 @@ files:
106
112
  - spec/support/jobs.rb
107
113
  - spec/support_spec.rb
108
114
  - spec/worker_spec.rb
109
- has_rdoc: true
110
115
  homepage: http://github.com/polleverywhere/quebert
111
116
  licenses: []
117
+ metadata: {}
112
118
  post_install_message:
113
119
  rdoc_options: []
114
120
  require_paths:
115
121
  - lib
116
122
  required_ruby_version: !ruby/object:Gem::Requirement
117
- none: false
118
123
  requirements:
119
- - - ! '>='
124
+ - - '>='
120
125
  - !ruby/object:Gem::Version
121
126
  version: '0'
122
127
  required_rubygems_version: !ruby/object:Gem::Requirement
123
- none: false
124
128
  requirements:
125
- - - ! '>='
129
+ - - '>='
126
130
  - !ruby/object:Gem::Version
127
131
  version: '0'
128
132
  requirements: []
129
133
  rubyforge_project: quebert
130
- rubygems_version: 1.3.9.5
134
+ rubygems_version: 2.2.0
131
135
  signing_key:
132
- specification_version: 3
136
+ specification_version: 4
133
137
  summary: A worker queue framework built around beanstalkd
134
138
  test_files:
135
139
  - spec/async_sender_spec.rb
@@ -1,12 +0,0 @@
1
- # Setup a namespaced Quebert::Timeout class that will deal with responsible folks in
2
- # 1.8.7 who use the SystemTimer gem.
3
- module Quebert
4
- Timeout = begin
5
- require 'system_timer'
6
- ::SystemTimer
7
- rescue LoadError
8
- # Install the system_timer gem if you're running this in Ruby 1.8.7!
9
- require 'timeout'
10
- ::Timeout
11
- end
12
- end