daemon-kit 0.2.3 → 0.3.0.rc1

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 (56) hide show
  1. checksums.yaml +6 -14
  2. data/.travis.yml +15 -0
  3. data/Gemfile +1 -1
  4. data/History.txt +4 -0
  5. data/{README.rdoc → README.md} +43 -34
  6. data/Rakefile +1 -1
  7. data/bin/daemon-kit +4 -0
  8. data/daemon-kit.gemspec +6 -6
  9. data/features/amqp_generator.feature +27 -0
  10. data/features/app_generator.feature +46 -0
  11. data/features/capistrano_generator.feature +30 -0
  12. data/features/cron_generator.feature +26 -0
  13. data/features/ruote_generator.feature +27 -0
  14. data/features/sqs_generator.feature +21 -0
  15. data/features/step_definitions/daemon_steps.rb +10 -0
  16. data/features/support/env.rb +8 -0
  17. data/features/test_unit_generator.feature +18 -0
  18. data/lib/daemon_kit.rb +0 -1
  19. data/lib/daemon_kit/generators.rb +0 -1
  20. data/lib/daemon_kit/version.rb +1 -1
  21. data/lib/generators/daemon_kit/amqp/amqp_generator.rb +1 -1
  22. data/lib/generators/daemon_kit/app/app_generator.rb +1 -3
  23. data/lib/generators/daemon_kit/app/templates/script/destroy +1 -1
  24. data/lib/generators/daemon_kit/capistrano/capistrano_generator.rb +1 -1
  25. data/lib/generators/daemon_kit/cron/cron_generator.rb +1 -1
  26. data/lib/generators/daemon_kit/rspec/templates/spec/%app_name%_spec.rb +3 -3
  27. data/lib/generators/daemon_kit/ruote/ruote_generator.rb +4 -2
  28. data/lib/generators/daemon_kit/sqs/sqs_generator.rb +1 -1
  29. data/spec/abstract_logger_spec.rb +3 -3
  30. data/spec/spec_helper.rb +17 -9
  31. data/tasks/cucumber.rake +4 -11
  32. metadata +69 -82
  33. data/lib/daemon_kit/nanite.rb +0 -7
  34. data/lib/daemon_kit/nanite/agent.rb +0 -77
  35. data/lib/generators/daemon_kit/nanite_agent/USAGE +0 -5
  36. data/lib/generators/daemon_kit/nanite_agent/nanite_agent_generator.rb +0 -29
  37. data/lib/generators/daemon_kit/nanite_agent/templates/config/nanite.yml +0 -35
  38. data/lib/generators/daemon_kit/nanite_agent/templates/config/pre-daemonize/nanite_agent.rb +0 -6
  39. data/lib/generators/daemon_kit/nanite_agent/templates/lib/actors/sample.rb +0 -11
  40. data/lib/generators/daemon_kit/nanite_agent/templates/libexec/%app_name%-daemon.rb +0 -31
  41. data/script/console +0 -10
  42. data/script/destroy +0 -14
  43. data/script/generate +0 -14
  44. data/script/txt2html +0 -71
  45. data/tasks/tests.rake +0 -6
  46. data/test/test_amqp_generator.rb +0 -48
  47. data/test/test_cron_generator.rb +0 -45
  48. data/test/test_daemon-kit_generator.rb +0 -84
  49. data/test/test_daemon_kit_config.rb +0 -28
  50. data/test/test_deploy_capistrano_generator.rb +0 -48
  51. data/test/test_generator_helper.rb +0 -29
  52. data/test/test_helper.rb +0 -7
  53. data/test/test_nanite_agent_generator.rb +0 -49
  54. data/test/test_ruote_generator.rb +0 -51
  55. data/test/test_sqs_generator.rb +0 -48
  56. data/test/test_test_unit_generator.rb +0 -46
@@ -1,7 +0,0 @@
1
- module DaemonKit
2
- # For building daemons that integrate with nanite, either as mappers
3
- # or agents. See #DaemonKit::Nanite::Agent so far
4
- module Nanite
5
- autoload :Agent, "daemon_kit/nanite/agent"
6
- end
7
- end
@@ -1,77 +0,0 @@
1
- module Nanite
2
- class Agent
3
-
4
- attr_accessor :init_block
5
-
6
- def load_actors_with_daemon_kit_changes( &block )
7
- actors = @options[:actors]
8
- Dir["#{DaemonKit.root}/lib/actors/*.rb"].each do |actor|
9
- next if actors && !actors.include?( File.basename(actor, '.rb') )
10
- Nanite::Log.info( "[setup] loading #{actor}" )
11
- require actor
12
- end
13
-
14
- self.init_block.call( self )
15
- end
16
-
17
- alias_method :load_actors_without_daemon_kit_changes, :load_actors
18
- alias_method :load_actors, :load_actors_with_daemon_kit_changes
19
- end
20
- end
21
-
22
- module DaemonKit
23
- module Nanite
24
- # Pull support into a daemon for being a nanite agent.
25
- class Agent
26
-
27
- @@instance = nil
28
-
29
- class << self
30
-
31
- def instance
32
- @instance ||= new
33
- end
34
-
35
- private :new
36
-
37
- def run(&block)
38
- instance.run(&block)
39
- end
40
-
41
- end
42
-
43
- def initialize
44
- @config = DaemonKit::Config.load( 'nanite' ).to_h( true )
45
-
46
- config_agent
47
- end
48
-
49
- def run(&block)
50
- # Ensure graceful shutdown of the connection to the broker
51
- DaemonKit.trap('INT') { ::EM.stop }
52
- DaemonKit.trap('TERM') { ::EM.stop }
53
- ::Nanite::Log.logger = DaemonKit.logger
54
-
55
- # Start our mapper
56
- mapper_thread = Thread.new do
57
- EM.run do
58
- agent = ::Nanite::Agent.new( @config )
59
- agent.init_block = block
60
- agent.run
61
- end
62
- end
63
-
64
- mapper_thread.join
65
- end
66
-
67
- private
68
-
69
- # Make sure to fine tune the agent config to be DK friendly
70
- def config_agent
71
- @config[:root] = DAEMON_ROOT
72
- @config[:daemonize] = false
73
- @config[:actors_dir] = File.join(DAEMON_ROOT, 'lib', 'actors')
74
- end
75
- end
76
- end
77
- end
@@ -1,5 +0,0 @@
1
- Description:
2
-
3
-
4
- Usage:
5
-
@@ -1,29 +0,0 @@
1
- module DaemonKit
2
- module Generators
3
- class NaniteAgentGenerator < Base
4
-
5
- def update_gemfile
6
- append_file 'Gemfile', "gem 'nanite'\n"
7
- end
8
-
9
- def create_config
10
- directory 'config'
11
- end
12
-
13
- def create_actors
14
- directory 'lib'
15
- end
16
-
17
- def create_libexec
18
- directory 'libexec'
19
- end
20
-
21
- protected
22
-
23
- def self.source_root
24
- File.expand_path( File.join( File.dirname(__FILE__), 'templates') )
25
- end
26
-
27
- end
28
- end
29
- end
@@ -1,35 +0,0 @@
1
- # Nanite agent configuration file
2
-
3
- # These values will be used to configure the nanite agent, any values
4
- # omitted will let the gem use it's own defaults.
5
-
6
- # The configuration specifies the following keys:
7
- # * user - Specify the rabbitmq username
8
- # * pass - Specify the rabbitmq password
9
- # * host - Specify the rabbitmq hostname
10
- # * vhost - Specify the rabbitmq vhost
11
- # * port - Specify the rabbitmq PORT, default 5672
12
- # * token - Specify the agent identity
13
- # * security - Use Security features of rabbitmq to restrict nanites to themselves
14
- # * format - The serialization type to use for transfering data. Can be marshal, json or yaml. Default is marshal
15
- # * tag - YAML array of tags
16
- # * ping-time - Specify how often the agents contacts the mapper
17
- # * actors - Comma separated list of actors to load (all ruby files in actors directory by default)
18
-
19
- defaults: &defaults
20
- user: nanite
21
- pass: testing
22
- host: localhost
23
- vhost: /nanite
24
- # tag:
25
- # - foo
26
- # - bar
27
-
28
- development:
29
- <<: *defaults
30
-
31
- test:
32
- <<: *defaults
33
-
34
- production:
35
- <<: *defaults
@@ -1,6 +0,0 @@
1
- begin
2
- require 'nanite'
3
- rescue LoadError
4
- $stderr.puts "Missing nanite gem. Please run 'bundle install'."
5
- exit 1
6
- end
@@ -1,11 +0,0 @@
1
- class Sample
2
- include Nanite::Actor
3
-
4
- expose :echo
5
-
6
- # Print to STDOUT and return
7
- def echo( payload )
8
- p payload
9
- payload
10
- end
11
- end
@@ -1,31 +0,0 @@
1
- # Generated nanite agent daemon
2
-
3
- # Do your post daemonization configuration here
4
- # At minimum you need just the first line (without the block), or a lot
5
- # of strange things might start happening...
6
- DaemonKit::Application.running! do |config|
7
- # Trap signals with blocks or procs
8
- # config.trap( 'INT' ) do
9
- # # do something clever
10
- # end
11
- # config.trap( 'TERM', Proc.new { puts 'Going down' } )
12
- end
13
-
14
- # IMPORTANT CONFIGURATION NOTE
15
- #
16
- # Please review and update 'config/nanite.yml' accordingly or this
17
- # daemon won't work as advertised.
18
- #
19
- # Your actors live in DAEMON_ROOT/lib/actors
20
-
21
- # Run the agent, and get the running agent.
22
- DaemonKit::Nanite::Agent.run do |agent|
23
- # Use the yielded agent instance to register your actors:
24
- agent.register Sample.new
25
-
26
- # This block can used to make your agent perform other tasks as
27
- # well. Remember that you have access to a running EventMachine
28
- # reactor since the AMQP gem used by nanite uses it. Other than that
29
- # you can mostly leave this file alone and concentrate on developing
30
- # your actors in the lib/actors/ directory of the project.
31
- end
data/script/console DELETED
@@ -1,10 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # File: script/console
3
- irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
-
5
- libs = " -r irb/completion"
6
- # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
- # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
- libs << " -r #{File.dirname(__FILE__) + '/../lib/daemon-kit.rb'}"
9
- puts "Loading daemon-kit gem"
10
- exec "#{irb} #{libs} --simple-prompt"
data/script/destroy DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
-
4
- begin
5
- require 'rubigen'
6
- rescue LoadError
7
- require 'rubygems'
8
- require 'rubigen'
9
- end
10
- require 'rubigen/scripts/destroy'
11
-
12
- ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
- RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
- RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
- APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
-
4
- begin
5
- require 'rubigen'
6
- rescue LoadError
7
- require 'rubygems'
8
- require 'rubigen'
9
- end
10
- require 'rubigen/scripts/generate'
11
-
12
- ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
- RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
- RubiGen::Scripts::Generate.new.run(ARGV)
data/script/txt2html DELETED
@@ -1,71 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- load File.dirname(__FILE__) + "/../Rakefile"
4
- require 'rubyforge'
5
- require 'redcloth'
6
- require 'syntax/convertors/html'
7
- require 'erb'
8
-
9
- download = "http://rubyforge.org/projects/#{$hoe.rubyforge_name}"
10
- version = $hoe.version
11
-
12
- def rubyforge_project_id
13
- RubyForge.new.configure.autoconfig["group_ids"][$hoe.rubyforge_name]
14
- end
15
-
16
- class Fixnum
17
- def ordinal
18
- # teens
19
- return 'th' if (10..19).include?(self % 100)
20
- # others
21
- case self % 10
22
- when 1: return 'st'
23
- when 2: return 'nd'
24
- when 3: return 'rd'
25
- else return 'th'
26
- end
27
- end
28
- end
29
-
30
- class Time
31
- def pretty
32
- return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
33
- end
34
- end
35
-
36
- def convert_syntax(syntax, source)
37
- return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
38
- end
39
-
40
- if ARGV.length >= 1
41
- src, template = ARGV
42
- template ||= File.join(File.dirname(__FILE__), '/../website/template.html.erb')
43
- else
44
- puts("Usage: #{File.split($0).last} source.txt [template.html.erb] > output.html")
45
- exit!
46
- end
47
-
48
- template = ERB.new(File.open(template).read)
49
-
50
- title = nil
51
- body = nil
52
- File.open(src) do |fsrc|
53
- title_text = fsrc.readline
54
- body_text_template = fsrc.read
55
- body_text = ERB.new(body_text_template).result(binding)
56
- syntax_items = []
57
- body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
58
- ident = syntax_items.length
59
- element, syntax, source = $1, $2, $3
60
- syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
61
- "syntax-temp-#{ident}"
62
- }
63
- title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
64
- body = RedCloth.new(body_text).to_html
65
- body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
66
- end
67
- stat = File.stat(src)
68
- created = stat.ctime
69
- modified = stat.mtime
70
-
71
- $stdout << template.result(binding)
data/tasks/tests.rake DELETED
@@ -1,6 +0,0 @@
1
- require 'rake/testtask'
2
- Rake::TestTask.new do |t|
3
- t.libs << "test"
4
- t.test_files = FileList['test/test_*.rb']
5
- t.verbose = true
6
- end
@@ -1,48 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
2
-
3
-
4
- class TestAmqpGenerator < Test::Unit::TestCase
5
- include RubiGen::GeneratorTestHelper
6
-
7
- def setup
8
- bare_setup
9
- end
10
-
11
- def teardown
12
- bare_teardown
13
- end
14
-
15
- # Some generator-related assertions:
16
- # assert_generated_file(name, &block) # block passed the file contents
17
- # assert_directory_exists(name)
18
- # assert_generated_class(name, &block)
19
- # assert_generated_module(name, &block)
20
- # assert_generated_test_for(name, &block)
21
- # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
22
- # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
23
- #
24
- # Other helper methods are:
25
- # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
26
- # bare_setup - place this in setup method to create the APP_ROOT folder for each test
27
- # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
28
-
29
- def test_generator_without_options
30
- name = "myapp"
31
- run_generator('amqp', [name], sources)
32
- assert_directory_exists "config"
33
- assert_directory_exists "config/initializers"
34
- assert_generated_file "config/amqp.yml"
35
- assert_generated_file "config/initializers/myapp.rb"
36
- assert_generated_file "libexec/myapp-daemon.rb"
37
- end
38
-
39
- private
40
- def sources
41
- [RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
42
- ]
43
- end
44
-
45
- def generator_path
46
- "daemon_generators"
47
- end
48
- end
@@ -1,45 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
2
-
3
-
4
- class TestCronGenerator < Test::Unit::TestCase
5
- include RubiGen::GeneratorTestHelper
6
-
7
- def setup
8
- bare_setup
9
- end
10
-
11
- def teardown
12
- bare_teardown
13
- end
14
-
15
- # Some generator-related assertions:
16
- # assert_generated_file(name, &block) # block passed the file contents
17
- # assert_directory_exists(name)
18
- # assert_generated_class(name, &block)
19
- # assert_generated_module(name, &block)
20
- # assert_generated_test_for(name, &block)
21
- # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
22
- # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
23
- #
24
- # Other helper methods are:
25
- # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
26
- # bare_setup - place this in setup method to create the APP_ROOT folder for each test
27
- # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
28
-
29
- def test_generator_without_options
30
- name = "myapp"
31
- run_generator('cron', [name], sources)
32
- assert_directory_exists "config/initializers"
33
- assert_generated_file "config/initializers/myapp.rb"
34
- end
35
-
36
- private
37
- def sources
38
- [RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
39
- ]
40
- end
41
-
42
- def generator_path
43
- "daemon_generators"
44
- end
45
- end
@@ -1,84 +0,0 @@
1
- require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
2
-
3
- class TestDaemonKitGenerator < Test::Unit::TestCase
4
- include RubiGen::GeneratorTestHelper
5
-
6
- attr_reader :daemon_name
7
- def setup
8
- bare_setup
9
- @daemon_name = File.basename(File.expand_path(APP_ROOT))
10
- end
11
-
12
- def teardown
13
- bare_teardown
14
- end
15
-
16
- # Some generator-related assertions:
17
- # assert_generated_file(name, &block) # block passed the file contents
18
- # assert_directory_exists(name)
19
- # assert_generated_class(name, &block)
20
- # assert_generated_module(name, &block)
21
- # assert_generated_test_for(name, &block)
22
- # The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
23
- # assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
24
- #
25
- # Other helper methods are:
26
- # app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
27
- # bare_setup - place this in setup method to create the APP_ROOT folder for each test
28
- # bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
29
-
30
- def test_generator_without_options
31
- run_generator('daemon_kit', [APP_ROOT], sources)
32
-
33
- assert_generated_file "README"
34
- assert_generated_file "Rakefile"
35
- assert_directory_exists "bin"
36
- assert_generated_file "bin/#{daemon_name}"
37
- assert_directory_exists "config"
38
- assert_generated_file "config/arguments.rb"
39
- assert_generated_file "config/boot.rb"
40
- assert_generated_file "config/environment.rb"
41
- assert_generated_file "config/environments/development.rb"
42
- assert_generated_file "config/environments/test.rb"
43
- assert_generated_file "config/environments/production.rb"
44
- assert_directory_exists "config/pre-daemonize"
45
- assert_generated_file "config/pre-daemonize/readme"
46
- assert_directory_exists "config/post-daemonize"
47
- assert_generated_file "config/post-daemonize/readme"
48
- assert_directory_exists "lib"
49
- assert_generated_file "lib/#{daemon_name}.rb"
50
- assert_directory_exists "libexec"
51
- assert_generated_file "libexec/#{daemon_name}-daemon.rb"
52
- assert_directory_exists "log"
53
- assert_directory_exists "script"
54
- assert_generated_file "script/console"
55
- assert_generated_file "script/destroy"
56
- assert_generated_file "script/generate"
57
- assert_directory_exists "spec"
58
- assert_directory_exists "tasks"
59
- assert_directory_exists "vendor"
60
- assert_directory_exists "tmp"
61
-
62
- assert !File.exists?("#{APP_ROOT}/Capfile"), 'Capfile generated, but should not be'
63
- end
64
-
65
- def test_generator_with_capistrano_deployer
66
- run_generator('daemon_kit', [APP_ROOT, '-d capistrano'], sources)
67
-
68
- assert_generated_file "Capfile"
69
- assert_generated_file "config/deploy.rb"
70
- end
71
-
72
- private
73
- def sources
74
- [
75
- RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path)),
76
- RubiGen::PathSource.new(:app, File.join(File.dirname(__FILE__), "..", "daemon_generators")),
77
- RubiGen::PathSource.new(:app, File.join(File.dirname(__FILE__), "..", "rubygems_generators"))
78
- ]
79
- end
80
-
81
- def generator_path
82
- "app_generators"
83
- end
84
- end