governor_background 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +28 -0
  4. data/Gemfile.lock +163 -0
  5. data/LICENSE.txt +20 -0
  6. data/README.rdoc +91 -0
  7. data/Rakefile +50 -0
  8. data/VERSION +1 -0
  9. data/app/helpers/governor_background_helper.rb +11 -0
  10. data/governor_background.gemspec +206 -0
  11. data/lib/governor_background/controllers/methods.rb +18 -0
  12. data/lib/governor_background/delayed/job.rb +70 -0
  13. data/lib/governor_background/delayed/performer.rb +13 -0
  14. data/lib/governor_background/handler.rb +34 -0
  15. data/lib/governor_background/job_manager.rb +22 -0
  16. data/lib/governor_background/rails.rb +8 -0
  17. data/lib/governor_background/resque/job.rb +51 -0
  18. data/lib/governor_background/resque/performer.rb +12 -0
  19. data/lib/governor_background/resque/performer_with_state.rb +17 -0
  20. data/lib/governor_background.rb +22 -0
  21. data/spec/governor_background/delayed/job_spec.rb +47 -0
  22. data/spec/governor_background/handler_spec.rb +46 -0
  23. data/spec/governor_background/job_manager_spec.rb +44 -0
  24. data/spec/governor_background/resque/performer_spec.rb +17 -0
  25. data/spec/governor_background/resque/performer_with_state_spec.rb +18 -0
  26. data/spec/governor_background_spec.rb +7 -0
  27. data/spec/rails_app/.gitignore +4 -0
  28. data/spec/rails_app/Gemfile +43 -0
  29. data/spec/rails_app/Gemfile.lock +128 -0
  30. data/spec/rails_app/README +256 -0
  31. data/spec/rails_app/Rakefile +7 -0
  32. data/spec/rails_app/app/controllers/application_controller.rb +3 -0
  33. data/spec/rails_app/app/controllers/home_controller.rb +2 -0
  34. data/spec/rails_app/app/helpers/application_helper.rb +2 -0
  35. data/spec/rails_app/app/helpers/home_helper.rb +2 -0
  36. data/spec/rails_app/app/models/article.rb +5 -0
  37. data/spec/rails_app/app/models/user.rb +9 -0
  38. data/spec/rails_app/app/views/governor/articles/index.xml.builder +5 -0
  39. data/spec/rails_app/app/views/home/index.html.erb +0 -0
  40. data/spec/rails_app/app/views/layouts/application.html.erb +22 -0
  41. data/spec/rails_app/config/application.rb +42 -0
  42. data/spec/rails_app/config/boot.rb +14 -0
  43. data/spec/rails_app/config/database.yml +19 -0
  44. data/spec/rails_app/config/environment.rb +5 -0
  45. data/spec/rails_app/config/environments/development.rb +26 -0
  46. data/spec/rails_app/config/environments/production.rb +49 -0
  47. data/spec/rails_app/config/environments/test.rb +35 -0
  48. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  49. data/spec/rails_app/config/initializers/devise.rb +142 -0
  50. data/spec/rails_app/config/initializers/governor.rb +36 -0
  51. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  52. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  53. data/spec/rails_app/config/initializers/resque.rb +5 -0
  54. data/spec/rails_app/config/initializers/secret_token.rb +7 -0
  55. data/spec/rails_app/config/initializers/session_store.rb +8 -0
  56. data/spec/rails_app/config/locales/devise.en.yml +39 -0
  57. data/spec/rails_app/config/locales/en.yml +5 -0
  58. data/spec/rails_app/config/redis.yml +15 -0
  59. data/spec/rails_app/config/routes.rb +64 -0
  60. data/spec/rails_app/config.ru +4 -0
  61. data/spec/rails_app/db/migrate/20110329032256_devise_create_users.rb +26 -0
  62. data/spec/rails_app/db/migrate/20110330020108_governor_create_articles.rb +15 -0
  63. data/spec/rails_app/db/migrate/20110421014910_create_delayed_jobs.rb +21 -0
  64. data/spec/rails_app/db/schema.rb +59 -0
  65. data/spec/rails_app/db/seeds.rb +7 -0
  66. data/spec/rails_app/lib/tasks/.gitkeep +0 -0
  67. data/spec/rails_app/lib/tasks/resque.rake +2 -0
  68. data/spec/rails_app/public/404.html +26 -0
  69. data/spec/rails_app/public/422.html +26 -0
  70. data/spec/rails_app/public/500.html +26 -0
  71. data/spec/rails_app/public/favicon.ico +0 -0
  72. data/spec/rails_app/public/images/rails.png +0 -0
  73. data/spec/rails_app/public/javascripts/application.js +2 -0
  74. data/spec/rails_app/public/javascripts/controls.js +965 -0
  75. data/spec/rails_app/public/javascripts/dragdrop.js +974 -0
  76. data/spec/rails_app/public/javascripts/effects.js +1123 -0
  77. data/spec/rails_app/public/javascripts/prototype.js +6001 -0
  78. data/spec/rails_app/public/javascripts/rails.js +191 -0
  79. data/spec/rails_app/public/robots.txt +5 -0
  80. data/spec/rails_app/public/stylesheets/.gitkeep +0 -0
  81. data/spec/rails_app/script/delayed_job +5 -0
  82. data/spec/rails_app/script/rails +6 -0
  83. data/spec/rails_app/spec/factories.rb +12 -0
  84. data/spec/rails_app/vendor/plugins/.gitkeep +0 -0
  85. data/spec/spec_helper.rb +36 -0
  86. metadata +417 -0
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,28 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ # Add dependencies to develop your gem here.
7
+ # Include everything needed to run rake, tests, features, etc.
8
+
9
+ gem 'governor'
10
+
11
+ group :development, :test do
12
+ gem 'jeweler', '~> 1.5.2'
13
+ gem 'sqlite3'
14
+ gem 'rspec-rails'
15
+ gem 'mocha'
16
+ gem 'factory_girl', '~> 2.0.0.beta'
17
+ gem 'factory_girl_rails', '~> 1.1.beta'
18
+ gem 'activerecord-nulldb-adapter'
19
+
20
+ gem 'will_paginate', '~> 3.0.beta'
21
+ gem 'devise'
22
+ gem 'governor_background', :path => './'
23
+ gem 'delayed_job'
24
+ gem 'resque'
25
+ gem 'resque-status', :require => 'resque/status'
26
+ gem 'resque_spec'
27
+ gem 'dynamic_form'
28
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,163 @@
1
+ PATH
2
+ remote: ./
3
+ specs:
4
+ governor_background (0.1.0)
5
+ governor
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ abstract (1.0.0)
11
+ actionmailer (3.0.6)
12
+ actionpack (= 3.0.6)
13
+ mail (~> 2.2.15)
14
+ actionpack (3.0.6)
15
+ activemodel (= 3.0.6)
16
+ activesupport (= 3.0.6)
17
+ builder (~> 2.1.2)
18
+ erubis (~> 2.6.6)
19
+ i18n (~> 0.5.0)
20
+ rack (~> 1.2.1)
21
+ rack-mount (~> 0.6.14)
22
+ rack-test (~> 0.5.7)
23
+ tzinfo (~> 0.3.23)
24
+ activemodel (3.0.6)
25
+ activesupport (= 3.0.6)
26
+ builder (~> 2.1.2)
27
+ i18n (~> 0.5.0)
28
+ activerecord (3.0.6)
29
+ activemodel (= 3.0.6)
30
+ activesupport (= 3.0.6)
31
+ arel (~> 2.0.2)
32
+ tzinfo (~> 0.3.23)
33
+ activerecord-nulldb-adapter (0.2.1)
34
+ activerecord (>= 2.0.0, < 3.1)
35
+ activeresource (3.0.6)
36
+ activemodel (= 3.0.6)
37
+ activesupport (= 3.0.6)
38
+ activesupport (3.0.6)
39
+ arel (2.0.9)
40
+ bcrypt-ruby (2.1.4)
41
+ builder (2.1.2)
42
+ daemons (1.1.2)
43
+ delayed_job (2.1.4)
44
+ activesupport (~> 3.0)
45
+ daemons
46
+ devise (1.2.1)
47
+ bcrypt-ruby (~> 2.1.2)
48
+ orm_adapter (~> 0.0.3)
49
+ warden (~> 1.0.3)
50
+ diff-lcs (1.1.2)
51
+ dynamic_form (1.1.4)
52
+ erubis (2.6.6)
53
+ abstract (>= 1.0.0)
54
+ factory_girl (2.0.0.beta2)
55
+ factory_girl_rails (1.1.beta1)
56
+ factory_girl (~> 2.0.0.beta)
57
+ rails (>= 3.0.0)
58
+ git (1.2.5)
59
+ governor (0.3.0)
60
+ rails (~> 3.0.5)
61
+ i18n (0.5.0)
62
+ jeweler (1.5.2)
63
+ bundler (~> 1.0.0)
64
+ git (>= 1.2.5)
65
+ rake
66
+ json (1.4.6)
67
+ macaddr (1.0.0)
68
+ mail (2.2.15)
69
+ activesupport (>= 2.3.6)
70
+ i18n (>= 0.4.0)
71
+ mime-types (~> 1.16)
72
+ treetop (~> 1.4.8)
73
+ mime-types (1.16)
74
+ mocha (0.9.12)
75
+ orm_adapter (0.0.4)
76
+ polyglot (0.3.1)
77
+ rack (1.2.2)
78
+ rack-mount (0.6.14)
79
+ rack (>= 1.0.0)
80
+ rack-test (0.5.7)
81
+ rack (>= 1.0)
82
+ rails (3.0.6)
83
+ actionmailer (= 3.0.6)
84
+ actionpack (= 3.0.6)
85
+ activerecord (= 3.0.6)
86
+ activeresource (= 3.0.6)
87
+ activesupport (= 3.0.6)
88
+ bundler (~> 1.0)
89
+ railties (= 3.0.6)
90
+ railties (3.0.6)
91
+ actionpack (= 3.0.6)
92
+ activesupport (= 3.0.6)
93
+ rake (>= 0.8.7)
94
+ thor (~> 0.14.4)
95
+ rake (0.8.7)
96
+ redis (2.2.0)
97
+ redis-namespace (0.10.0)
98
+ redis (< 3.0.0)
99
+ redisk (0.2.2)
100
+ redis (>= 0.1.1)
101
+ redis-namespace (>= 0.1.0)
102
+ resque (1.15.0)
103
+ json (~> 1.4.6)
104
+ redis-namespace (>= 0.10.0)
105
+ sinatra (>= 0.9.2)
106
+ vegas (~> 0.1.2)
107
+ resque-status (0.2.3)
108
+ redisk (>= 0.2.1)
109
+ resque (>= 1.3.1)
110
+ uuid (>= 2.0.2)
111
+ resque_spec (0.6.4)
112
+ resque (>= 1.15.0)
113
+ rspec (>= 2.5.0)
114
+ rspec (2.5.0)
115
+ rspec-core (~> 2.5.0)
116
+ rspec-expectations (~> 2.5.0)
117
+ rspec-mocks (~> 2.5.0)
118
+ rspec-core (2.5.1)
119
+ rspec-expectations (2.5.0)
120
+ diff-lcs (~> 1.1.2)
121
+ rspec-mocks (2.5.0)
122
+ rspec-rails (2.5.0)
123
+ actionpack (~> 3.0)
124
+ activesupport (~> 3.0)
125
+ railties (~> 3.0)
126
+ rspec (~> 2.5.0)
127
+ sinatra (1.2.3)
128
+ rack (~> 1.1)
129
+ tilt (>= 1.2.2, < 2.0)
130
+ sqlite3 (1.3.3)
131
+ thor (0.14.6)
132
+ tilt (1.2.2)
133
+ treetop (1.4.9)
134
+ polyglot (>= 0.3.1)
135
+ tzinfo (0.3.26)
136
+ uuid (2.3.2)
137
+ macaddr (~> 1.0)
138
+ vegas (0.1.8)
139
+ rack (>= 1.0.0)
140
+ warden (1.0.3)
141
+ rack (>= 1.0.0)
142
+ will_paginate (3.0.pre2)
143
+
144
+ PLATFORMS
145
+ ruby
146
+
147
+ DEPENDENCIES
148
+ activerecord-nulldb-adapter
149
+ delayed_job
150
+ devise
151
+ dynamic_form
152
+ factory_girl (~> 2.0.0.beta)
153
+ factory_girl_rails (~> 1.1.beta)
154
+ governor
155
+ governor_background!
156
+ jeweler (~> 1.5.2)
157
+ mocha
158
+ resque
159
+ resque-status
160
+ resque_spec
161
+ rspec-rails
162
+ sqlite3
163
+ will_paginate (~> 3.0.beta)
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Liam Morley
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,91 @@
1
+ = governor_background
2
+
3
+ <b>Governor[http://carpeliam.github.com/governor/]</b> (named after Rod
4
+ Blagojevich) is the pluggable blogging platform for Rails, built for people
5
+ who want to build their blog into their website, not build their website into
6
+ their blog.
7
+
8
+ *governor_background* is a middle-tier plugin for Governor, allowing you to
9
+ tie in additional services that might want to perform blog-related services in
10
+ the background. For example, you may want to copy your articles to another
11
+ blog service, like Blogger.
12
+
13
+ == Dependencies
14
+
15
+ * Governor[http://carpeliam.github.com/governor/]
16
+ * Either Delayed_Job[https://github.com/collectiveidea/delayed_job] or
17
+ Resque[https://github.com/defunkt/resque]. If you use Resque, it's highly
18
+ recommended that you use
19
+ resque-status[https://github.com/quirkey/resque-status] as well.
20
+
21
+ == Setting up
22
+
23
+ First, install Governor[http://carpeliam.github.com/governor/]. Then, in
24
+ your Gemfile, add the following:
25
+
26
+ gem 'governor_background'
27
+
28
+ After that, it's highly recommended that you add some methods to your
29
+ +ApplicationController+ as follows:
30
+
31
+ class ApplicationController < ActionController::Base
32
+ include GovernorBackground::Controllers::Methods
33
+ # ...
34
+ end
35
+
36
+ Including <code>GovernorBackground::Controllers::Methods</code> will upon
37
+ every request check to see if there are any finished jobs (either completed,
38
+ failed, or killed) since the last request, and will both clear them out as
39
+ well as enable you to report them to the user. To report them to the user, add
40
+ the following to your layout:
41
+
42
+ <%= background_status %>
43
+
44
+ If there are any finished jobs, this will add a +div+ with a 'background'
45
+ class, and within that div will be one or more divs with either a 'completed',
46
+ 'failed', or 'killed' class, and a message.
47
+
48
+ == Usage
49
+
50
+ *governor_background* adds a method <code>#run_in_background</code> to your
51
+ resource class (by default, the +Article+ class, but this will be any resource
52
+ class). To do the same thing from outside of your resource instance, you can
53
+ call <code>GovernorBackground::Handler.run_in_background(object,
54
+ :method_name)</code>. In order to build on top of *governor_background*,
55
+ you'll need to do one of two things:
56
+
57
+ 1. Call +run_in_background+, either from your resource instance or on
58
+ <code>GovernorBackground::Handler</code>. Pass it an object and the name of the
59
+ method (as a symbol) that you wish to call on that object. Arguments to
60
+ this method are not currently supported.
61
+ 2. In your I18n settings, define entries for your method, for each finished
62
+ status (completed, failed, and killed). You'll have access in your entry to
63
+ the resource as well as any message passed from the background service.
64
+ (The default <code>#to_s</code> for Article displays the title, as of
65
+ Governor 0.3.1.) For example, if your method were 'post_to_blogger', you
66
+ might have the following in your <code>config/locales/en.yml</code> file:
67
+
68
+ en:
69
+ governor_background:
70
+ post_to_blogger_completed: '"%{resource}" was completed successfully.'
71
+ post_to_blogger_failed: '"%{resource}" could not be created: %{message}.'
72
+ post_to_blogger_killed: '"%{resource}" was interrupted: %{message}.'
73
+
74
+ Please see governor_blogger[https://github.com/carpeliam/governor_blogger] as
75
+ an example usage of *governor_background*.
76
+
77
+ == Contributing to governor_background
78
+
79
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
80
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
81
+ * Fork the project
82
+ * Start a feature/bugfix branch
83
+ * Commit and push until you are happy with your contribution
84
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
85
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
86
+
87
+ == Copyright
88
+
89
+ Copyright (c) 2011 Liam Morley. See LICENSE.txt for
90
+ further details.
91
+
data/Rakefile ADDED
@@ -0,0 +1,50 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "governor_background"
16
+ gem.homepage = "http://github.com/carpeliam/governor_background"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Background services plugin for the Rails 3-based Governor blogging system.}
19
+ gem.description = %Q{A middle-tier plugin for the Rails 3-based Governor blogging system, allowing you to tie in additional services that might want to perform blog-related services in the background.}
20
+ gem.email = "liam@carpeliam.com"
21
+ gem.authors = ["Liam Morley"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ # gem.add_runtime_dependency 'jabber4r', '> 0.1'
25
+ # gem.add_development_dependency 'rspec', '> 1.2.3'
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rspec/core'
30
+ require 'rspec/core/rake_task'
31
+ RSpec::Core::RakeTask.new(:spec) do |spec|
32
+ spec.pattern = FileList['spec/**/*_spec.rb']
33
+ end
34
+
35
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
36
+ spec.pattern = 'spec/**/*_spec.rb'
37
+ spec.rcov = true
38
+ end
39
+
40
+ task :default => :spec
41
+
42
+ require 'rake/rdoctask'
43
+ Rake::RDocTask.new do |rdoc|
44
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
45
+
46
+ rdoc.rdoc_dir = 'rdoc'
47
+ rdoc.title = "governor_background #{version}"
48
+ rdoc.rdoc_files.include('README*')
49
+ rdoc.rdoc_files.include('lib/**/*.rb')
50
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,11 @@
1
+ module GovernorBackgroundHelper
2
+ def background_status
3
+ if flash[:governor_background]
4
+ content_tag :div, :class => 'background' do
5
+ flash[:governor_background].each do |(status, message)|
6
+ concat(content_tag :div, message, :class => status)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,206 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{governor_background}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Liam Morley"]
12
+ s.date = %q{2011-04-24}
13
+ s.description = %q{A middle-tier plugin for the Rails 3-based Governor blogging system, allowing you to tie in additional services that might want to perform blog-related services in the background.}
14
+ s.email = %q{liam@carpeliam.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "app/helpers/governor_background_helper.rb",
29
+ "governor_background.gemspec",
30
+ "lib/governor_background.rb",
31
+ "lib/governor_background/controllers/methods.rb",
32
+ "lib/governor_background/delayed/job.rb",
33
+ "lib/governor_background/delayed/performer.rb",
34
+ "lib/governor_background/handler.rb",
35
+ "lib/governor_background/job_manager.rb",
36
+ "lib/governor_background/rails.rb",
37
+ "lib/governor_background/resque/job.rb",
38
+ "lib/governor_background/resque/performer.rb",
39
+ "lib/governor_background/resque/performer_with_state.rb",
40
+ "spec/governor_background/delayed/job_spec.rb",
41
+ "spec/governor_background/handler_spec.rb",
42
+ "spec/governor_background/job_manager_spec.rb",
43
+ "spec/governor_background/resque/performer_spec.rb",
44
+ "spec/governor_background/resque/performer_with_state_spec.rb",
45
+ "spec/governor_background_spec.rb",
46
+ "spec/rails_app/.gitignore",
47
+ "spec/rails_app/Gemfile",
48
+ "spec/rails_app/Gemfile.lock",
49
+ "spec/rails_app/README",
50
+ "spec/rails_app/Rakefile",
51
+ "spec/rails_app/app/controllers/application_controller.rb",
52
+ "spec/rails_app/app/controllers/home_controller.rb",
53
+ "spec/rails_app/app/helpers/application_helper.rb",
54
+ "spec/rails_app/app/helpers/home_helper.rb",
55
+ "spec/rails_app/app/models/article.rb",
56
+ "spec/rails_app/app/models/user.rb",
57
+ "spec/rails_app/app/views/governor/articles/index.xml.builder",
58
+ "spec/rails_app/app/views/home/index.html.erb",
59
+ "spec/rails_app/app/views/layouts/application.html.erb",
60
+ "spec/rails_app/config.ru",
61
+ "spec/rails_app/config/application.rb",
62
+ "spec/rails_app/config/boot.rb",
63
+ "spec/rails_app/config/database.yml",
64
+ "spec/rails_app/config/environment.rb",
65
+ "spec/rails_app/config/environments/development.rb",
66
+ "spec/rails_app/config/environments/production.rb",
67
+ "spec/rails_app/config/environments/test.rb",
68
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
69
+ "spec/rails_app/config/initializers/devise.rb",
70
+ "spec/rails_app/config/initializers/governor.rb",
71
+ "spec/rails_app/config/initializers/inflections.rb",
72
+ "spec/rails_app/config/initializers/mime_types.rb",
73
+ "spec/rails_app/config/initializers/resque.rb",
74
+ "spec/rails_app/config/initializers/secret_token.rb",
75
+ "spec/rails_app/config/initializers/session_store.rb",
76
+ "spec/rails_app/config/locales/devise.en.yml",
77
+ "spec/rails_app/config/locales/en.yml",
78
+ "spec/rails_app/config/redis.yml",
79
+ "spec/rails_app/config/routes.rb",
80
+ "spec/rails_app/db/migrate/20110329032256_devise_create_users.rb",
81
+ "spec/rails_app/db/migrate/20110330020108_governor_create_articles.rb",
82
+ "spec/rails_app/db/migrate/20110421014910_create_delayed_jobs.rb",
83
+ "spec/rails_app/db/schema.rb",
84
+ "spec/rails_app/db/seeds.rb",
85
+ "spec/rails_app/lib/tasks/.gitkeep",
86
+ "spec/rails_app/lib/tasks/resque.rake",
87
+ "spec/rails_app/public/404.html",
88
+ "spec/rails_app/public/422.html",
89
+ "spec/rails_app/public/500.html",
90
+ "spec/rails_app/public/favicon.ico",
91
+ "spec/rails_app/public/images/rails.png",
92
+ "spec/rails_app/public/javascripts/application.js",
93
+ "spec/rails_app/public/javascripts/controls.js",
94
+ "spec/rails_app/public/javascripts/dragdrop.js",
95
+ "spec/rails_app/public/javascripts/effects.js",
96
+ "spec/rails_app/public/javascripts/prototype.js",
97
+ "spec/rails_app/public/javascripts/rails.js",
98
+ "spec/rails_app/public/robots.txt",
99
+ "spec/rails_app/public/stylesheets/.gitkeep",
100
+ "spec/rails_app/script/delayed_job",
101
+ "spec/rails_app/script/rails",
102
+ "spec/rails_app/spec/factories.rb",
103
+ "spec/rails_app/vendor/plugins/.gitkeep",
104
+ "spec/spec_helper.rb"
105
+ ]
106
+ s.homepage = %q{http://github.com/carpeliam/governor_background}
107
+ s.licenses = ["MIT"]
108
+ s.require_paths = ["lib"]
109
+ s.rubygems_version = %q{1.3.7}
110
+ s.summary = %q{Background services plugin for the Rails 3-based Governor blogging system.}
111
+ s.test_files = [
112
+ "spec/governor_background/delayed/job_spec.rb",
113
+ "spec/governor_background/handler_spec.rb",
114
+ "spec/governor_background/job_manager_spec.rb",
115
+ "spec/governor_background/resque/performer_spec.rb",
116
+ "spec/governor_background/resque/performer_with_state_spec.rb",
117
+ "spec/governor_background_spec.rb",
118
+ "spec/rails_app/app/controllers/application_controller.rb",
119
+ "spec/rails_app/app/controllers/home_controller.rb",
120
+ "spec/rails_app/app/helpers/application_helper.rb",
121
+ "spec/rails_app/app/helpers/home_helper.rb",
122
+ "spec/rails_app/app/models/article.rb",
123
+ "spec/rails_app/app/models/user.rb",
124
+ "spec/rails_app/config/application.rb",
125
+ "spec/rails_app/config/boot.rb",
126
+ "spec/rails_app/config/environment.rb",
127
+ "spec/rails_app/config/environments/development.rb",
128
+ "spec/rails_app/config/environments/production.rb",
129
+ "spec/rails_app/config/environments/test.rb",
130
+ "spec/rails_app/config/initializers/backtrace_silencers.rb",
131
+ "spec/rails_app/config/initializers/devise.rb",
132
+ "spec/rails_app/config/initializers/governor.rb",
133
+ "spec/rails_app/config/initializers/inflections.rb",
134
+ "spec/rails_app/config/initializers/mime_types.rb",
135
+ "spec/rails_app/config/initializers/resque.rb",
136
+ "spec/rails_app/config/initializers/secret_token.rb",
137
+ "spec/rails_app/config/initializers/session_store.rb",
138
+ "spec/rails_app/config/routes.rb",
139
+ "spec/rails_app/db/migrate/20110329032256_devise_create_users.rb",
140
+ "spec/rails_app/db/migrate/20110330020108_governor_create_articles.rb",
141
+ "spec/rails_app/db/migrate/20110421014910_create_delayed_jobs.rb",
142
+ "spec/rails_app/db/schema.rb",
143
+ "spec/rails_app/db/seeds.rb",
144
+ "spec/rails_app/spec/factories.rb",
145
+ "spec/spec_helper.rb"
146
+ ]
147
+
148
+ if s.respond_to? :specification_version then
149
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
150
+ s.specification_version = 3
151
+
152
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
153
+ s.add_runtime_dependency(%q<governor>, [">= 0"])
154
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
155
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
156
+ s.add_development_dependency(%q<rspec-rails>, [">= 0"])
157
+ s.add_development_dependency(%q<mocha>, [">= 0"])
158
+ s.add_development_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
159
+ s.add_development_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
160
+ s.add_development_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
161
+ s.add_development_dependency(%q<will_paginate>, ["~> 3.0.beta"])
162
+ s.add_development_dependency(%q<devise>, [">= 0"])
163
+ s.add_development_dependency(%q<governor_background>, [">= 0"])
164
+ s.add_development_dependency(%q<delayed_job>, [">= 0"])
165
+ s.add_development_dependency(%q<resque>, [">= 0"])
166
+ s.add_development_dependency(%q<resque-status>, [">= 0"])
167
+ s.add_development_dependency(%q<resque_spec>, [">= 0"])
168
+ s.add_development_dependency(%q<dynamic_form>, [">= 0"])
169
+ else
170
+ s.add_dependency(%q<governor>, [">= 0"])
171
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
172
+ s.add_dependency(%q<sqlite3>, [">= 0"])
173
+ s.add_dependency(%q<rspec-rails>, [">= 0"])
174
+ s.add_dependency(%q<mocha>, [">= 0"])
175
+ s.add_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
176
+ s.add_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
177
+ s.add_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
178
+ s.add_dependency(%q<will_paginate>, ["~> 3.0.beta"])
179
+ s.add_dependency(%q<devise>, [">= 0"])
180
+ s.add_dependency(%q<governor_background>, [">= 0"])
181
+ s.add_dependency(%q<delayed_job>, [">= 0"])
182
+ s.add_dependency(%q<resque>, [">= 0"])
183
+ s.add_dependency(%q<resque-status>, [">= 0"])
184
+ s.add_dependency(%q<resque_spec>, [">= 0"])
185
+ s.add_dependency(%q<dynamic_form>, [">= 0"])
186
+ end
187
+ else
188
+ s.add_dependency(%q<governor>, [">= 0"])
189
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
190
+ s.add_dependency(%q<sqlite3>, [">= 0"])
191
+ s.add_dependency(%q<rspec-rails>, [">= 0"])
192
+ s.add_dependency(%q<mocha>, [">= 0"])
193
+ s.add_dependency(%q<factory_girl>, ["~> 2.0.0.beta"])
194
+ s.add_dependency(%q<factory_girl_rails>, ["~> 1.1.beta"])
195
+ s.add_dependency(%q<activerecord-nulldb-adapter>, [">= 0"])
196
+ s.add_dependency(%q<will_paginate>, ["~> 3.0.beta"])
197
+ s.add_dependency(%q<devise>, [">= 0"])
198
+ s.add_dependency(%q<governor_background>, [">= 0"])
199
+ s.add_dependency(%q<delayed_job>, [">= 0"])
200
+ s.add_dependency(%q<resque>, [">= 0"])
201
+ s.add_dependency(%q<resque-status>, [">= 0"])
202
+ s.add_dependency(%q<resque_spec>, [">= 0"])
203
+ s.add_dependency(%q<dynamic_form>, [">= 0"])
204
+ end
205
+ end
206
+
@@ -0,0 +1,18 @@
1
+ module GovernorBackground
2
+ module Controllers
3
+ module Methods
4
+ def self.included(c)
5
+ c.before_filter :show_recent_statuses
6
+ end
7
+
8
+ def show_recent_statuses
9
+ finished_jobs = GovernorBackground::JobManager.finished_jobs
10
+ unless finished_jobs.blank?
11
+ flash[:governor_background] = finished_jobs.map do |job|
12
+ [job.status, t("#{job.method_name}_#{job.status}", :resource => job.resource, :message => job.message, :scope => :governor_background)]
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,70 @@
1
+ module GovernorBackground
2
+ module Delayed
3
+ class Job
4
+ attr_reader :resource, :method_name, :created_at
5
+ def initialize(resource, method_name, job)
6
+ @resource = resource
7
+ @method_name = method_name
8
+ @id = job.try(:id)
9
+ @created_at = Time.now
10
+ end
11
+
12
+ def queued?
13
+ job_queued?
14
+ end
15
+
16
+ def working?
17
+ job_working?
18
+ end
19
+
20
+ def completed?
21
+ job_completed?
22
+ end
23
+
24
+ def failed?
25
+ job_failed?
26
+ end
27
+
28
+ def killed?
29
+ # as far as i know, you can't tell if a job has been killed
30
+ false
31
+ end
32
+
33
+ def status
34
+ job = delayed_job
35
+ return 'queued' if job_queued?(job)
36
+ return 'working' if job_working?(job)
37
+ return 'completed' if job_completed?(job)
38
+ return 'failed' if job_failed?(job)
39
+ raise 'Status unknown.' # we should never get here.
40
+ end
41
+
42
+ def message
43
+ (job = delayed_job) && job.failed? ?
44
+ job.last_error.lines.first.chomp.gsub(/^\{/, '') :
45
+ status.humanize
46
+ end
47
+
48
+ private
49
+ def delayed_job
50
+ ::Delayed::Job.find_by_id(@id)
51
+ end
52
+
53
+ def job_queued?(job = delayed_job)
54
+ job && !job.locked_at
55
+ end
56
+
57
+ def job_working?(job = delayed_job)
58
+ job && job.run_at && job.locked_at && !job.failed?
59
+ end
60
+
61
+ def job_completed?(job = delayed_job)
62
+ job.nil?
63
+ end
64
+
65
+ def job_failed?(job = delayed_job)
66
+ job && job.failed? && job.attempts == ::Delayed::Worker.max_attempts
67
+ end
68
+ end
69
+ end
70
+ end