job_boss 0.5.0 → 0.5.5

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.
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