djinn 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. data/README.rdoc +106 -9
  2. data/Rakefile +4 -2
  3. data/VERSION +1 -1
  4. data/djinn.gemspec +3 -62
  5. data/lib/djinn/base.rb +2 -0
  6. metadata +5 -64
  7. data/example/basic.rb +0 -27
  8. data/example/em.rb +0 -58
  9. data/example/event_machine_djinn.pid +0 -1
  10. data/example/rails/demo/Rakefile +0 -10
  11. data/example/rails/demo/app/controllers/application_controller.rb +0 -10
  12. data/example/rails/demo/app/controllers/books_controller.rb +0 -2
  13. data/example/rails/demo/app/helpers/application_helper.rb +0 -3
  14. data/example/rails/demo/app/helpers/books_helper.rb +0 -2
  15. data/example/rails/demo/app/models/book.rb +0 -7
  16. data/example/rails/demo/app/views/books/_book.html.erb +0 -3
  17. data/example/rails/demo/app/views/books/index.html.erb +0 -13
  18. data/example/rails/demo/app/views/layouts/application.html.erb +0 -5
  19. data/example/rails/demo/config/boot.rb +0 -110
  20. data/example/rails/demo/config/database.yml +0 -22
  21. data/example/rails/demo/config/environment.rb +0 -38
  22. data/example/rails/demo/config/environments/development.rb +0 -17
  23. data/example/rails/demo/config/environments/production.rb +0 -28
  24. data/example/rails/demo/config/environments/test.rb +0 -28
  25. data/example/rails/demo/config/initializers/backtrace_silencers.rb +0 -7
  26. data/example/rails/demo/config/initializers/cookie_verification_secret.rb +0 -7
  27. data/example/rails/demo/config/initializers/inflections.rb +0 -10
  28. data/example/rails/demo/config/initializers/mime_types.rb +0 -5
  29. data/example/rails/demo/config/initializers/new_rails_defaults.rb +0 -21
  30. data/example/rails/demo/config/initializers/session_store.rb +0 -15
  31. data/example/rails/demo/config/locales/en.yml +0 -5
  32. data/example/rails/demo/config/routes.rb +0 -6
  33. data/example/rails/demo/db/migrate/20100726151602_create_books.rb +0 -15
  34. data/example/rails/demo/db/schema.rb +0 -23
  35. data/example/rails/demo/db/seeds.rb +0 -15
  36. data/example/rails/demo/doc/README_FOR_APP +0 -2
  37. data/example/rails/demo/lib/book_djinn.rb +0 -25
  38. data/example/rails/demo/public/404.html +0 -30
  39. data/example/rails/demo/public/422.html +0 -30
  40. data/example/rails/demo/public/500.html +0 -30
  41. data/example/rails/demo/public/favicon.ico +0 -0
  42. data/example/rails/demo/public/images/rails.png +0 -0
  43. data/example/rails/demo/public/javascripts/application.js +0 -2
  44. data/example/rails/demo/public/javascripts/controls.js +0 -963
  45. data/example/rails/demo/public/javascripts/dragdrop.js +0 -973
  46. data/example/rails/demo/public/javascripts/effects.js +0 -1128
  47. data/example/rails/demo/public/javascripts/prototype.js +0 -4320
  48. data/example/rails/demo/public/robots.txt +0 -5
  49. data/example/rails/demo/script/about +0 -4
  50. data/example/rails/demo/script/book_djinn +0 -7
  51. data/example/rails/demo/script/console +0 -3
  52. data/example/rails/demo/script/dbconsole +0 -3
  53. data/example/rails/demo/script/destroy +0 -3
  54. data/example/rails/demo/script/generate +0 -3
  55. data/example/rails/demo/script/performance/benchmarker +0 -3
  56. data/example/rails/demo/script/performance/profiler +0 -3
  57. data/example/rails/demo/script/plugin +0 -3
  58. data/example/rails/demo/script/runner +0 -3
  59. data/example/rails/demo/script/server +0 -3
  60. data/example/rails/demo/test/fixtures/books.yml +0 -11
  61. data/example/rails/demo/test/functional/books_controller_test.rb +0 -8
  62. data/example/rails/demo/test/performance/browsing_test.rb +0 -9
  63. data/example/rails/demo/test/test_helper.rb +0 -38
  64. data/example/rails/demo/test/unit/book_test.rb +0 -8
  65. data/example/rails/demo/test/unit/helpers/books_helper_test.rb +0 -4
@@ -1,16 +1,113 @@
1
1
  = djinn
2
2
 
3
- Description goes here.
3
+ Djinn is a very basic helper for building simple daemons
4
4
 
5
- == Note on Patches/Pull Requests
5
+ == Non-Rails Example
6
+
7
+ #!/usr/bin/env ruby
8
+
9
+ require 'rubygems'
10
+ require 'djinn'
11
+
12
+ class Basic
13
+
14
+ include Djinn
15
+
16
+ # Not providing a "perform" method falls back to the base method
17
+ # in Djinn, which does nothing useful. Make sure your method accepts
18
+ # a config hash, even if it doesn't use it.
19
+ def perform options
20
+ log "ZOMG! A Djinn?"
21
+ end
22
+
23
+ # Strictly optional, lets you do stuff when the Djinn daemon stops.
24
+ # The call to "super" is required, or your daemon will never die
25
+ def handle_exit
26
+ log "Handling a nice graceful exit.."
27
+ super
28
+ end
29
+
30
+ end
31
+
32
+ Run it in the foreground like this:
33
+
34
+ djinn = Basic.new
35
+ djinn.run
36
+
37
+ But running it in the background is sort of the point. A bit contrived, but
38
+ this is the general idea:
39
+
40
+ djinn.start
41
+ sleep(10)
42
+ djinn.stop
43
+
44
+ == Rails Example
45
+
46
+ There's a nice example in the example directory if you check the code out, but
47
+ here's the gist of it.
48
+
49
+ Assumes a scenario where you have a Book model that keeps a count of how many
50
+ times a book has been read.
51
+
52
+ Create a file in RAILS_ROOT/lib or somewhere similar:
53
+
54
+ BOOK_WORKER_INTERVAL = 5
55
+
56
+ class BookDjinn
57
+
58
+ require 'djinn/rails'
59
+
60
+ include Djinn::Rails
61
+
62
+ def perform config
63
+ EM.run do
64
+ log "Workers will run every #{BOOK_WORKER_INTERVAL} secs"
65
+ EM::PeriodicTimer.new(BOOK_WORKER_INTERVAL) do
66
+ log "There are #{Book.count} book(s) in the database"
67
+ log "Updating read counts for all books.."
68
+ Book.all.each &:read!
69
+ end
70
+ end
71
+ end
72
+
73
+ def handle_exit
74
+ EM.stop
75
+ super
76
+ end
77
+
78
+ end
79
+
80
+ Right, now you need to start it somehow. The easiest way is to create a file
81
+ in RAILS_ROOT/scripts and pop this in it:
82
+
83
+ #!/usr/bin/env ruby
84
+ require 'rubygems'
85
+ require File.join(File.dirname(__FILE__), '../lib/book_djinn')
86
+ BookDjinn.go ARGV
6
87
 
7
- * Fork the project.
8
- * Make your feature addition or bug fix.
9
- * Add tests for it. This is important so I don't break it in a
10
- future version unintentionally.
11
- * Commit, do not mess with rakefile, version, or history.
12
- (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
13
- * Send me a pull request. Bonus points for topic branches.
88
+ Righto, now start it from RAILS_ROOT:
89
+
90
+ ruby script/book_djinn
91
+
92
+ Okay, but that defaults to "run", which starts it in the foreground and also
93
+ uses the rails development environment by default. Try this:
94
+
95
+ ruby script/book_djinn --help
96
+
97
+ That should give you a better idea of what's going on, then try this:
98
+
99
+ ruby script/book_djinn start -e production
100
+
101
+ Yay, we have a daemon running in the background! To stop it:
102
+
103
+ ruby script/book_djinn stop
104
+
105
+ That gives you more-or-less everything you need to build something basic
106
+ and monitor it with god or a similar process monitor.
107
+
108
+ == TODO
109
+
110
+ Lots. Keep 'em peeled.
14
111
 
15
112
  == Copyright
16
113
 
data/Rakefile CHANGED
@@ -5,12 +5,14 @@ begin
5
5
  require 'jeweler'
6
6
  Jeweler::Tasks.new do |gem|
7
7
  gem.name = "djinn"
8
- gem.summary = %Q{Simple helper for creating daemons}
9
- gem.description = %Q{Helper for creating custom daemon, mostly for rails}
8
+ gem.summary = %Q{Helper for creating simple custom daemons}
9
+ gem.description = %Q{Helper for creating simple custom daemons}
10
10
  gem.email = "darksavant@gmail.com"
11
11
  gem.homepage = "http://github.com/craigp/djinn"
12
12
  gem.authors = ["Craig Paterson"]
13
13
  gem.add_development_dependency "shoulda", ">= 2.11.1"
14
+ gem.files.exclude 'example/**/*'
15
+ gem.test_files.exclude 'example/**/*'
14
16
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
15
17
  end
16
18
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.5
@@ -5,12 +5,12 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{djinn}
8
- s.version = "0.0.3"
8
+ s.version = "0.0.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Craig Paterson"]
12
12
  s.date = %q{2010-07-27}
13
- s.description = %q{Helper for creating custom daemon, mostly for rails}
13
+ s.description = %q{Helper for creating simple custom daemons}
14
14
  s.email = %q{darksavant@gmail.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE",
@@ -24,65 +24,6 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "djinn.gemspec",
27
- "example/basic.rb",
28
- "example/em.rb",
29
- "example/event_machine_djinn.pid",
30
- "example/rails/demo/Rakefile",
31
- "example/rails/demo/app/controllers/application_controller.rb",
32
- "example/rails/demo/app/controllers/books_controller.rb",
33
- "example/rails/demo/app/helpers/application_helper.rb",
34
- "example/rails/demo/app/helpers/books_helper.rb",
35
- "example/rails/demo/app/models/book.rb",
36
- "example/rails/demo/app/views/books/_book.html.erb",
37
- "example/rails/demo/app/views/books/index.html.erb",
38
- "example/rails/demo/app/views/layouts/application.html.erb",
39
- "example/rails/demo/config/boot.rb",
40
- "example/rails/demo/config/database.yml",
41
- "example/rails/demo/config/environment.rb",
42
- "example/rails/demo/config/environments/development.rb",
43
- "example/rails/demo/config/environments/production.rb",
44
- "example/rails/demo/config/environments/test.rb",
45
- "example/rails/demo/config/initializers/backtrace_silencers.rb",
46
- "example/rails/demo/config/initializers/cookie_verification_secret.rb",
47
- "example/rails/demo/config/initializers/inflections.rb",
48
- "example/rails/demo/config/initializers/mime_types.rb",
49
- "example/rails/demo/config/initializers/new_rails_defaults.rb",
50
- "example/rails/demo/config/initializers/session_store.rb",
51
- "example/rails/demo/config/locales/en.yml",
52
- "example/rails/demo/config/routes.rb",
53
- "example/rails/demo/db/migrate/20100726151602_create_books.rb",
54
- "example/rails/demo/db/schema.rb",
55
- "example/rails/demo/db/seeds.rb",
56
- "example/rails/demo/doc/README_FOR_APP",
57
- "example/rails/demo/lib/book_djinn.rb",
58
- "example/rails/demo/public/404.html",
59
- "example/rails/demo/public/422.html",
60
- "example/rails/demo/public/500.html",
61
- "example/rails/demo/public/favicon.ico",
62
- "example/rails/demo/public/images/rails.png",
63
- "example/rails/demo/public/javascripts/application.js",
64
- "example/rails/demo/public/javascripts/controls.js",
65
- "example/rails/demo/public/javascripts/dragdrop.js",
66
- "example/rails/demo/public/javascripts/effects.js",
67
- "example/rails/demo/public/javascripts/prototype.js",
68
- "example/rails/demo/public/robots.txt",
69
- "example/rails/demo/script/about",
70
- "example/rails/demo/script/book_djinn",
71
- "example/rails/demo/script/console",
72
- "example/rails/demo/script/dbconsole",
73
- "example/rails/demo/script/destroy",
74
- "example/rails/demo/script/generate",
75
- "example/rails/demo/script/performance/benchmarker",
76
- "example/rails/demo/script/performance/profiler",
77
- "example/rails/demo/script/plugin",
78
- "example/rails/demo/script/runner",
79
- "example/rails/demo/script/server",
80
- "example/rails/demo/test/fixtures/books.yml",
81
- "example/rails/demo/test/functional/books_controller_test.rb",
82
- "example/rails/demo/test/performance/browsing_test.rb",
83
- "example/rails/demo/test/test_helper.rb",
84
- "example/rails/demo/test/unit/book_test.rb",
85
- "example/rails/demo/test/unit/helpers/books_helper_test.rb",
86
27
  "lib/djinn.rb",
87
28
  "lib/djinn/base.rb",
88
29
  "lib/djinn/logging.rb",
@@ -97,7 +38,7 @@ Gem::Specification.new do |s|
97
38
  s.rdoc_options = ["--charset=UTF-8"]
98
39
  s.require_paths = ["lib"]
99
40
  s.rubygems_version = %q{1.3.7}
100
- s.summary = %q{Simple helper for creating daemons}
41
+ s.summary = %q{Helper for creating simple custom daemons}
101
42
  s.test_files = [
102
43
  "test/helper.rb",
103
44
  "test/test_djinn.rb"
@@ -1,3 +1,5 @@
1
+ $:.unshift(File.dirname(__FILE__))
2
+
1
3
  require 'tonic'
2
4
  require 'pid_file'
3
5
  require 'logging'
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: djinn
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 21
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 5
10
+ version: 0.0.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Craig Paterson
@@ -34,7 +34,7 @@ dependencies:
34
34
  version: 2.11.1
35
35
  type: :development
36
36
  version_requirements: *id001
37
- description: Helper for creating custom daemon, mostly for rails
37
+ description: Helper for creating simple custom daemons
38
38
  email: darksavant@gmail.com
39
39
  executables: []
40
40
 
@@ -51,65 +51,6 @@ files:
51
51
  - Rakefile
52
52
  - VERSION
53
53
  - djinn.gemspec
54
- - example/basic.rb
55
- - example/em.rb
56
- - example/event_machine_djinn.pid
57
- - example/rails/demo/Rakefile
58
- - example/rails/demo/app/controllers/application_controller.rb
59
- - example/rails/demo/app/controllers/books_controller.rb
60
- - example/rails/demo/app/helpers/application_helper.rb
61
- - example/rails/demo/app/helpers/books_helper.rb
62
- - example/rails/demo/app/models/book.rb
63
- - example/rails/demo/app/views/books/_book.html.erb
64
- - example/rails/demo/app/views/books/index.html.erb
65
- - example/rails/demo/app/views/layouts/application.html.erb
66
- - example/rails/demo/config/boot.rb
67
- - example/rails/demo/config/database.yml
68
- - example/rails/demo/config/environment.rb
69
- - example/rails/demo/config/environments/development.rb
70
- - example/rails/demo/config/environments/production.rb
71
- - example/rails/demo/config/environments/test.rb
72
- - example/rails/demo/config/initializers/backtrace_silencers.rb
73
- - example/rails/demo/config/initializers/cookie_verification_secret.rb
74
- - example/rails/demo/config/initializers/inflections.rb
75
- - example/rails/demo/config/initializers/mime_types.rb
76
- - example/rails/demo/config/initializers/new_rails_defaults.rb
77
- - example/rails/demo/config/initializers/session_store.rb
78
- - example/rails/demo/config/locales/en.yml
79
- - example/rails/demo/config/routes.rb
80
- - example/rails/demo/db/migrate/20100726151602_create_books.rb
81
- - example/rails/demo/db/schema.rb
82
- - example/rails/demo/db/seeds.rb
83
- - example/rails/demo/doc/README_FOR_APP
84
- - example/rails/demo/lib/book_djinn.rb
85
- - example/rails/demo/public/404.html
86
- - example/rails/demo/public/422.html
87
- - example/rails/demo/public/500.html
88
- - example/rails/demo/public/favicon.ico
89
- - example/rails/demo/public/images/rails.png
90
- - example/rails/demo/public/javascripts/application.js
91
- - example/rails/demo/public/javascripts/controls.js
92
- - example/rails/demo/public/javascripts/dragdrop.js
93
- - example/rails/demo/public/javascripts/effects.js
94
- - example/rails/demo/public/javascripts/prototype.js
95
- - example/rails/demo/public/robots.txt
96
- - example/rails/demo/script/about
97
- - example/rails/demo/script/book_djinn
98
- - example/rails/demo/script/console
99
- - example/rails/demo/script/dbconsole
100
- - example/rails/demo/script/destroy
101
- - example/rails/demo/script/generate
102
- - example/rails/demo/script/performance/benchmarker
103
- - example/rails/demo/script/performance/profiler
104
- - example/rails/demo/script/plugin
105
- - example/rails/demo/script/runner
106
- - example/rails/demo/script/server
107
- - example/rails/demo/test/fixtures/books.yml
108
- - example/rails/demo/test/functional/books_controller_test.rb
109
- - example/rails/demo/test/performance/browsing_test.rb
110
- - example/rails/demo/test/test_helper.rb
111
- - example/rails/demo/test/unit/book_test.rb
112
- - example/rails/demo/test/unit/helpers/books_helper_test.rb
113
54
  - lib/djinn.rb
114
55
  - lib/djinn/base.rb
115
56
  - lib/djinn/logging.rb
@@ -152,7 +93,7 @@ rubyforge_project:
152
93
  rubygems_version: 1.3.7
153
94
  signing_key:
154
95
  specification_version: 3
155
- summary: Simple helper for creating daemons
96
+ summary: Helper for creating simple custom daemons
156
97
  test_files:
157
98
  - test/helper.rb
158
99
  - test/test_djinn.rb
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $:.unshift(File.join(File.dirname(__FILE__), "../lib/"))
4
-
5
- require 'djinn'
6
-
7
- class Basic
8
-
9
- include Djinn
10
-
11
- # not providing a "perform" method falls back to the
12
- # base method in Djinn..
13
-
14
- def handle_exit
15
- puts "Handling a nice graceful exit.."
16
- super
17
- end
18
-
19
- end
20
-
21
- djinn = Basic.new
22
- djinn.run
23
-
24
- # puts "Running for 10 secs in the background and then stopping.."
25
- # djinn.start
26
- # sleep(10)
27
- # djinn.stop
@@ -1,58 +0,0 @@
1
- $:.unshift(File.join(File.dirname(__FILE__), "../lib/"))
2
-
3
- require 'djinn'
4
- require 'rubygems'
5
- require 'eventmachine'
6
-
7
- WORKER_INTERVAL = 5
8
-
9
- class Worker
10
-
11
- include EM::Deferrable
12
-
13
- def do_stuff
14
- puts "Worker doing stuff.."
15
- succeed(Time.now)
16
- rescue => e
17
- fail(e)
18
- end
19
-
20
- end
21
-
22
- class EventMachineDjinn
23
-
24
- include Djinn
25
-
26
- def perform config
27
-
28
- worker = EM.spawn do
29
- worker = Worker.new
30
- worker.callback { |time| puts "Worker completed at: #{time}" }
31
- worker.errback { |ex| puts "Twitter worker failed: #{ex}" }
32
- worker.do_stuff
33
- end
34
-
35
- EM.run do
36
- log "Workers will run every #{WORKER_INTERVAL} secs"
37
- EM::PeriodicTimer.new(WORKER_INTERVAL) do
38
- worker.notify
39
- end
40
- end
41
-
42
- end
43
-
44
- def handle_exit
45
- EM.stop
46
- super
47
- end
48
-
49
- end
50
-
51
- puts "Running for 30 secs and then stopping.."
52
-
53
- djinn = EventMachineDjinn.new
54
- djinn.start
55
- sleep(30)
56
- djinn.stop
57
-
58
-
@@ -1 +0,0 @@
1
- 34464
@@ -1,10 +0,0 @@
1
- # Add your own tasks in files placed in lib/tasks ending in .rake,
2
- # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
-
4
- require(File.join(File.dirname(__FILE__), 'config', 'boot'))
5
-
6
- require 'rake'
7
- require 'rake/testtask'
8
- require 'rake/rdoctask'
9
-
10
- require 'tasks/rails'
@@ -1,10 +0,0 @@
1
- # Filters added to this controller apply to all controllers in the application.
2
- # Likewise, all the methods added will be available for all controllers.
3
-
4
- class ApplicationController < ActionController::Base
5
- helper :all # include all helpers, all the time
6
- protect_from_forgery # See ActionController::RequestForgeryProtection for details
7
-
8
- # Scrub sensitive parameters from your log
9
- # filter_parameter_logging :password
10
- end