level_up 0.1.0

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 (84) hide show
  1. data/CHANGELOG.txt +2 -0
  2. data/LICENSE.txt +20 -0
  3. data/README.md +190 -0
  4. data/Rakefile +40 -0
  5. data/app/assets/images/level_up/search.png +0 -0
  6. data/app/assets/javascripts/level_up/application.js +15 -0
  7. data/app/assets/javascripts/level_up/home.js +2 -0
  8. data/app/assets/javascripts/level_up/jobs.js +2 -0
  9. data/app/assets/stylesheets/level_up/application.css.scss +446 -0
  10. data/app/assets/stylesheets/level_up/home.css.scss +119 -0
  11. data/app/assets/stylesheets/level_up/jobs.css.scss +159 -0
  12. data/app/assets/stylesheets/level_up/rwdgrid.css +403 -0
  13. data/app/controllers/level_up/application_controller.rb +4 -0
  14. data/app/controllers/level_up/home_controller.rb +22 -0
  15. data/app/controllers/level_up/jobs_controller.rb +117 -0
  16. data/app/helpers/level_up/application_helper.rb +7 -0
  17. data/app/helpers/level_up/home_helper.rb +7 -0
  18. data/app/helpers/level_up/jobs_helper.rb +4 -0
  19. data/app/models/level_up/job.rb +212 -0
  20. data/app/models/level_up/state/cancel.rb +7 -0
  21. data/app/models/level_up/state/end.rb +7 -0
  22. data/app/models/level_up/state/start.rb +9 -0
  23. data/app/models/level_up/state.rb +53 -0
  24. data/app/views/layouts/level_up/_footer.html.erb +9 -0
  25. data/app/views/layouts/level_up/_header.html.erb +23 -0
  26. data/app/views/layouts/level_up/application.html.erb +36 -0
  27. data/app/views/level_up/home/index.html.erb +85 -0
  28. data/app/views/level_up/home/workflow.html.erb +5 -0
  29. data/app/views/level_up/jobs/edit.html.erb +65 -0
  30. data/app/views/level_up/jobs/index.html.erb +73 -0
  31. data/app/views/level_up/jobs/show.html.erb +93 -0
  32. data/config/routes.rb +13 -0
  33. data/db/migrate/20130212111454_create_level_up_jobs.rb +27 -0
  34. data/lib/level_up/configuration.rb +27 -0
  35. data/lib/level_up/engine.rb +17 -0
  36. data/lib/level_up/version.rb +3 -0
  37. data/lib/level_up.rb +7 -0
  38. data/lib/tasks/level_up_tasks.rake +4 -0
  39. data/test/dummy/README.rdoc +261 -0
  40. data/test/dummy/Rakefile +7 -0
  41. data/test/dummy/app/assets/javascripts/application.js +15 -0
  42. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  43. data/test/dummy/app/controllers/application_controller.rb +3 -0
  44. data/test/dummy/app/helpers/application_helper.rb +2 -0
  45. data/test/dummy/app/jobs/account_banish.rb +18 -0
  46. data/test/dummy/app/jobs/account_downgrade.rb +13 -0
  47. data/test/dummy/app/jobs/account_upgrade.rb +15 -0
  48. data/test/dummy/app/jobs/mailing_list_subscription.rb +15 -0
  49. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  50. data/test/dummy/config/application.rb +59 -0
  51. data/test/dummy/config/boot.rb +10 -0
  52. data/test/dummy/config/database.yml +25 -0
  53. data/test/dummy/config/environment.rb +5 -0
  54. data/test/dummy/config/environments/development.rb +41 -0
  55. data/test/dummy/config/environments/production.rb +67 -0
  56. data/test/dummy/config/environments/test.rb +37 -0
  57. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  58. data/test/dummy/config/initializers/inflections.rb +15 -0
  59. data/test/dummy/config/initializers/mime_types.rb +5 -0
  60. data/test/dummy/config/initializers/secret_token.rb +7 -0
  61. data/test/dummy/config/initializers/session_store.rb +8 -0
  62. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  63. data/test/dummy/config/locales/en.yml +5 -0
  64. data/test/dummy/config/routes.rb +4 -0
  65. data/test/dummy/config.ru +4 -0
  66. data/test/dummy/db/migrate/20130212113009_create_delayed_jobs.rb +22 -0
  67. data/test/dummy/db/migrate/20130215111404_create_level_up_jobs.level_up.rb +28 -0
  68. data/test/dummy/db/schema.rb +57 -0
  69. data/test/dummy/public/404.html +26 -0
  70. data/test/dummy/public/422.html +26 -0
  71. data/test/dummy/public/500.html +25 -0
  72. data/test/dummy/public/favicon.ico +0 -0
  73. data/test/dummy/script/delayed_job +5 -0
  74. data/test/dummy/script/rails +6 -0
  75. data/test/fixtures/level_up/jobs.yml +11 -0
  76. data/test/functional/level_up/home_controller_test.rb +9 -0
  77. data/test/functional/level_up/jobs_controller_test.rb +9 -0
  78. data/test/integration/navigation_test.rb +10 -0
  79. data/test/level_up_test.rb +7 -0
  80. data/test/test_helper.rb +15 -0
  81. data/test/unit/helpers/level_up/home_helper_test.rb +6 -0
  82. data/test/unit/helpers/level_up/jobs_helper_test.rb +6 -0
  83. data/test/unit/level_up/job_test.rb +208 -0
  84. metadata +333 -0
@@ -0,0 +1,208 @@
1
+ require 'test_helper'
2
+ require 'delayed_job_active_record'
3
+
4
+
5
+ module LevelUp
6
+ class TestJob < Job
7
+ job do
8
+ state :start, moves_to: :first_node
9
+ state :first_node, moves_to: [:second_node, :error_node, :timer_node, :task_node]
10
+ state :second_node, moves_to: [:end]
11
+ state :error_node
12
+ state :timer_node
13
+ state :task_node
14
+ end
15
+
16
+ def second_node
17
+ move_to :end
18
+ end
19
+ end
20
+
21
+ class AbstractFirstNode < State
22
+ def run
23
+ move_to :second_node
24
+ end
25
+ end
26
+
27
+ class TestJob::FirstNode < AbstractFirstNode
28
+ end
29
+
30
+ class TestJob::ErrorNode < State
31
+ def run
32
+ raise "bad news"
33
+ end
34
+ end
35
+
36
+ class TestJob::TimerNode < State
37
+ def run
38
+ retry_in 1.hour
39
+ end
40
+ end
41
+
42
+ class TestJob::TaskNode < State
43
+ def run
44
+ manual_task "a lot of work"
45
+ end
46
+ end
47
+
48
+ class LevelUpTest < ActiveSupport::TestCase
49
+ def setup
50
+ @job = TestJob.new
51
+ @job.save
52
+ end
53
+
54
+ test "should return the schema" do
55
+ assert_equal({
56
+ start: [:first_node],
57
+ first_node: [:second_node, :error_node, :timer_node, :task_node],
58
+ second_node: [:end],
59
+ error_node: [],
60
+ timer_node: [],
61
+ task_node: [],
62
+ end: []
63
+ }, @job.schema)
64
+ end
65
+
66
+ test "should return the list of states" do
67
+ assert_equal([:start, :first_node, :second_node, :error_node, :timer_node, :task_node, :end], @job.states)
68
+ end
69
+
70
+ test "should return list of transitions for a given state" do
71
+ assert_equal([:first_node], @job.transitions(:start))
72
+ assert_equal([:first_node], @job.state_transitions)
73
+
74
+ @job.state = "first_node"
75
+ assert_equal([:second_node, :error_node, :timer_node, :task_node], @job.transitions(:first_node))
76
+ assert_equal([:second_node, :error_node, :timer_node, :task_node], @job.state_transitions)
77
+
78
+ @job.state = "second_node"
79
+ assert_equal([:end], @job.transitions(:second_node))
80
+ assert_equal([:end], @job.state_transitions)
81
+
82
+ @job.state = "error_node"
83
+ assert_equal([], @job.transitions(:error_node))
84
+ assert_equal([], @job.state_transitions)
85
+
86
+ @job.state = "timer_node"
87
+ assert_equal([], @job.transitions(:timer_node))
88
+ assert_equal([], @job.state_transitions)
89
+
90
+ @job.state = "task_node"
91
+ assert_equal([], @job.transitions(:task_node))
92
+ assert_equal([], @job.state_transitions)
93
+
94
+ @job.state = "end"
95
+ assert_equal([], @job.transitions(:end))
96
+ assert_equal([], @job.state_transitions)
97
+ end
98
+
99
+ test "should raise a state not found error" do
100
+ error = assert_raise(StateNotFound) { @job.transitions(:unknown_state) }
101
+ assert_match("unknown_state", error.message)
102
+ end
103
+
104
+ test "should set the started_at attribute when starting a job" do
105
+ assert_nil(@job.started_at)
106
+ @job.boot!
107
+ assert_not_nil(@job.started_at)
108
+ end
109
+
110
+ test "should change state" do
111
+ assert_equal(true, @job.state?(:start))
112
+ @job.boot!
113
+ assert_equal(true, @job.state?(:end))
114
+ end
115
+
116
+ test "should set the end_at attribute when ending a job" do
117
+ assert_nil(@job.ended_at)
118
+ @job.boot!
119
+ assert_not_nil(@job.ended_at)
120
+ end
121
+
122
+ test "should set the error attribute when rescuing from an error" do
123
+ assert_equal(false, @job.error)
124
+ assert_nil(@job.failed_at)
125
+ assert_nil(@job.failed_in)
126
+ assert_nil(@job.backtrace)
127
+
128
+ @job.state = "error_node"
129
+ @job.boot!
130
+ assert_equal(true, @job.error)
131
+ assert_not_nil(@job.failed_at)
132
+ assert_equal("error_node", @job.failed_in)
133
+ assert_not_nil(@job.backtrace)
134
+ end
135
+
136
+ test "should set the timer attribute when retrying a state" do
137
+ assert_equal(false, @job.timer)
138
+ assert_nil(@job.retry_at)
139
+ assert_nil(@job.delayed_job_id)
140
+
141
+ @job.state = "timer_node"
142
+ @job.boot!
143
+ assert_equal(true, @job.timer)
144
+ assert_not_nil(@job.retry_at)
145
+ assert_not_nil(@job.delayed_job_id)
146
+ end
147
+
148
+ test "should set the task and description attributes when falling in human manual task" do
149
+ assert_equal(false, @job.task)
150
+ assert_nil(@job.task_description)
151
+
152
+ @job.state = "task_node"
153
+ @job.boot!
154
+ assert_equal(true, @job.task)
155
+ assert_not_nil(@job.task_description)
156
+ end
157
+
158
+ test "should disallow transition" do
159
+ assert_equal(true, @job.state?(:start))
160
+ @job.event!(nil, false)
161
+ assert_equal(true, @job.state?(:start))
162
+ end
163
+
164
+ test "should allow transition" do
165
+ assert_equal(true, @job.state?(:start))
166
+ @job.event!(nil, true)
167
+ assert_equal(true, @job.state?(:end))
168
+ end
169
+
170
+ test "should disallow retry" do
171
+ assert_equal(false, @job.timer)
172
+ assert_nil(@job.retry_at)
173
+ @job.state = "timer_node"
174
+
175
+ @job.event!(nil, true, false)
176
+ assert_equal(false, @job.timer)
177
+ assert_nil(@job.retry_at)
178
+ assert_nil(@job.delayed_job_id)
179
+ end
180
+
181
+ test "should allow retry" do
182
+ assert_equal(false, @job.timer)
183
+ assert_nil(@job.retry_at)
184
+ @job.state = "timer_node"
185
+
186
+ @job.event!(nil, true, true)
187
+ assert_equal(true, @job.timer)
188
+ assert_not_nil(@job.retry_at)
189
+ assert_not_nil(@job.delayed_job_id)
190
+ end
191
+
192
+ test "should have a delayed_job" do
193
+ assert_nil(@job.delayed_job_id)
194
+ delay = @job.boot_async!
195
+ assert_equal(true, delay)
196
+ assert_not_nil(@job.delayed_job_id)
197
+ end
198
+
199
+ test "should destroy a delayed_job" do
200
+ delay = @job.boot_async!
201
+ assert_equal(true, delay)
202
+ assert_not_nil(@job.delayed_job_id)
203
+
204
+ @job.unqueue!
205
+ assert_nil(@job.delayed_job_id)
206
+ end
207
+ end
208
+ end
metadata ADDED
@@ -0,0 +1,333 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: level_up
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Karim Matrah
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-03-27 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: '3.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '3.2'
30
+ - !ruby/object:Gem::Dependency
31
+ name: jquery-rails
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: sass-rails
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: meta_search
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: kaminari
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: ruby-graphviz
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: delayed_job
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '3.0'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '3.0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: delayed_job_active_record
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ~>
132
+ - !ruby/object:Gem::Version
133
+ version: '0.3'
134
+ type: :runtime
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: '0.3'
142
+ - !ruby/object:Gem::Dependency
143
+ name: rake
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ - !ruby/object:Gem::Dependency
159
+ name: sqlite3
160
+ requirement: !ruby/object:Gem::Requirement
161
+ none: false
162
+ requirements:
163
+ - - ! '>='
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ type: :development
167
+ prerelease: false
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ description: A rails engine to structure, run and manage asynchronous jobs
175
+ email:
176
+ - karim.matrah@gmail.com
177
+ executables: []
178
+ extensions: []
179
+ extra_rdoc_files: []
180
+ files:
181
+ - app/assets/images/level_up/search.png
182
+ - app/assets/javascripts/level_up/application.js
183
+ - app/assets/javascripts/level_up/home.js
184
+ - app/assets/javascripts/level_up/jobs.js
185
+ - app/assets/stylesheets/level_up/application.css.scss
186
+ - app/assets/stylesheets/level_up/home.css.scss
187
+ - app/assets/stylesheets/level_up/jobs.css.scss
188
+ - app/assets/stylesheets/level_up/rwdgrid.css
189
+ - app/controllers/level_up/application_controller.rb
190
+ - app/controllers/level_up/home_controller.rb
191
+ - app/controllers/level_up/jobs_controller.rb
192
+ - app/helpers/level_up/application_helper.rb
193
+ - app/helpers/level_up/home_helper.rb
194
+ - app/helpers/level_up/jobs_helper.rb
195
+ - app/models/level_up/job.rb
196
+ - app/models/level_up/state/cancel.rb
197
+ - app/models/level_up/state/end.rb
198
+ - app/models/level_up/state/start.rb
199
+ - app/models/level_up/state.rb
200
+ - app/views/layouts/level_up/_footer.html.erb
201
+ - app/views/layouts/level_up/_header.html.erb
202
+ - app/views/layouts/level_up/application.html.erb
203
+ - app/views/level_up/home/index.html.erb
204
+ - app/views/level_up/home/workflow.html.erb
205
+ - app/views/level_up/jobs/edit.html.erb
206
+ - app/views/level_up/jobs/index.html.erb
207
+ - app/views/level_up/jobs/show.html.erb
208
+ - config/routes.rb
209
+ - db/migrate/20130212111454_create_level_up_jobs.rb
210
+ - lib/level_up/configuration.rb
211
+ - lib/level_up/engine.rb
212
+ - lib/level_up/version.rb
213
+ - lib/level_up.rb
214
+ - lib/tasks/level_up_tasks.rake
215
+ - LICENSE.txt
216
+ - Rakefile
217
+ - README.md
218
+ - CHANGELOG.txt
219
+ - test/dummy/app/assets/javascripts/application.js
220
+ - test/dummy/app/assets/stylesheets/application.css
221
+ - test/dummy/app/controllers/application_controller.rb
222
+ - test/dummy/app/helpers/application_helper.rb
223
+ - test/dummy/app/jobs/account_banish.rb
224
+ - test/dummy/app/jobs/account_downgrade.rb
225
+ - test/dummy/app/jobs/account_upgrade.rb
226
+ - test/dummy/app/jobs/mailing_list_subscription.rb
227
+ - test/dummy/app/views/layouts/application.html.erb
228
+ - test/dummy/config/application.rb
229
+ - test/dummy/config/boot.rb
230
+ - test/dummy/config/database.yml
231
+ - test/dummy/config/environment.rb
232
+ - test/dummy/config/environments/development.rb
233
+ - test/dummy/config/environments/production.rb
234
+ - test/dummy/config/environments/test.rb
235
+ - test/dummy/config/initializers/backtrace_silencers.rb
236
+ - test/dummy/config/initializers/inflections.rb
237
+ - test/dummy/config/initializers/mime_types.rb
238
+ - test/dummy/config/initializers/secret_token.rb
239
+ - test/dummy/config/initializers/session_store.rb
240
+ - test/dummy/config/initializers/wrap_parameters.rb
241
+ - test/dummy/config/locales/en.yml
242
+ - test/dummy/config/routes.rb
243
+ - test/dummy/config.ru
244
+ - test/dummy/db/migrate/20130212113009_create_delayed_jobs.rb
245
+ - test/dummy/db/migrate/20130215111404_create_level_up_jobs.level_up.rb
246
+ - test/dummy/db/schema.rb
247
+ - test/dummy/public/404.html
248
+ - test/dummy/public/422.html
249
+ - test/dummy/public/500.html
250
+ - test/dummy/public/favicon.ico
251
+ - test/dummy/Rakefile
252
+ - test/dummy/README.rdoc
253
+ - test/dummy/script/delayed_job
254
+ - test/dummy/script/rails
255
+ - test/fixtures/level_up/jobs.yml
256
+ - test/functional/level_up/home_controller_test.rb
257
+ - test/functional/level_up/jobs_controller_test.rb
258
+ - test/integration/navigation_test.rb
259
+ - test/level_up_test.rb
260
+ - test/test_helper.rb
261
+ - test/unit/helpers/level_up/home_helper_test.rb
262
+ - test/unit/helpers/level_up/jobs_helper_test.rb
263
+ - test/unit/level_up/job_test.rb
264
+ homepage: https://github.com/kmatrah/level_up
265
+ licenses: []
266
+ post_install_message:
267
+ rdoc_options: []
268
+ require_paths:
269
+ - lib
270
+ required_ruby_version: !ruby/object:Gem::Requirement
271
+ none: false
272
+ requirements:
273
+ - - ! '>='
274
+ - !ruby/object:Gem::Version
275
+ version: '0'
276
+ required_rubygems_version: !ruby/object:Gem::Requirement
277
+ none: false
278
+ requirements:
279
+ - - ! '>='
280
+ - !ruby/object:Gem::Version
281
+ version: '0'
282
+ requirements: []
283
+ rubyforge_project:
284
+ rubygems_version: 1.8.24
285
+ signing_key:
286
+ specification_version: 3
287
+ summary: A rails engine to structure, run and manage asynchronous jobs
288
+ test_files:
289
+ - test/dummy/app/assets/javascripts/application.js
290
+ - test/dummy/app/assets/stylesheets/application.css
291
+ - test/dummy/app/controllers/application_controller.rb
292
+ - test/dummy/app/helpers/application_helper.rb
293
+ - test/dummy/app/jobs/account_banish.rb
294
+ - test/dummy/app/jobs/account_downgrade.rb
295
+ - test/dummy/app/jobs/account_upgrade.rb
296
+ - test/dummy/app/jobs/mailing_list_subscription.rb
297
+ - test/dummy/app/views/layouts/application.html.erb
298
+ - test/dummy/config/application.rb
299
+ - test/dummy/config/boot.rb
300
+ - test/dummy/config/database.yml
301
+ - test/dummy/config/environment.rb
302
+ - test/dummy/config/environments/development.rb
303
+ - test/dummy/config/environments/production.rb
304
+ - test/dummy/config/environments/test.rb
305
+ - test/dummy/config/initializers/backtrace_silencers.rb
306
+ - test/dummy/config/initializers/inflections.rb
307
+ - test/dummy/config/initializers/mime_types.rb
308
+ - test/dummy/config/initializers/secret_token.rb
309
+ - test/dummy/config/initializers/session_store.rb
310
+ - test/dummy/config/initializers/wrap_parameters.rb
311
+ - test/dummy/config/locales/en.yml
312
+ - test/dummy/config/routes.rb
313
+ - test/dummy/config.ru
314
+ - test/dummy/db/migrate/20130212113009_create_delayed_jobs.rb
315
+ - test/dummy/db/migrate/20130215111404_create_level_up_jobs.level_up.rb
316
+ - test/dummy/db/schema.rb
317
+ - test/dummy/public/404.html
318
+ - test/dummy/public/422.html
319
+ - test/dummy/public/500.html
320
+ - test/dummy/public/favicon.ico
321
+ - test/dummy/Rakefile
322
+ - test/dummy/README.rdoc
323
+ - test/dummy/script/delayed_job
324
+ - test/dummy/script/rails
325
+ - test/fixtures/level_up/jobs.yml
326
+ - test/functional/level_up/home_controller_test.rb
327
+ - test/functional/level_up/jobs_controller_test.rb
328
+ - test/integration/navigation_test.rb
329
+ - test/level_up_test.rb
330
+ - test/test_helper.rb
331
+ - test/unit/helpers/level_up/home_helper_test.rb
332
+ - test/unit/helpers/level_up/jobs_helper_test.rb
333
+ - test/unit/level_up/job_test.rb