job_boss 0.5.0 → 0.5.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. data/README.markdown +39 -7
  2. data/bin/job_boss +4 -2
  3. data/doc/ActiveSupport/TestCase.html +106 -87
  4. data/doc/ActiveSupport.html +6 -0
  5. data/doc/CreateJobs.html +17 -5
  6. data/doc/DaemonTest.html +6 -0
  7. data/doc/Gemfile.html +128 -0
  8. data/doc/JobBoss/Boss.html +193 -144
  9. data/doc/JobBoss/Config.html +8 -2
  10. data/doc/JobBoss/Job.html +224 -166
  11. data/doc/JobBoss/Queuer.html +25 -11
  12. data/doc/JobBoss.html +9 -0
  13. data/doc/MIT-LICENSE.html +137 -0
  14. data/doc/MathJobs.html +6 -0
  15. data/doc/Penguin.html +223 -0
  16. data/doc/Rakefile.html +6 -0
  17. data/doc/SleepJobs.html +6 -0
  18. data/doc/StringJobs.html +7 -1
  19. data/doc/bin/job_boss.html +3 -1
  20. data/doc/created.rid +17 -11
  21. data/doc/images/brick.png +0 -0
  22. data/doc/images/brick_link.png +0 -0
  23. data/doc/images/bug.png +0 -0
  24. data/doc/images/bullet_black.png +0 -0
  25. data/doc/images/bullet_toggle_minus.png +0 -0
  26. data/doc/images/bullet_toggle_plus.png +0 -0
  27. data/doc/images/date.png +0 -0
  28. data/doc/images/find.png +0 -0
  29. data/doc/images/loadingAnimation.gif +0 -0
  30. data/doc/images/macFFBgHack.png +0 -0
  31. data/doc/images/package.png +0 -0
  32. data/doc/images/page_green.png +0 -0
  33. data/doc/images/page_white_text.png +0 -0
  34. data/doc/images/page_white_width.png +0 -0
  35. data/doc/images/plugin.png +0 -0
  36. data/doc/images/ruby.png +0 -0
  37. data/doc/images/tag_green.png +0 -0
  38. data/doc/images/wrench.png +0 -0
  39. data/doc/images/wrench_orange.png +0 -0
  40. data/doc/images/zoom.png +0 -0
  41. data/doc/index.html +12 -0
  42. data/doc/init_rb.html +54 -0
  43. data/doc/js/darkfish.js +116 -0
  44. data/doc/js/jquery.js +32 -0
  45. data/doc/js/quicksearch.js +114 -0
  46. data/doc/js/thickbox-compressed.js +10 -0
  47. data/doc/lib/job_boss/boss_rb.html +1 -1
  48. data/doc/lib/job_boss/config_rb.html +1 -1
  49. data/doc/lib/job_boss/job_rb.html +1 -1
  50. data/doc/lib/job_boss/queuer_rb.html +1 -1
  51. data/doc/lib/job_boss_rb.html +56 -0
  52. data/doc/lib/migrate_rb.html +1 -1
  53. data/doc/test/app_root/app/jobs/string_jobs_rb.html +1 -1
  54. data/doc/test/app_root/app/models/penguin_rb.html +52 -0
  55. data/doc/test/app_root/config/environment_rb.html +56 -0
  56. data/doc/test/test_helper_rb.html +3 -1
  57. data/doc/test/unit/job_test_rb.html +2 -4
  58. data/job_boss.gemspec +1 -1
  59. data/lib/job_boss/config.rb +2 -2
  60. data/lib/job_boss/job.rb +22 -2
  61. data/lib/job_boss/queuer.rb +10 -2
  62. data/lib/migrate.rb +6 -0
  63. data/test/app_root/app/models/penguin.rb +9 -0
  64. data/test/app_root/config/database.yml +3 -3
  65. data/test/app_root/config/environment.rb +3 -0
  66. data/test/test_helper.rb +6 -4
  67. data/test/unit/job_test.rb +33 -17
  68. metadata +38 -9
@@ -0,0 +1,52 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
+
9
+ <title>File: penguin.rb [RDoc Documentation]</title>
10
+
11
+ <link type="text/css" media="screen" href="../../../../rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="../../../../js/jquery.js" type="text/javascript"
14
+ charset="utf-8"></script>
15
+ <script src="../../../../js/thickbox-compressed.js" type="text/javascript"
16
+ charset="utf-8"></script>
17
+ <script src="../../../../js/quicksearch.js" type="text/javascript"
18
+ charset="utf-8"></script>
19
+ <script src="../../../../js/darkfish.js" type="text/javascript"
20
+ charset="utf-8"></script>
21
+ </head>
22
+
23
+ <body class="file file-popup">
24
+ <div id="metadata">
25
+ <dl>
26
+ <dt class="modified-date">Last Modified</dt>
27
+ <dd class="modified-date">2010-12-11 14:25:33 -0500</dd>
28
+
29
+
30
+ <dt class="requires">Requires</dt>
31
+ <dd class="requires">
32
+ <ul>
33
+
34
+ </ul>
35
+ </dd>
36
+
37
+
38
+
39
+ </dl>
40
+ </div>
41
+
42
+ <div id="documentation">
43
+
44
+ <div class="description">
45
+ <h2>Description</h2>
46
+
47
+ </div>
48
+
49
+ </div>
50
+ </body>
51
+ </html>
52
+
@@ -0,0 +1,56 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
8
+
9
+ <title>File: environment.rb [RDoc Documentation]</title>
10
+
11
+ <link type="text/css" media="screen" href="../../../rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="../../../js/jquery.js" type="text/javascript"
14
+ charset="utf-8"></script>
15
+ <script src="../../../js/thickbox-compressed.js" type="text/javascript"
16
+ charset="utf-8"></script>
17
+ <script src="../../../js/quicksearch.js" type="text/javascript"
18
+ charset="utf-8"></script>
19
+ <script src="../../../js/darkfish.js" type="text/javascript"
20
+ charset="utf-8"></script>
21
+ </head>
22
+
23
+ <body class="file file-popup">
24
+ <div id="metadata">
25
+ <dl>
26
+ <dt class="modified-date">Last Modified</dt>
27
+ <dd class="modified-date">2010-12-11 16:42:13 -0500</dd>
28
+
29
+
30
+ <dt class="requires">Requires</dt>
31
+ <dd class="requires">
32
+ <ul>
33
+
34
+ <li>rubygems</li>
35
+
36
+ <li>active_record</li>
37
+
38
+ </ul>
39
+ </dd>
40
+
41
+
42
+
43
+ </dl>
44
+ </div>
45
+
46
+ <div id="documentation">
47
+
48
+ <div class="description">
49
+ <h2>Description</h2>
50
+
51
+ </div>
52
+
53
+ </div>
54
+ </body>
55
+ </html>
56
+
@@ -24,7 +24,7 @@
24
24
  <div id="metadata">
25
25
  <dl>
26
26
  <dt class="modified-date">Last Modified</dt>
27
- <dd class="modified-date">2010-11-28 17:50:45 -0500</dd>
27
+ <dd class="modified-date">2010-12-11 16:41:41 -0500</dd>
28
28
 
29
29
 
30
30
  <dt class="requires">Requires</dt>
@@ -41,6 +41,8 @@
41
41
 
42
42
  <li>active_support</li>
43
43
 
44
+ <li>active_record</li>
45
+
44
46
  </ul>
45
47
  </dd>
46
48
 
@@ -24,7 +24,7 @@
24
24
  <div id="metadata">
25
25
  <dl>
26
26
  <dt class="modified-date">Last Modified</dt>
27
- <dd class="modified-date">2010-11-28 17:55:00 -0500</dd>
27
+ <dd class="modified-date">2010-12-11 17:03:07 -0500</dd>
28
28
 
29
29
 
30
30
  <dt class="requires">Requires</dt>
@@ -35,9 +35,7 @@
35
35
 
36
36
  <li>active_record</li>
37
37
 
38
- <li>job_boss/boss</li>
39
-
40
- <li>job_boss/job</li>
38
+ <li>job_boss</li>
41
39
 
42
40
  </ul>
43
41
  </dd>
data/job_boss.gemspec CHANGED
@@ -4,7 +4,7 @@ $:.unshift lib unless $:.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "job_boss"
7
- s.version = '0.5.0'
7
+ s.version = '0.5.5'
8
8
  s.platform = Gem::Platform::RUBY
9
9
  s.authors = ["Brian Underwood"]
10
10
  s.email = ["ml+job_boss@semi-sentient.com"]
@@ -3,7 +3,7 @@ module JobBoss
3
3
  attr_accessor :application_root, :database_yaml_path, :log_path, :jobs_path, :sleep_interval, :employee_limit, :environment
4
4
 
5
5
  def parse_args(argv, options = {})
6
- @application_root = options[:working_dir] || Dir.pwd
6
+ @application_root = File.expand_path(options[:working_dir] || Dir.pwd)
7
7
  @database_yaml_path = 'config/database.yml'
8
8
  @log_path = 'log/job_boss.log'
9
9
  @jobs_path = 'app/jobs'
@@ -17,7 +17,7 @@ module JobBoss
17
17
  opts.banner = "Usage: job_boss [start|stop|restart|run|zap] [-- <options>]"
18
18
 
19
19
  opts.on("-r", "--application-root PATH", "Path for the application root upon which other paths depend (defaults to .)") do |path|
20
- @application_root = path
20
+ @application_root = File.expand_path(path)
21
21
  end
22
22
 
23
23
  opts.on("-d", "--database-yaml PATH", "Path for database YAML (defaults to <application-root>/#{@database_yaml_path})") do |path|
data/lib/job_boss/job.rb CHANGED
@@ -105,6 +105,10 @@ module JobBoss
105
105
 
106
106
  # How long did the job take?
107
107
  def time_taken
108
+ # If the #time_taken method is being called for but the job doesn't seem to have started/completed
109
+ # reload to see if it has
110
+ self.reload if started_at.nil? || completed_at.nil?
111
+
108
112
  completed_at - started_at if completed_at && started_at
109
113
  end
110
114
 
@@ -123,6 +127,9 @@ module JobBoss
123
127
  end
124
128
 
125
129
  class << self
130
+ # Given a job or an array of jobs
131
+ # Will cause the process to sleep until all specified jobs have completed
132
+ # sleep_interval specifies polling period
126
133
  def wait_for_jobs(jobs, sleep_interval = 0.5)
127
134
  jobs = [jobs] if jobs.is_a?(Job)
128
135
 
@@ -136,6 +143,9 @@ module JobBoss
136
143
  true
137
144
  end
138
145
 
146
+ # Given a job or an array of jobs
147
+ # Returns a hash where the keys are the job method arguments and the values are the
148
+ # results of the job processing
139
149
  def result_hash(jobs)
140
150
  jobs = [jobs] if jobs.is_a?(Job)
141
151
 
@@ -148,6 +158,12 @@ module JobBoss
148
158
  hash.merge(job.args => job.result)
149
159
  end
150
160
  end
161
+
162
+ # Given a time object
163
+ # Delete all jobs which were completed earlier than that time
164
+ def delete_jobs_before(time)
165
+ completed.where('completed_at < ?', time).delete_all
166
+ end
151
167
  end
152
168
 
153
169
  private
@@ -186,10 +202,14 @@ private
186
202
  controller_object = begin
187
203
  Kernel.const_get("#{controller.classify}Jobs").new
188
204
  rescue NameError
189
- raise ArgumentError, "Invalid controller"
205
+ begin
206
+ Kernel.const_get("#{controller.classify}")
207
+ rescue NameError
208
+ raise ArgumentError, "Invalid controller: #{controller}"
209
+ end
190
210
  end
191
211
 
192
- raise ArgumentError, "Invalid path action" unless controller_object.respond_to?(action)
212
+ raise ArgumentError, "Invalid path action: #{action}" unless controller_object.respond_to?(action)
193
213
 
194
214
  controller_object.send(action, *args)
195
215
  end
@@ -21,13 +21,21 @@ module JobBoss
21
21
  raise ArgumentError, "Invalid action"
22
22
  end
23
23
  else
24
- # Check to see if there's a jobs class
24
+ # Check to see if there's a class
25
25
  begin
26
+ # If we find a class that ends in "Jobs", we instanciate it and call an instance method
26
27
  @class = Kernel.const_get("#{method_name.classify}Jobs").new
27
28
 
28
29
  @controller = method_name
29
30
  rescue NameError
30
- raise ArgumentError, "Invalid controller"
31
+ begin
32
+ # If we don't find a class that ends in "Jobs", we're going to call a class method
33
+ @class = Kernel.const_get("#{method_name.classify}")
34
+
35
+ @controller = method_name
36
+ rescue
37
+ raise ArgumentError, "Invalid controller"
38
+ end
31
39
  end
32
40
 
33
41
  self
data/lib/migrate.rb CHANGED
@@ -21,6 +21,12 @@ class CreateJobs < ActiveRecord::Migration
21
21
 
22
22
  add_index :jobs, :path
23
23
  add_index :jobs, :status
24
+
25
+ postgres = (ActiveRecord::Base.connection.adapter_name == 'PostgreSQL')
26
+
27
+ ['started_at', 'cancelled_at', 'completed_at'].each do |field|
28
+ execute "CREATE INDEX IF NOT EXISTS jobs_#{field}_is_null ON jobs (#{field})" + (postgres ? " WHERE #{field} IS NULL" : '')
29
+ end
24
30
  end
25
31
 
26
32
  def self.down
@@ -0,0 +1,9 @@
1
+ class Penguin < ActiveRecord::Base
2
+ class << self
3
+ def snooze(time)
4
+ sleep(time)
5
+
6
+ "ZzZzZzzz"
7
+ end
8
+ end
9
+ end
@@ -2,7 +2,7 @@
2
2
  # gem install sqlite3-ruby (not necessary on OS X Leopard)
3
3
  development:
4
4
  adapter: sqlite3
5
- database: test/app_root/db/development.sqlite3
5
+ database: db/development.sqlite3
6
6
  pool: 5
7
7
  timeout: 10000
8
8
 
@@ -11,12 +11,12 @@ development:
11
11
  # Do not set this db to the same as development or production.
12
12
  test:
13
13
  adapter: sqlite3
14
- database: test/app_root/db/test.sqlite3
14
+ database: db/test.sqlite3
15
15
  pool: 5
16
16
  timeout: 10000
17
17
 
18
18
  production:
19
19
  adapter: sqlite3
20
- database: test/app_root/db/production.sqlite3
20
+ database: db/production.sqlite3
21
21
  pool: 5
22
22
  timeout: 10000
@@ -0,0 +1,3 @@
1
+ require 'rubygems'
2
+ require 'active_record'
3
+ require File.expand_path('../../app/models/penguin', __FILE__)
data/test/test_helper.rb CHANGED
@@ -6,6 +6,7 @@ require 'fileutils'
6
6
  FileUtils.cd(File.expand_path('../..', __FILE__))
7
7
 
8
8
  require 'active_support'
9
+ require 'active_record'
9
10
 
10
11
  class ActiveSupport::TestCase
11
12
  # Add more helper methods to be used by all tests here...
@@ -15,7 +16,8 @@ class ActiveSupport::TestCase
15
16
  teardown :stop_daemon
16
17
 
17
18
  def setup_paths
18
- @app_root_path = File.join('test', 'app_root')
19
+ @job_boss_bin_path = File.expand_path('../../bin/job_boss', __FILE__)
20
+ @app_root_path = File.expand_path('../app_root', __FILE__)
19
21
  @db_path = File.join(@app_root_path, 'db')
20
22
  @log_path = File.join(@app_root_path, 'log', 'job_boss.log')
21
23
  @db_yaml_path = File.join(@app_root_path, 'config', 'database.yml')
@@ -59,7 +61,7 @@ class ActiveSupport::TestCase
59
61
  '--' + key.to_s.gsub('_', '-') + " " + value.to_s
60
62
  end
61
63
 
62
- output = `bin/job_boss start -- #{option_string.join(' ')}`
64
+ output = `#{@job_boss_bin_path} start -- #{option_string.join(' ')}`
63
65
 
64
66
  @daemon_pid = get_pid_from_startup(output)
65
67
 
@@ -90,7 +92,7 @@ class ActiveSupport::TestCase
90
92
  end
91
93
 
92
94
  def stop_daemon
93
- `bin/job_boss stop`
95
+ `#{@job_boss_bin_path} stop`
94
96
 
95
97
  # Give the daemon a bit of time to stop
96
98
  # sleep(0.5)
@@ -100,7 +102,7 @@ class ActiveSupport::TestCase
100
102
  def restart_daemon
101
103
  assert_pid_running(@daemon_pid)
102
104
 
103
- output = `bin/job_boss restart`
105
+ output = `#{@job_boss_bin_path} restart`
104
106
 
105
107
  # Give the daemon a bit of time to stop
106
108
  # sleep(0.5)
@@ -1,8 +1,11 @@
1
1
  require 'test_helper'
2
2
  require 'active_record'
3
- require 'job_boss/boss'
4
- require 'job_boss/job'
5
- Dir.glob('test/app_root/app/jobs/*_jobs.rb').each {|lib| require lib }
3
+ require 'job_boss'
4
+
5
+ Dir.chdir('test/app_root')
6
+
7
+ Dir.glob('app/jobs/*_jobs.rb').each {|lib| require lib }
8
+ Dir.glob('app/models/*.rb').each {|lib| require lib }
6
9
 
7
10
  class DaemonTest < ActiveSupport::TestCase
8
11
  test "job queuing" do
@@ -16,22 +19,22 @@ class DaemonTest < ActiveSupport::TestCase
16
19
 
17
20
  # Test returning results from a number of jobs
18
21
  jobs = (0..10).collect do |i|
19
- JobBoss::Boss.queue.math.is_prime?(i)
22
+ Boss.queue.math.is_prime?(i)
20
23
  end
21
24
 
22
- JobBoss::Job.wait_for_jobs(jobs)
25
+ Job.wait_for_jobs(jobs)
23
26
 
24
- assert_equal 11, JobBoss::Job.completed.count
27
+ assert_equal 11, Job.completed.count
25
28
 
26
- JobBoss::Job.result_hash(jobs).each do |args, result|
29
+ Job.result_hash(jobs).each do |args, result|
27
30
  assert_equal MathJobs.new.is_prime?(args.first), result
28
31
  end
29
32
 
30
33
 
31
34
  # Test functions with multiple arguments and a complex return value (an Array in this case)
32
- job = JobBoss::Boss.queue.string.concatenate('test', 'of', 'concatenation')
33
- JobBoss::Job.wait_for_jobs(job)
34
- assert_equal 12, JobBoss::Job.completed.count
35
+ job = Boss.queue.string.concatenate('test', 'of', 'concatenation')
36
+ Job.wait_for_jobs(job)
37
+ assert_equal 12, Job.completed.count
35
38
 
36
39
  assert_equal ['testofconcatenation', 3], job.result
37
40
 
@@ -39,15 +42,25 @@ class DaemonTest < ActiveSupport::TestCase
39
42
  assert_nil job.error
40
43
 
41
44
 
45
+ job = Boss.queue.penguin.snooze(3)
46
+ time = Benchmark.realtime do
47
+ Job.wait_for_jobs(job)
48
+ end
49
+
50
+ assert_equal 13, Job.completed.count
51
+
52
+ assert job.time_taken > 3
53
+ assert_equal 'ZzZzZzzz', job.result
54
+
42
55
  # Test `queue_path` method
43
- job = JobBoss::Boss.queue_path('string#concatenate', 'test', 'of', 'concatenation')
44
- JobBoss::Job.wait_for_jobs(job)
45
- assert_equal 13, JobBoss::Job.completed.count
56
+ job = Boss.queue_path('string#concatenate', 'test', 'of', 'concatenation')
57
+ Job.wait_for_jobs(job)
58
+ assert_equal 14, Job.completed.count
46
59
 
47
60
  assert_equal ['testofconcatenation', 3], job.result
48
61
 
49
62
  # Test cancelling of a job
50
- job = JobBoss::Boss.queue.sleep.sleep_for(10)
63
+ job = Boss.queue.sleep.sleep_for(10)
51
64
 
52
65
  wait_until_job_assigned(job)
53
66
 
@@ -63,11 +76,14 @@ class DaemonTest < ActiveSupport::TestCase
63
76
  assert job.cancelled?
64
77
  assert_not_nil job.cancelled_at
65
78
 
66
-
79
+ Job.delete_jobs_before(20.seconds.ago)
80
+ assert Job.completed.count > 0
81
+ Job.delete_jobs_before(1.second.ago)
82
+ assert_equal 0, Job.completed.count
67
83
 
68
84
  # Test raising of errors
69
- job = JobBoss::Boss.queue.sleep.do_not_never_sleep
70
- JobBoss::Job.wait_for_jobs(job)
85
+ job = Boss.queue.sleep.do_not_never_sleep
86
+ Job.wait_for_jobs(job)
71
87
  job.reload
72
88
 
73
89
  error = job.error
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: job_boss
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 5
9
- - 0
10
- version: 0.5.0
8
+ - 5
9
+ version: 0.5.5
11
10
  platform: ruby
12
11
  authors:
13
12
  - Brian Underwood
@@ -15,7 +14,7 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-12-04 00:00:00 -05:00
17
+ date: 2010-12-11 00:00:00 -05:00
19
18
  default_executable: job_boss
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
@@ -26,7 +25,6 @@ dependencies:
26
25
  requirements:
27
26
  - - ">="
28
27
  - !ruby/object:Gem::Version
29
- hash: 3
30
28
  segments:
31
29
  - 0
32
30
  version: "0"
@@ -40,7 +38,6 @@ dependencies:
40
38
  requirements:
41
39
  - - ">="
42
40
  - !ruby/object:Gem::Version
43
- hash: 3
44
41
  segments:
45
42
  - 0
46
43
  version: "0"
@@ -54,7 +51,6 @@ dependencies:
54
51
  requirements:
55
52
  - - ">="
56
53
  - !ruby/object:Gem::Version
57
- hash: 3
58
54
  segments:
59
55
  - 0
60
56
  version: "0"
@@ -79,28 +75,59 @@ files:
79
75
  - doc/ActiveSupport/TestCase.html
80
76
  - doc/CreateJobs.html
81
77
  - doc/DaemonTest.html
78
+ - doc/Gemfile.html
82
79
  - doc/JobBoss.html
83
80
  - doc/JobBoss/Boss.html
84
81
  - doc/JobBoss/Config.html
85
82
  - doc/JobBoss/Job.html
86
83
  - doc/JobBoss/Queuer.html
84
+ - doc/MIT-LICENSE.html
87
85
  - doc/MathJobs.html
86
+ - doc/Penguin.html
88
87
  - doc/Rakefile.html
89
88
  - doc/SleepJobs.html
90
89
  - doc/StringJobs.html
91
90
  - doc/bin/job_boss.html
92
91
  - doc/created.rid
92
+ - doc/images/brick.png
93
+ - doc/images/brick_link.png
94
+ - doc/images/bug.png
95
+ - doc/images/bullet_black.png
96
+ - doc/images/bullet_toggle_minus.png
97
+ - doc/images/bullet_toggle_plus.png
98
+ - doc/images/date.png
99
+ - doc/images/find.png
100
+ - doc/images/loadingAnimation.gif
101
+ - doc/images/macFFBgHack.png
102
+ - doc/images/package.png
103
+ - doc/images/page_green.png
104
+ - doc/images/page_white_text.png
105
+ - doc/images/page_white_width.png
106
+ - doc/images/plugin.png
107
+ - doc/images/ruby.png
108
+ - doc/images/tag_green.png
109
+ - doc/images/wrench.png
110
+ - doc/images/wrench_orange.png
111
+ - doc/images/zoom.png
93
112
  - doc/index.html
113
+ - doc/init_rb.html
114
+ - doc/js/darkfish.js
115
+ - doc/js/jquery.js
116
+ - doc/js/quicksearch.js
117
+ - doc/js/thickbox-compressed.js
94
118
  - doc/lib/job_boss/boss_rb.html
95
119
  - doc/lib/job_boss/capistrano_rb.html
96
120
  - doc/lib/job_boss/config_rb.html
97
121
  - doc/lib/job_boss/job_rb.html
98
122
  - doc/lib/job_boss/queuer_rb.html
123
+ - doc/lib/job_boss_rb.html
99
124
  - doc/lib/migrate_rb.html
100
125
  - doc/rdoc.css
101
126
  - doc/test/app_root/app/jobs/math_jobs_rb.html
102
127
  - doc/test/app_root/app/jobs/sleep_jobs_rb.html
103
128
  - doc/test/app_root/app/jobs/string_jobs_rb.html
129
+ - doc/test/app_root/app/models/penguin_rb.html
130
+ - doc/test/app_root/config/environment_rb.html
104
131
  - doc/test/test_helper_rb.html
105
132
  - doc/test/unit/daemon_test_rb.html
106
133
  - doc/test/unit/job_test_rb.html
@@ -116,7 +143,9 @@ files:
116
143
  - test/app_root/app/jobs/math_jobs.rb
117
144
  - test/app_root/app/jobs/sleep_jobs.rb
118
145
  - test/app_root/app/jobs/string_jobs.rb
146
+ - test/app_root/app/models/penguin.rb
119
147
  - test/app_root/config/database.yml
148
+ - test/app_root/config/environment.rb
120
149
  - test/test_helper.rb
121
150
  - test/unit/daemon_test.rb
122
151
  - test/unit/job_test.rb
@@ -136,7 +165,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
136
165
  requirements:
137
166
  - - ">="
138
167
  - !ruby/object:Gem::Version
139
- hash: 3
140
168
  segments:
141
169
  - 0
142
170
  version: "0"
@@ -145,7 +173,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
173
  requirements:
146
174
  - - ">="
147
175
  - !ruby/object:Gem::Version
148
- hash: 23
149
176
  segments:
150
177
  - 1
151
178
  - 3
@@ -162,7 +189,9 @@ test_files:
162
189
  - test/app_root/app/jobs/math_jobs.rb
163
190
  - test/app_root/app/jobs/sleep_jobs.rb
164
191
  - test/app_root/app/jobs/string_jobs.rb
192
+ - test/app_root/app/models/penguin.rb
165
193
  - test/app_root/config/database.yml
194
+ - test/app_root/config/environment.rb
166
195
  - test/test_helper.rb
167
196
  - test/unit/daemon_test.rb
168
197
  - test/unit/job_test.rb