loop_dance 0.4.6 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -10,7 +10,7 @@ One dancer is one daemon.
10
10
 
11
11
  == Simple to setup
12
12
 
13
- Create file 'lib/loop_dance.rb':
13
+ Create file 'lib/dancers.rb':
14
14
 
15
15
  class Dancer1 < LoopDance::Dancer
16
16
 
@@ -30,7 +30,7 @@ From the rails application:
30
30
 
31
31
  Dancer1.start unless Dancer1.running?
32
32
 
33
- By the rake tasks (TODO):
33
+ By the rake tasks:
34
34
 
35
35
  rake loop_dance:start_all
36
36
  rake loop_dance:stop_all
@@ -44,17 +44,18 @@ By the rake tasks (TODO):
44
44
  == Settings
45
45
 
46
46
  class Dancer1 < LoopDance::Dancer
47
- mute_log # mute redundant logging, just start, stop and errors
48
- enable_autostart # enable autostart at rails server startup
47
+ mute_log true # mute redundant logging, just start, stop and errors
48
+ autostart true # enable autostart at rails server startup. False by default
49
49
 
50
50
  # Don't trap signals. True by default (trapped)
51
- @trap_signals = false
51
+ trap_signals false
52
52
 
53
53
  # daemon_controller`s options
54
- @start_timeout = 60 # 15 by default
55
- @stop_timeout = 60 # 15 by default
56
- @log_file_activity_timeout # 7 by default
54
+ start_timeout 60 # 15 by default
55
+ stop_timeout 60 # 15 by default
56
+ log_file_activity_timeout 17 # 7 by default
57
57
 
58
+ ..
58
59
 
59
60
  == Contributing to loop_dance
60
61
 
@@ -68,6 +69,6 @@ By the rake tasks (TODO):
68
69
 
69
70
  == Copyright
70
71
 
71
- Copyright (c) 2010 Danil Pismenny. See LICENSE.txt for
72
+ Copyright (c) 2010-2011 Danil Pismenny. See LICENSE.txt for
72
73
  further details.
73
74
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.6
1
+ 0.5.3
@@ -1,26 +1,29 @@
1
1
  module LoopDance
2
2
 
3
3
  module Commands
4
-
5
- # # options
6
- attr_accessor :muted_log, :autostart, :trap_signals,
7
- :start_timeout, :stop_timeout, :log_file_activity_timeout
8
4
 
9
- def inherited(subclass)
10
- subclass.trap_signals = true
5
+ def self.super_attr_accessor(*syms)
6
+ attr_writer *syms
7
+ syms.each do |sym|
8
+ next if sym.is_a?(Hash)
9
+ class_eval "def #{sym} value = (nil;flag=true); if flag; return @#{sym}; else; @#{sym} = value; end ; end"
10
+ end
11
11
  end
12
+
13
+ super_attr_accessor( :mute_log, :autostart, :trap_signals,
14
+ :start_timeout, :stop_timeout, :log_file_activity_timeout, :tasks )
12
15
 
13
- def enable_autostart
14
- @autostart = true
15
- end
16
+
17
+ attr_reader :timeout
18
+
16
19
 
17
- def mute_log
18
- @muted_log = true
20
+ def inherited(subclass)
21
+ subclass.trap_signals = true
19
22
  end
20
23
 
21
24
  def every( interval, &block )
22
25
  @tasks = [] unless @tasks
23
- @tasks << LoopDance::Task.new( interval, &block )
26
+ @tasks << LoopDance::Task.new( self, interval, &block )
24
27
  find_minimal_timeout interval
25
28
  @maximal_timeout = interval if !@maximal_timeout || @maximal_timeout < interval
26
29
  end
@@ -32,6 +35,7 @@ module LoopDance
32
35
  else
33
36
  while (@run) do
34
37
  @tasks.each_with_index do |task, index|
38
+ break unless @run
35
39
  if task.time_to_run?
36
40
  log "Run task ##{index} for every #{task.interval.inspect}"
37
41
  task.run
@@ -45,7 +49,7 @@ module LoopDance
45
49
  log "shutting down", true
46
50
  end
47
51
 
48
- def stop
52
+ def stop_me
49
53
  @run = false
50
54
  end
51
55
 
@@ -54,11 +58,11 @@ module LoopDance
54
58
  end
55
59
 
56
60
  def log(text, forced=false)
57
- puts "#{Time.now} #{self}: #{text}" if forced || !muted_log
61
+ puts "#{Time.now} #{self}: #{text}" if forced || !mute_log
58
62
  end
59
63
 
60
64
  def print_status
61
- puts "#{self}: timeout: #{self.timeout.inspect}, status: #{self.controller.running? ? 'running' : 'stopped'}\n"
65
+ puts "#{self}: timeout: #{@timeout.inspect}, status: #{self.controller.running? ? 'running' : 'stopped'}\n"
62
66
  if tasks.empty?
63
67
  puts " no tasks defined"
64
68
  else
@@ -70,6 +74,8 @@ module LoopDance
70
74
 
71
75
  private
72
76
 
77
+ attr_accessor :run
78
+
73
79
  def find_minimal_timeout( interval )
74
80
  return @timeout = interval if @timeout.blank?
75
81
  minimal = interval < @timeout ? interval : @timeout
@@ -1,8 +1,9 @@
1
1
  class LoopDance::Task
2
- attr_accessor :last_run_at, :block, :interval
2
+ attr_accessor :last_run_at, :dancer, :block, :interval
3
3
 
4
- def initialize( interval, &block )
4
+ def initialize( dancer, interval, &block )
5
5
  run_count=0
6
+ self.dancer = dancer
6
7
  self.interval = interval
7
8
  self.block = block
8
9
 
@@ -18,6 +19,7 @@ class LoopDance::Task
18
19
  block.call
19
20
  rescue Exception => e
20
21
  puts "Uncaught exception bubbled up: \n#{e.class}: #{e.message}\n\t#{e.backtrace.join("\n\t")} "
22
+ dancer.send(:stop_dancer)
21
23
  ensure
22
24
  self.last_run_at = Time.now
23
25
  end
data/loop_dance.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{loop_dance}
8
- s.version = "0.4.6"
8
+ s.version = "0.5.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Danil Pismenny"]
12
- s.date = %q{2011-01-26}
12
+ s.date = %q{2011-02-18}
13
13
  s.description = %q{Really simple daemon builder and manager. Based on the looper and daemon_controller}
14
14
  s.email = %q{danil@orionet.ru}
15
15
  s.extra_rdoc_files = [
@@ -78,7 +78,7 @@ Gem::Specification.new do |s|
78
78
  s.homepage = %q{http://github.com/dapi/loop_dance}
79
79
  s.licenses = ["MIT"]
80
80
  s.require_paths = ["lib"]
81
- s.rubygems_version = %q{1.4.2}
81
+ s.rubygems_version = %q{1.5.0}
82
82
  s.summary = %q{Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup}
83
83
  s.test_files = [
84
84
  "spec/dancer_spec.rb",
data/spec/dancer_spec.rb CHANGED
@@ -8,6 +8,7 @@ describe LoopDance do
8
8
 
9
9
  before(:all) do
10
10
  class Dancer1 < LoopDance::Dancer
11
+ start_timeout 60
11
12
  every 2.seconds do
12
13
  end
13
14
  every 4.seconds do
@@ -21,14 +22,14 @@ describe LoopDance do
21
22
 
22
23
 
23
24
  it { Dancer1.tasks.count.should == 4 }
24
- it { Dancer1.timeout.should == 2 }
25
- it { Dancer1.maximal_timeout.should == 10 }
25
+ it { Dancer1.start_timeout.should == 60 }
26
+ it { Dancer1.stop_timeout.should be_nil }
26
27
  it { Dancer1.autostart.should be_false }
27
28
 
28
29
  it { LoopDance::Dancer.tasks.should be_blank }
29
30
 
30
31
 
31
- describe "another dancer not change first dancer's tasks" do
32
+ describe "another dancer not change first dancer's tasks" do
32
33
 
33
34
  before(:all) do
34
35
  class Dancer2 < LoopDance::Dancer
@@ -40,9 +41,7 @@ describe LoopDance do
40
41
  end
41
42
 
42
43
  it { Dancer2.tasks.count.should == 2 }
43
- it { Dancer2.timeout.should == 1 }
44
- it { Dancer2.maximal_timeout.should == 11 }
45
- it { Dancer2.muted_log.should be_nil }
44
+ it { Dancer2.mute_log.should be_nil }
46
45
  it { Dancer2.autostart.should be_false }
47
46
 
48
47
  end
@@ -50,11 +49,11 @@ describe LoopDance do
50
49
  describe "muting log and enabling autostart" do
51
50
  before(:all) do
52
51
  class Dancer1 < LoopDance::Dancer
53
- mute_log
54
- enable_autostart
52
+ mute_log true
53
+ autostart true
55
54
  end
56
55
  end
57
- it { Dancer1.muted_log.should be_true }
56
+ it { Dancer1.mute_log.should be_true }
58
57
  it { Dancer1.autostart.should be_true }
59
58
  end
60
59
 
@@ -71,26 +70,26 @@ describe LoopDance do
71
70
 
72
71
  it { Dancer3.tasks.count.should == 2 }
73
72
  it { Dancer3.timeout.should == 3 }
74
- it { Dancer3.maximal_timeout.should == 9 }
75
73
 
76
74
  end
77
75
 
78
- describe "method stop stops the loop" do
76
+ describe "calculate minimal interval" do
79
77
 
80
78
  before(:all) do
81
79
  class Dancer < LoopDance::Dancer
80
+ mute_log true
82
81
  every 2.seconds do
83
- stop
82
+ stop_me
84
83
  end
85
84
  end
86
85
  end
87
86
 
88
87
  it { Dancer.dance }
89
- it { Dancer.maximal_timeout.should == 2 }
88
+ it { Dancer.send(:run).should be_false }
89
+ it { Dancer.timeout.should == 2 }
90
90
 
91
91
  end
92
92
 
93
-
94
93
 
95
94
  end
96
95
 
data/spec/task_spec.rb CHANGED
@@ -4,12 +4,12 @@ describe LoopDance::Task do
4
4
 
5
5
  describe "setup" do
6
6
 
7
-
8
7
  let(:interval) { 60 }
8
+ let(:dancer) { LoopDance::Dancer }
9
9
 
10
10
  before {
11
11
  @result = 0
12
- @task = LoopDance::Task.new interval do
12
+ @task = LoopDance::Task.new dancer, interval do
13
13
  @result+=1
14
14
  end
15
15
  }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: loop_dance
3
3
  version: !ruby/object:Gem::Version
4
- hash: 3
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 4
9
- - 6
10
- version: 0.4.6
8
+ - 5
9
+ - 3
10
+ version: 0.5.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Danil Pismenny
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-26 00:00:00 +03:00
18
+ date: 2011-02-18 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- type: :runtime
22
+ name: activesupport
23
23
  version_requirements: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
@@ -30,11 +30,11 @@ dependencies:
30
30
  - 3
31
31
  - 0
32
32
  version: "3.0"
33
- requirement: *id001
34
33
  prerelease: false
35
- name: activesupport
36
- - !ruby/object:Gem::Dependency
37
34
  type: :runtime
35
+ requirement: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: i18n
38
38
  version_requirements: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
@@ -44,11 +44,11 @@ dependencies:
44
44
  segments:
45
45
  - 0
46
46
  version: "0"
47
- requirement: *id002
48
47
  prerelease: false
49
- name: i18n
50
- - !ruby/object:Gem::Dependency
51
48
  type: :runtime
49
+ requirement: *id002
50
+ - !ruby/object:Gem::Dependency
51
+ name: daemon_controller
52
52
  version_requirements: &id003 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
@@ -60,11 +60,11 @@ dependencies:
60
60
  - 2
61
61
  - 5
62
62
  version: 0.2.5
63
- requirement: *id003
64
63
  prerelease: false
65
- name: daemon_controller
64
+ type: :runtime
65
+ requirement: *id003
66
66
  - !ruby/object:Gem::Dependency
67
- type: :development
67
+ name: bundler
68
68
  version_requirements: &id004 !ruby/object:Gem::Requirement
69
69
  none: false
70
70
  requirements:
@@ -76,11 +76,11 @@ dependencies:
76
76
  - 0
77
77
  - 0
78
78
  version: 1.0.0
79
- requirement: *id004
80
79
  prerelease: false
81
- name: bundler
82
- - !ruby/object:Gem::Dependency
83
80
  type: :development
81
+ requirement: *id004
82
+ - !ruby/object:Gem::Dependency
83
+ name: jeweler
84
84
  version_requirements: &id005 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
@@ -92,11 +92,11 @@ dependencies:
92
92
  - 5
93
93
  - 2
94
94
  version: 1.5.2
95
- requirement: *id005
96
95
  prerelease: false
97
- name: jeweler
98
- - !ruby/object:Gem::Dependency
99
96
  type: :development
97
+ requirement: *id005
98
+ - !ruby/object:Gem::Dependency
99
+ name: rcov
100
100
  version_requirements: &id006 !ruby/object:Gem::Requirement
101
101
  none: false
102
102
  requirements:
@@ -106,11 +106,11 @@ dependencies:
106
106
  segments:
107
107
  - 0
108
108
  version: "0"
109
- requirement: *id006
110
109
  prerelease: false
111
- name: rcov
112
- - !ruby/object:Gem::Dependency
113
110
  type: :development
111
+ requirement: *id006
112
+ - !ruby/object:Gem::Dependency
113
+ name: ruby-debug
114
114
  version_requirements: &id007 !ruby/object:Gem::Requirement
115
115
  none: false
116
116
  requirements:
@@ -120,11 +120,11 @@ dependencies:
120
120
  segments:
121
121
  - 0
122
122
  version: "0"
123
- requirement: *id007
124
123
  prerelease: false
125
- name: ruby-debug
126
- - !ruby/object:Gem::Dependency
127
124
  type: :development
125
+ requirement: *id007
126
+ - !ruby/object:Gem::Dependency
127
+ name: rspec
128
128
  version_requirements: &id008 !ruby/object:Gem::Requirement
129
129
  none: false
130
130
  requirements:
@@ -134,11 +134,11 @@ dependencies:
134
134
  segments:
135
135
  - 0
136
136
  version: "0"
137
- requirement: *id008
138
137
  prerelease: false
139
- name: rspec
140
- - !ruby/object:Gem::Dependency
141
138
  type: :development
139
+ requirement: *id008
140
+ - !ruby/object:Gem::Dependency
141
+ name: shoulda
142
142
  version_requirements: &id009 !ruby/object:Gem::Requirement
143
143
  none: false
144
144
  requirements:
@@ -148,9 +148,9 @@ dependencies:
148
148
  segments:
149
149
  - 0
150
150
  version: "0"
151
- requirement: *id009
152
151
  prerelease: false
153
- name: shoulda
152
+ type: :development
153
+ requirement: *id009
154
154
  description: Really simple daemon builder and manager. Based on the looper and daemon_controller
155
155
  email: danil@orionet.ru
156
156
  executables: []
@@ -248,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
248
  requirements: []
249
249
 
250
250
  rubyforge_project:
251
- rubygems_version: 1.4.2
251
+ rubygems_version: 1.5.0
252
252
  signing_key:
253
253
  specification_version: 3
254
254
  summary: Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup