daemonizer 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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