daemonizer 0.1.0 → 0.1.1

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.
data/README.md CHANGED
@@ -84,8 +84,17 @@ Usage
84
84
  log_file "log/daemonizer.log" #relative to Demfile
85
85
 
86
86
  handler ::MyBackgroundSolution::DaemonizerHandler
87
-
88
- set_option :queue, lambda { |worker_id, worker_count| "queue_#{worker_id}"}
87
+
88
+ #automatically-parsed option by daemonizer
89
+ set_option :queue do |worker_id, worker_count|
90
+ "queue_#{worker_id}"
91
+ end
92
+
93
+ #simple string option
94
+ set_option :author, "Gleb Pomykalov"
95
+
96
+ #lambda-option (transparent for daemonizer, fully processed by handler)
97
+ set_option :on_error, lambda { |object| object.logger.fatal "epic fail"}
89
98
  end
90
99
 
91
100
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
data/daemonizer.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{daemonizer}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Gleb Pomykalov"]
12
- s.date = %q{2010-07-08}
12
+ s.date = %q{2010-07-12}
13
13
  s.default_executable = %q{daemonizer}
14
14
  s.description = %q{Inspired by bundler and rack. Mostly built on top of Alexey Kovyrin's loops code. http://github.com/kovyrin/loops}
15
15
  s.email = %q{glebpom@gmail.com}
@@ -35,6 +35,7 @@ Gem::Specification.new do |s|
35
35
  "lib/daemonizer/engine.rb",
36
36
  "lib/daemonizer/errors.rb",
37
37
  "lib/daemonizer/handler.rb",
38
+ "lib/daemonizer/option.rb",
38
39
  "lib/daemonizer/process_manager.rb",
39
40
  "lib/daemonizer/worker.rb",
40
41
  "lib/daemonizer/worker_pool.rb"
@@ -13,6 +13,7 @@ module Daemonizer
13
13
  autoload :ProcessManager, __p('process_manager')
14
14
  autoload :Handler, __p('handler')
15
15
  autoload :FakeHandler, __p('handler')
16
+ autoload :Option, __p('option')
16
17
 
17
18
  include Errors
18
19
  end
@@ -12,7 +12,7 @@ module Daemonizer
12
12
  validate
13
13
  initialize_handler
14
14
  end
15
-
15
+
16
16
  def initialize_handler
17
17
  if @options[:after_init]
18
18
  @handler = FakeHandler.new(@options[:before_init], @options[:after_init], @options)
@@ -22,7 +22,7 @@ module Daemonizer
22
22
  end
23
23
  @handler.logger = @logger
24
24
  end
25
-
25
+
26
26
  def init_logger
27
27
  @logger = Logger.new @pool.to_s
28
28
  outputter = FileOutputter.new('log', :filename => self.log_file)
@@ -31,7 +31,7 @@ module Daemonizer
31
31
  @logger.level = INFO
32
32
  GDC.set "#{Process.pid}/monitor"
33
33
  end
34
-
34
+
35
35
  def init_defaults
36
36
  @options[:before_init] ||= nil
37
37
  @options[:after_init] ||= nil
@@ -43,7 +43,7 @@ module Daemonizer
43
43
  @options[:handler] ||= nil
44
44
  @options[:handler_options] ||= {}
45
45
  end
46
-
46
+
47
47
  def validate
48
48
  raise ConfigError, "Workers count should be more then zero" if @options[:workers] < 1
49
49
  raise ConfigError, "Engine #{@options[:engine]} is not known" unless [:fork, :thread].include?(@options[:engine])
@@ -61,13 +61,13 @@ module Daemonizer
61
61
  raise ConfigError, "after_init should have block" unless @options[:after_init].is_a?(Proc)
62
62
  end
63
63
  end
64
-
64
+
65
65
  [:engine, :workers, :poll_period, :root].each do |method|
66
66
  define_method method do
67
67
  @options[method.to_sym]
68
68
  end
69
69
  end
70
-
70
+
71
71
  [:log_file, :pid_file].each do |method|
72
72
  define_method method do
73
73
  File.join(Daemonizer.root, @options[method.to_sym])
@@ -15,9 +15,15 @@ module Daemonizer
15
15
  @configs = {}
16
16
  end
17
17
 
18
- def set_option(option, value)
18
+ def set_option(option, value = nil, &block)
19
19
  @options[:handler_options] ||= {}
20
- @options[:handler_options][option.to_sym] = value
20
+ if value
21
+ @options[:handler_options][option.to_sym] = Option.new(option, value)
22
+ elsif block_given?
23
+ @options[:handler_options][option.to_sym] = Option.new(option, block, true)
24
+ else
25
+ raise DslError, "you should supply block or value to :set_option"
26
+ end
21
27
  end
22
28
 
23
29
  def handler(handler)
@@ -13,10 +13,10 @@ module Daemonizer
13
13
  end
14
14
 
15
15
  def option(key)
16
- if option = @options[key.to_sym] and option.is_a?(Proc)
17
- option.call(@worker_id, @workers_count)
16
+ if option = @options[key.to_sym]
17
+ option.value(self)
18
18
  else
19
- option
19
+ nil
20
20
  end
21
21
  end
22
22
  end
@@ -0,0 +1,27 @@
1
+ module Daemonizer
2
+ class Option
3
+ class OptionError < StandardError; end
4
+
5
+ def initialize(option, value, auto_eval = false)
6
+ @option = option
7
+ @value = value
8
+ @auto_eval = auto_eval
9
+ if @auto_eval && !@value.is_a?(Proc)
10
+ raise OptionError, "auto_apply can be used only with callable option"
11
+ end
12
+ end
13
+
14
+ def value(handler = nil)
15
+ if @auto_eval && @value.is_a?(Proc)
16
+ if handler && handler.worker_id && handler.workers_count
17
+ return @value.call(handler.worker_id, handler.workers_count)
18
+ else
19
+ raise OptionError, "value called before handler initialized"
20
+ end
21
+ else
22
+ @value
23
+ end
24
+ end
25
+
26
+ end
27
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daemonizer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gleb Pomykalov
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-08 00:00:00 +04:00
18
+ date: 2010-07-12 00:00:00 +04:00
19
19
  default_executable: daemonizer
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -76,6 +76,7 @@ files:
76
76
  - lib/daemonizer/engine.rb
77
77
  - lib/daemonizer/errors.rb
78
78
  - lib/daemonizer/handler.rb
79
+ - lib/daemonizer/option.rb
79
80
  - lib/daemonizer/process_manager.rb
80
81
  - lib/daemonizer/worker.rb
81
82
  - lib/daemonizer/worker_pool.rb