quebert 0.0.6 → 0.0.8

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.
data/Gemfile CHANGED
@@ -4,10 +4,10 @@ gem 'json'
4
4
  gem 'beanstalk-client'
5
5
 
6
6
  group :test do
7
- gem 'rspec'
7
+ gem 'rspec', '1.3.0', :require => nil
8
8
  gem 'ZenTest'
9
9
  gem 'ruby-debug'
10
- gem 'activerecord'
10
+ gem 'activerecord', '2.3.5'
11
11
  gem 'sqlite3-ruby'
12
12
  gem 'autotest-fsevent'
13
13
  end
data/README.rdoc CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  async_observer is great, but is dated and doesn't really support running jobs outside of the async_send idiom. Quebert is an attempt to mix how jobs are run in other popular worker queue frameworks, like resque and dj, with async_observer so that you can have it both ways.
4
4
 
5
+ Quebert is a serious project. Its used in a production environment at Poll Everywhere to handle everything from SMS message processing to account downgrades.
6
+
5
7
  A worker queue framework designed around Beanstalk. Features include:
6
8
 
7
9
  = Features
data/Rakefile CHANGED
@@ -31,8 +31,6 @@ Spec::Rake::SpecTask.new(:rcov) do |spec|
31
31
  spec.rcov = true
32
32
  end
33
33
 
34
- task :spec => :check_dependencies
35
-
36
34
  task :default => :spec
37
35
 
38
36
  require 'rake/rdoctask'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.6
1
+ 0.0.8
@@ -4,7 +4,7 @@ module Quebert
4
4
  # I'm not sure if I want to do this or build serializers per type of object...
5
5
  module ActiveRecord
6
6
  class RecordJob < Job
7
- def perform(record, meth, args)
7
+ def perform(record, meth, *args)
8
8
  record.send(meth, *args)
9
9
  end
10
10
  end
@@ -17,7 +17,7 @@ module Quebert
17
17
  module InstanceMethods
18
18
  # The meat of dealing with ActiveRecord instances.
19
19
  def async_send(meth, *args)
20
- RecordJob.new(self, meth, args).enqueue
20
+ RecordJob.new(self, meth, *args).enqueue
21
21
  end
22
22
  end
23
23
  end
@@ -3,7 +3,7 @@ module Quebert
3
3
  # Perform jobs on instances of classes
4
4
  module Instance
5
5
  class InstanceJob < Job
6
- def perform(klass, init_args, meth, args)
6
+ def perform(klass, init_args, meth, *args)
7
7
  Support.constantize(klass).new(init_args).send(meth, *args)
8
8
  end
9
9
  end
@@ -44,7 +44,7 @@ module Quebert
44
44
  end
45
45
 
46
46
  def async_send(meth, *args)
47
- InstanceJob.new(self.class.name, @_init_args, meth, args).enqueue
47
+ InstanceJob.new(self.class.name, @_init_args, meth, *args).enqueue
48
48
  end
49
49
  end
50
50
  end
@@ -3,7 +3,7 @@ module Quebert
3
3
  # Perform jobs on Object methods (not instances)
4
4
  module Object
5
5
  class ObjectJob < Job
6
- def perform(const, meth, args)
6
+ def perform(const, meth, *args)
7
7
  Support.constantize(const).send(meth, *args)
8
8
  end
9
9
  end
@@ -14,7 +14,7 @@ module Quebert
14
14
 
15
15
  module ClassMethods
16
16
  def async_send(meth, *args)
17
- ObjectJob.new(self.name, meth, args).enqueue
17
+ ObjectJob.new(self.name, meth, *args).enqueue
18
18
  end
19
19
  end
20
20
  end
@@ -5,8 +5,8 @@ module Quebert
5
5
 
6
6
  # Manage jobs on a Beanstalk queue out of process
7
7
  class Beanstalk < Beanstalk::Pool
8
- def put(job)
9
- super job.to_json
8
+ def put(job, *args)
9
+ super job.to_json, *args
10
10
  end
11
11
 
12
12
  def reserve_with_controller
@@ -2,7 +2,7 @@ module Quebert
2
2
  module Backend
3
3
  # Drops jobs on an array in-process.
4
4
  class InProcess < Array
5
- def put(job)
5
+ def put(job, *args)
6
6
  unshift job.to_json
7
7
  end
8
8
 
@@ -4,7 +4,7 @@ module Quebert
4
4
  # or could be used as a fallback if other backends fail to initialize
5
5
  class Sync
6
6
  def put(job, *args)
7
- Controller::Base.new(job).perform
7
+ Controller::Base.new(Job.from_json(job.to_json)).perform
8
8
  end
9
9
  end
10
10
  end
@@ -6,7 +6,19 @@ module Quebert
6
6
 
7
7
  def initialize(beanstalk_job, queue)
8
8
  @beanstalk_job, @queue = beanstalk_job, queue
9
- @job = Job.from_json(beanstalk_job.body)
9
+
10
+ begin
11
+ @job = Job.from_json(beanstalk_job.body)
12
+ rescue Job::Delete
13
+ beanstalk_job.delete
14
+ rescue Job::Release
15
+ beanstalk_job.release nil, @job.delay
16
+ rescue Job::Bury
17
+ beanstalk_job.bury
18
+ rescue Exception => e
19
+ beanstalk_job.bury
20
+ raise e
21
+ end
10
22
  end
11
23
 
12
24
  def perform
@@ -17,7 +29,7 @@ module Quebert
17
29
  rescue Job::Delete
18
30
  beanstalk_job.delete
19
31
  rescue Job::Release
20
- beanstalk_job.release
32
+ beanstalk_job.release nil, @job.delay
21
33
  rescue Job::Bury
22
34
  beanstalk_job.bury
23
35
  rescue Exception => e
data/lib/quebert/job.rb CHANGED
@@ -3,7 +3,12 @@ require 'json'
3
3
  module Quebert
4
4
  class Job
5
5
  attr_reader :args
6
+ attr_accessor :priority, :delay, :ttr
6
7
 
8
+ DEFAULT_JOB_PRIORITY = 65536
9
+ DEFAULT_JOB_DELAY = 0
10
+ DEFAULT_JOB_TTR = 120
11
+
7
12
  NotImplemented = Class.new(StandardError)
8
13
 
9
14
  Action = Class.new(Exception)
@@ -13,6 +18,23 @@ module Quebert
13
18
  Release = Class.new(Action)
14
19
 
15
20
  def initialize(*args)
21
+ opts = args.last.is_a?(::Hash) ? args.pop : nil
22
+
23
+ @priority = DEFAULT_JOB_PRIORITY
24
+ @delay = DEFAULT_JOB_DELAY
25
+ @ttr = DEFAULT_JOB_TTR
26
+
27
+ if opts
28
+ beanstalk_opts = opts.delete(:beanstalk)
29
+ args << opts unless opts.empty?
30
+
31
+ if beanstalk_opts
32
+ @priority = beanstalk_opts[:priority] if beanstalk_opts[:priority]
33
+ @delay = beanstalk_opts[:delay] if beanstalk_opts[:delay]
34
+ @ttr = beanstalk_opts[:ttr] if beanstalk_opts[:ttr]
35
+ end
36
+ end
37
+
16
38
  @args = args.dup.freeze
17
39
  end
18
40
 
@@ -26,7 +48,7 @@ module Quebert
26
48
  end
27
49
 
28
50
  def enqueue
29
- self.class.backend.put self
51
+ self.class.backend.put self, @priority, @delay, @ttr
30
52
  end
31
53
 
32
54
  def to_json
@@ -6,13 +6,20 @@ module Quebert
6
6
  def self.serialize(job)
7
7
  {
8
8
  'job' => job.class.name,
9
- 'args' => serialize_args(job.args)
9
+ 'args' => serialize_args(job.args),
10
+ 'priority' => job.priority,
11
+ 'delay' => job.delay,
12
+ 'ttr' => job.ttr
10
13
  }
11
14
  end
12
15
 
13
16
  def self.deserialize(hash)
14
17
  hash = Support.stringify_keys(hash)
15
- Support.constantize(hash['job']).new(*deserialize_args(hash['args']))
18
+ job = Support.constantize(hash['job']).new(*deserialize_args(hash['args']))
19
+ job.priority = hash['priority']
20
+ job.delay = hash['delay']
21
+ job.ttr = hash['ttr']
22
+ job
16
23
  end
17
24
 
18
25
  private
@@ -58,7 +65,7 @@ module Quebert
58
65
  hash = Support.stringify_keys(hash)
59
66
  model = Support.constantize(hash.delete('model'))
60
67
  if attrs = Support.stringify_keys(hash.delete('attributes'))
61
- if id = hash.delete('id')
68
+ if id = attrs.delete('id')
62
69
  # This has been persisited, so just find it from the db
63
70
  model.find(id)
64
71
  else
@@ -15,7 +15,8 @@ module Quebert
15
15
  logger.info "Worker pid##{Process.pid} started with #{backend.class.name} backend"
16
16
  while controller = backend.reserve do
17
17
  begin
18
- log controller.job, "performing with args #{controller.job.args.inspect}"
18
+ log controller.job, "performing with args #{controller.job.args.inspect}."
19
+ log controller.job, "Priority: #{controller.beanstalk_job.pri}, Delay: #{controller.beanstalk_job.delay}, TTR: #{controller.beanstalk_job.ttr}" if controller.respond_to?(:beanstalk_job)
19
20
  controller.perform
20
21
  log controller.job, "complete"
21
22
  rescue Exception => e
data/quebert.gemspec CHANGED
@@ -1,88 +1,86 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{quebert}
8
- s.version = "0.0.6"
8
+ s.version = "0.0.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Brad Gessler"]
12
- s.date = %q{2010-10-11}
12
+ s.date = %q{2011-09-16}
13
13
  s.default_executable = %q{quebert}
14
14
  s.description = %q{A worker queue framework built around beanstalkd}
15
15
  s.email = %q{brad@bradgessler.com}
16
16
  s.executables = ["quebert"]
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE",
19
- "README.rdoc"
19
+ "README.rdoc"
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
- ".gitignore",
24
- "Gemfile",
25
- "LICENSE",
26
- "README.rdoc",
27
- "Rakefile",
28
- "VERSION",
29
- "bin/quebert",
30
- "lib/quebert.rb",
31
- "lib/quebert/async_sender.rb",
32
- "lib/quebert/async_sender/active_record.rb",
33
- "lib/quebert/async_sender/class.rb",
34
- "lib/quebert/async_sender/instance.rb",
35
- "lib/quebert/async_sender/object.rb",
36
- "lib/quebert/backend.rb",
37
- "lib/quebert/backend/beanstalk.rb",
38
- "lib/quebert/backend/in_process.rb",
39
- "lib/quebert/backend/sync.rb",
40
- "lib/quebert/command_line_runner.rb",
41
- "lib/quebert/configuration.rb",
42
- "lib/quebert/controller.rb",
43
- "lib/quebert/controller/base.rb",
44
- "lib/quebert/controller/beanstalk.rb",
45
- "lib/quebert/job.rb",
46
- "lib/quebert/serializer.rb",
47
- "lib/quebert/support.rb",
48
- "lib/quebert/support/pid_file.rb",
49
- "lib/quebert/support/registry.rb",
50
- "lib/quebert/worker.rb",
51
- "quebert.gemspec",
52
- "spec/async_sender_spec.rb",
53
- "spec/backend_spec.rb",
54
- "spec/command_line_runner_spec.rb",
55
- "spec/configuration_spec.rb",
56
- "spec/consumer_spec.rb",
57
- "spec/job_spec.rb",
58
- "spec/quebert_spec.rb",
59
- "spec/serializer_spec.rb",
60
- "spec/spec.opts",
61
- "spec/spec_helper.rb",
62
- "spec/support/active_record.rb",
63
- "spec/support/jobs.rb",
64
- "spec/support_spec.rb",
65
- "spec/worker_spec.rb"
23
+ "Gemfile",
24
+ "LICENSE",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/quebert",
29
+ "lib/quebert.rb",
30
+ "lib/quebert/async_sender.rb",
31
+ "lib/quebert/async_sender/active_record.rb",
32
+ "lib/quebert/async_sender/class.rb",
33
+ "lib/quebert/async_sender/instance.rb",
34
+ "lib/quebert/async_sender/object.rb",
35
+ "lib/quebert/backend.rb",
36
+ "lib/quebert/backend/beanstalk.rb",
37
+ "lib/quebert/backend/in_process.rb",
38
+ "lib/quebert/backend/sync.rb",
39
+ "lib/quebert/command_line_runner.rb",
40
+ "lib/quebert/configuration.rb",
41
+ "lib/quebert/controller.rb",
42
+ "lib/quebert/controller/base.rb",
43
+ "lib/quebert/controller/beanstalk.rb",
44
+ "lib/quebert/job.rb",
45
+ "lib/quebert/serializer.rb",
46
+ "lib/quebert/support.rb",
47
+ "lib/quebert/support/pid_file.rb",
48
+ "lib/quebert/support/registry.rb",
49
+ "lib/quebert/worker.rb",
50
+ "quebert.gemspec",
51
+ "spec/async_sender_spec.rb",
52
+ "spec/backend_spec.rb",
53
+ "spec/command_line_runner_spec.rb",
54
+ "spec/configuration_spec.rb",
55
+ "spec/consumer_spec.rb",
56
+ "spec/job_spec.rb",
57
+ "spec/quebert_spec.rb",
58
+ "spec/serializer_spec.rb",
59
+ "spec/spec.opts",
60
+ "spec/spec_helper.rb",
61
+ "spec/support/active_record.rb",
62
+ "spec/support/jobs.rb",
63
+ "spec/support_spec.rb",
64
+ "spec/worker_spec.rb"
66
65
  ]
67
66
  s.homepage = %q{http://github.com/bradgessler/quebert}
68
- s.rdoc_options = ["--charset=UTF-8"]
69
67
  s.require_paths = ["lib"]
70
68
  s.rubygems_version = %q{1.3.7}
71
69
  s.summary = %q{A worker queue framework built around beanstalkd}
72
70
  s.test_files = [
73
71
  "spec/async_sender_spec.rb",
74
- "spec/backend_spec.rb",
75
- "spec/command_line_runner_spec.rb",
76
- "spec/configuration_spec.rb",
77
- "spec/consumer_spec.rb",
78
- "spec/job_spec.rb",
79
- "spec/quebert_spec.rb",
80
- "spec/serializer_spec.rb",
81
- "spec/spec_helper.rb",
82
- "spec/support/active_record.rb",
83
- "spec/support/jobs.rb",
84
- "spec/support_spec.rb",
85
- "spec/worker_spec.rb"
72
+ "spec/backend_spec.rb",
73
+ "spec/command_line_runner_spec.rb",
74
+ "spec/configuration_spec.rb",
75
+ "spec/consumer_spec.rb",
76
+ "spec/job_spec.rb",
77
+ "spec/quebert_spec.rb",
78
+ "spec/serializer_spec.rb",
79
+ "spec/spec_helper.rb",
80
+ "spec/support/active_record.rb",
81
+ "spec/support/jobs.rb",
82
+ "spec/support_spec.rb",
83
+ "spec/worker_spec.rb"
86
84
  ]
87
85
 
88
86
  if s.respond_to? :specification_version then
@@ -90,15 +88,21 @@ Gem::Specification.new do |s|
90
88
  s.specification_version = 3
91
89
 
92
90
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
91
+ s.add_runtime_dependency(%q<json>, [">= 0"])
92
+ s.add_runtime_dependency(%q<beanstalk-client>, [">= 0"])
93
93
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
94
94
  s.add_runtime_dependency(%q<json>, [">= 0"])
95
95
  s.add_runtime_dependency(%q<beanstalk-client>, [">= 0"])
96
96
  else
97
+ s.add_dependency(%q<json>, [">= 0"])
98
+ s.add_dependency(%q<beanstalk-client>, [">= 0"])
97
99
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
98
100
  s.add_dependency(%q<json>, [">= 0"])
99
101
  s.add_dependency(%q<beanstalk-client>, [">= 0"])
100
102
  end
101
103
  else
104
+ s.add_dependency(%q<json>, [">= 0"])
105
+ s.add_dependency(%q<beanstalk-client>, [">= 0"])
102
106
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
103
107
  s.add_dependency(%q<json>, [">= 0"])
104
108
  s.add_dependency(%q<beanstalk-client>, [">= 0"])
@@ -79,4 +79,10 @@ describe AsyncSender::ActiveRecord do
79
79
  @q.reserve.perform.should eql(email)
80
80
  end
81
81
 
82
+ it "should async_send and successfully serialize param object" do
83
+ user = User.new(:first_name => 'Brad')
84
+ user2 = User.new(:first_name => 'Steel')
85
+ user.async_send(:email, user2)
86
+ @q.reserve.perform.first_name.should eql('Steel')
87
+ end
82
88
  end
@@ -38,6 +38,15 @@ describe Controller::Beanstalk do
38
38
  @q.peek_buried.should_not be_nil
39
39
  end
40
40
 
41
+ it "should bury an AR job if an exception occurs deserializing it" do
42
+ @user = User.new(:first_name => "John", :last_name => "Doe", :email => "jdoe@gmail.com")
43
+ @user.id = 1
44
+ @q.put Serializer::ActiveRecord.serialize(@user)
45
+ @q.peek_ready.should_not be_nil
46
+ lambda{ @q.reserve.perform }.should raise_exception
47
+ @q.peek_buried.should_not be_nil
48
+ end
49
+
41
50
  context "job actions" do
42
51
  it "should delete job" do
43
52
  @q.put DeleteJob.new
data/spec/job_spec.rb CHANGED
@@ -55,6 +55,35 @@ describe Quebert::Job do
55
55
  Adder.new(1,2,3).enqueue
56
56
  }.should change(@q, :size).by(1)
57
57
  end
58
- end
59
-
58
+
59
+ context "beanstalk backend" do
60
+ before(:all) do
61
+ Quebert.serializers.register 'ActiveRecord::Base', Serializer::ActiveRecord
62
+
63
+ @q = Backend::Beanstalk.new('localhost:11300','quebert-test')
64
+
65
+ Quebert::AsyncSender::ActiveRecord::RecordJob.backend = @q
66
+ Quebert::AsyncSender::Object::ObjectJob.backend = @q
67
+
68
+ @q.drain!
69
+ end
70
+
71
+ it "should enqueue and honor beanstalk options" do
72
+ user = User.new(:first_name => "Steel")
73
+ user.async_send(:email, "somebody", nil, nil, :beanstalk => {:priority => 1, :delay => 2, :ttr => 300})
74
+ job = @q.reserve
75
+ job.beanstalk_job.pri.should eql(1)
76
+ job.beanstalk_job.delay.should eql(2)
77
+ job.beanstalk_job.ttr.should eql(300)
78
+ end
79
+
80
+ it "should enqueue and honor beanstalk options" do
81
+ User.async_send(:emailizer, "somebody", nil, nil, :beanstalk => {:priority => 1, :delay => 2, :ttr => 300})
82
+ job = @q.reserve
83
+ job.beanstalk_job.pri.should eql(1)
84
+ job.beanstalk_job.delay.should eql(2)
85
+ job.beanstalk_job.ttr.should eql(300)
86
+ end
87
+ end
88
+ end
60
89
  end
@@ -16,6 +16,7 @@ describe Serializer::ActiveRecord do
16
16
  it "should deserialize" do
17
17
  u = Serializer::ActiveRecord.deserialize(Serializer::ActiveRecord.serialize(@user))
18
18
  u.first_name.should eql('Tom')
19
+ u.id.should eql(@user.id)
19
20
  end
20
21
  end
21
22
 
@@ -40,7 +41,7 @@ end
40
41
 
41
42
  describe Serializer::Job do
42
43
  before(:all) do
43
- @args = [100, User.new(:first_name => 'Brad')]
44
+ @args = [100, User.new(:first_name => 'Brad'), {:beanstalk => {:priority => 1, :delay => 2, :ttr => 300}}]
44
45
  @job = Job.new(*@args)
45
46
  end
46
47
 
@@ -50,11 +51,17 @@ describe Serializer::Job do
50
51
  h['args'][0]['payload'].should eql(100)
51
52
  h['args'][1]['payload'].should eql(Serializer::ActiveRecord.serialize(@args[1]))
52
53
  h['args'][1]['serializer'].should eql('Quebert::Serializer::ActiveRecord')
54
+ h['priority'].should eql(1)
55
+ h['delay'].should eql(2)
56
+ h['ttr'].should eql(300)
53
57
  end
54
58
 
55
59
  it "should deserialize job" do
56
60
  job = Serializer::Job.deserialize(Serializer::Job.serialize(@job))
57
61
  job.args[0].should eql(100)
58
62
  job.args[1].first_name.should eql('Brad')
63
+ job.delay.should eql(2)
64
+ job.priority.should eql(1)
65
+ job.ttr.should eql(300)
59
66
  end
60
67
  end
@@ -23,4 +23,8 @@ class User < ActiveRecord::Base
23
23
  def self.emailizer(address)
24
24
  address
25
25
  end
26
+
27
+ def email(address)
28
+ address
29
+ end
26
30
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quebert
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 6
10
- version: 0.0.6
9
+ - 8
10
+ version: 0.0.8
11
11
  platform: ruby
12
12
  authors:
13
13
  - Brad Gessler
@@ -15,13 +15,39 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-11 00:00:00 -07:00
18
+ date: 2011-09-16 00:00:00 -07:00
19
19
  default_executable: quebert
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: rspec
23
- prerelease: false
24
22
  requirement: &id001 !ruby/object:Gem::Requirement
23
+ none: false
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ hash: 3
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ name: json
33
+ prerelease: false
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ hash: 3
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :runtime
46
+ name: beanstalk-client
47
+ prerelease: false
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ requirement: &id003 !ruby/object:Gem::Requirement
25
51
  none: false
26
52
  requirements:
27
53
  - - ">="
@@ -33,11 +59,11 @@ dependencies:
33
59
  - 9
34
60
  version: 1.2.9
35
61
  type: :development
36
- version_requirements: *id001
37
- - !ruby/object:Gem::Dependency
38
- name: json
62
+ name: rspec
39
63
  prerelease: false
40
- requirement: &id002 !ruby/object:Gem::Requirement
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ requirement: &id004 !ruby/object:Gem::Requirement
41
67
  none: false
42
68
  requirements:
43
69
  - - ">="
@@ -47,11 +73,11 @@ dependencies:
47
73
  - 0
48
74
  version: "0"
49
75
  type: :runtime
50
- version_requirements: *id002
51
- - !ruby/object:Gem::Dependency
52
- name: beanstalk-client
76
+ name: json
53
77
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ requirement: &id005 !ruby/object:Gem::Requirement
55
81
  none: false
56
82
  requirements:
57
83
  - - ">="
@@ -61,7 +87,9 @@ dependencies:
61
87
  - 0
62
88
  version: "0"
63
89
  type: :runtime
64
- version_requirements: *id003
90
+ name: beanstalk-client
91
+ prerelease: false
92
+ version_requirements: *id005
65
93
  description: A worker queue framework built around beanstalkd
66
94
  email: brad@bradgessler.com
67
95
  executables:
@@ -73,7 +101,6 @@ extra_rdoc_files:
73
101
  - README.rdoc
74
102
  files:
75
103
  - .document
76
- - .gitignore
77
104
  - Gemfile
78
105
  - LICENSE
79
106
  - README.rdoc
@@ -121,8 +148,8 @@ homepage: http://github.com/bradgessler/quebert
121
148
  licenses: []
122
149
 
123
150
  post_install_message:
124
- rdoc_options:
125
- - --charset=UTF-8
151
+ rdoc_options: []
152
+
126
153
  require_paths:
127
154
  - lib
128
155
  required_ruby_version: !ruby/object:Gem::Requirement
data/.gitignore DELETED
@@ -1,22 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- Gemfile.lock
21
-
22
- ## PROJECT::SPECIFIC