loop_dance 0.3.1 → 0.4.0
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.rdoc +4 -3
- data/VERSION +1 -1
- data/lib/loop_dance/commands.rb +3 -6
- data/lib/loop_dance/controller.rb +15 -0
- data/lib/loop_dance/dancer.rb +17 -3
- data/lib/loop_dance/railtie.rb +1 -1
- data/lib/loop_dance.rb +7 -0
- data/loop_dance.gemspec +4 -4
- data/rails_example/Gemfile +1 -1
- data/rails_example/db/schema.rb +15 -0
- data/spec/dancer_spec.rb +8 -8
- data/tasks/loop_dance.rake +9 -0
- metadata +35 -34
data/README.rdoc
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
= LoopDance
|
2
2
|
|
3
|
-
No forks. No threads. Just looped scheduler based on `daemon_controller` and `looper`.
|
4
|
-
|
3
|
+
No forks. No threads. Just looped pseudo-scheduler based on `daemon_controller` and `looper`.
|
4
|
+
|
5
|
+
One dancer is one daemon.
|
5
6
|
|
6
7
|
== Easy to install
|
7
8
|
|
@@ -29,7 +30,7 @@ LoopDance automatically starts at the rails 3 server startup.
|
|
29
30
|
|
30
31
|
From the rails application:
|
31
32
|
|
32
|
-
Dancer1.
|
33
|
+
Dancer1.start unless Dancer1.running?
|
33
34
|
|
34
35
|
By the rake tasks (TODO):
|
35
36
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/lib/loop_dance/commands.rb
CHANGED
@@ -4,16 +4,13 @@ module LoopDance
|
|
4
4
|
|
5
5
|
attr_accessor :tasks, :timeout, :maximal_timeout, :muted_log, :autostart
|
6
6
|
|
7
|
-
@autostart = true
|
8
|
-
|
9
|
-
def mute_log
|
10
|
-
@muted_log = true
|
11
|
-
end
|
12
|
-
|
13
7
|
def disable_autostart
|
14
8
|
@autostart = false
|
15
9
|
end
|
16
10
|
|
11
|
+
def mute_log
|
12
|
+
@muted_log = true
|
13
|
+
end
|
17
14
|
|
18
15
|
def every( interval, &block )
|
19
16
|
@tasks = [] unless @tasks
|
@@ -46,6 +46,21 @@ module LoopDance
|
|
46
46
|
log_exception exception
|
47
47
|
end
|
48
48
|
|
49
|
+
def safely_restart
|
50
|
+
dancer.log "Retarting.. (#{@start_command})"
|
51
|
+
if running?
|
52
|
+
dancer.log "Dancer is already running, stop"
|
53
|
+
stop
|
54
|
+
dancer.log "Start"
|
55
|
+
start
|
56
|
+
else
|
57
|
+
start
|
58
|
+
dancer.log "Started"
|
59
|
+
end
|
60
|
+
rescue => exception # DaemonController::StartTimeout
|
61
|
+
log_exception exception
|
62
|
+
end
|
63
|
+
|
49
64
|
def safely_stop
|
50
65
|
dancer.log "Stopping.."
|
51
66
|
stop if running?
|
data/lib/loop_dance/dancer.rb
CHANGED
@@ -8,15 +8,29 @@ module LoopDance
|
|
8
8
|
class Dancer
|
9
9
|
|
10
10
|
extend LoopDance::Commands
|
11
|
-
|
11
|
+
|
12
12
|
class << self
|
13
|
-
|
14
|
-
|
13
|
+
|
14
|
+
def inherited(subclass)
|
15
|
+
subclass.autostart = true
|
16
|
+
end
|
15
17
|
|
16
18
|
def controller
|
17
19
|
@controller ||= LoopDance::Controller.new self
|
18
20
|
end
|
19
21
|
|
22
|
+
def stop
|
23
|
+
controller.stop
|
24
|
+
end
|
25
|
+
|
26
|
+
def start
|
27
|
+
controller.start
|
28
|
+
end
|
29
|
+
|
30
|
+
def running?
|
31
|
+
controller.running?
|
32
|
+
end
|
33
|
+
|
20
34
|
end
|
21
35
|
|
22
36
|
end
|
data/lib/loop_dance/railtie.rb
CHANGED
data/lib/loop_dance.rb
CHANGED
@@ -12,6 +12,13 @@ module LoopDance
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
def restart_all( force=false )
|
16
|
+
return puts "LoopDance: No dancers defined" if LoopDance::Dancer.subclasses.empty?
|
17
|
+
LoopDance::Dancer.subclasses.each do |dancer|
|
18
|
+
dancer.controller.safely_restart if force || dancer.autostart
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
15
22
|
def stop_all
|
16
23
|
return puts "LoopDance: No dancers defined" if LoopDance::Dancer.subclasses.empty?
|
17
24
|
LoopDance::Dancer.subclasses.each do |dancer|
|
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.
|
8
|
+
s.version = "0.4.0"
|
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-
|
12
|
+
s.date = %q{2011-01-21}
|
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 = [
|
@@ -51,6 +51,7 @@ Gem::Specification.new do |s|
|
|
51
51
|
"rails_example/config/initializers/session_store.rb",
|
52
52
|
"rails_example/config/locales/en.yml",
|
53
53
|
"rails_example/config/routes.rb",
|
54
|
+
"rails_example/db/schema.rb",
|
54
55
|
"rails_example/db/seeds.rb",
|
55
56
|
"rails_example/lib/dancers.rb",
|
56
57
|
"rails_example/lib/tasks/.gitkeep",
|
@@ -77,7 +78,7 @@ Gem::Specification.new do |s|
|
|
77
78
|
s.homepage = %q{http://github.com/dapi/loop_dance}
|
78
79
|
s.licenses = ["MIT"]
|
79
80
|
s.require_paths = ["lib"]
|
80
|
-
s.rubygems_version = %q{1.
|
81
|
+
s.rubygems_version = %q{1.4.2}
|
81
82
|
s.summary = %q{Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup}
|
82
83
|
s.test_files = [
|
83
84
|
"spec/dancer_spec.rb",
|
@@ -86,7 +87,6 @@ Gem::Specification.new do |s|
|
|
86
87
|
]
|
87
88
|
|
88
89
|
if s.respond_to? :specification_version then
|
89
|
-
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
90
90
|
s.specification_version = 3
|
91
91
|
|
92
92
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
data/rails_example/Gemfile
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# This file is auto-generated from the current state of the database. Instead
|
2
|
+
# of editing this file, please use the migrations feature of Active Record to
|
3
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
+
#
|
5
|
+
# Note that this schema.rb definition is the authoritative source for your
|
6
|
+
# database schema. If you need to create the application database on another
|
7
|
+
# system, you should be using db:schema:load, not running all the migrations
|
8
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
9
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
10
|
+
#
|
11
|
+
# It's strongly recommended to check this file into your version control system.
|
12
|
+
|
13
|
+
ActiveRecord::Schema.define(:version => 0) do
|
14
|
+
|
15
|
+
end
|
data/spec/dancer_spec.rb
CHANGED
@@ -2,13 +2,10 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
2
2
|
|
3
3
|
describe LoopDance do
|
4
4
|
|
5
|
-
describe "
|
6
|
-
|
7
|
-
|
8
|
-
describe "finds minimal interval"
|
9
|
-
|
5
|
+
# describe "finds minimal interval"
|
6
|
+
|
10
7
|
describe "examples" do
|
11
|
-
|
8
|
+
|
12
9
|
before(:all) do
|
13
10
|
class Dancer1 < LoopDance::Dancer
|
14
11
|
every 2.seconds do
|
@@ -25,8 +22,10 @@ describe LoopDance do
|
|
25
22
|
|
26
23
|
it { Dancer1.tasks.count.should == 4 }
|
27
24
|
it { Dancer1.timeout.should == 2 }
|
28
|
-
it { LoopDance::Dancer.tasks.should be_blank }
|
29
25
|
it { Dancer1.maximal_timeout.should == 10 }
|
26
|
+
it { Dancer1.autostart.should be_true }
|
27
|
+
|
28
|
+
it { LoopDance::Dancer.tasks.should be_blank }
|
30
29
|
|
31
30
|
|
32
31
|
describe "another dancer not change first dancer's tasks" do
|
@@ -44,7 +43,7 @@ describe LoopDance do
|
|
44
43
|
it { Dancer2.timeout.should == 1 }
|
45
44
|
it { Dancer2.maximal_timeout.should == 11 }
|
46
45
|
it { Dancer2.muted_log.should be_nil }
|
47
|
-
it {
|
46
|
+
it { Dancer2.autostart.should be_true }
|
48
47
|
|
49
48
|
end
|
50
49
|
|
@@ -57,6 +56,7 @@ describe LoopDance do
|
|
57
56
|
end
|
58
57
|
it { Dancer1.muted_log.should be_true }
|
59
58
|
it { Dancer1.autostart.should be_false }
|
59
|
+
it { Dancer1.autostart.should_not be_nil }
|
60
60
|
end
|
61
61
|
|
62
62
|
describe "find right minimal timeout" do
|
data/tasks/loop_dance.rake
CHANGED
@@ -12,6 +12,11 @@ namespace :loop_dance do
|
|
12
12
|
LoopDance.start_all
|
13
13
|
end
|
14
14
|
|
15
|
+
desc "Start restart all dancers"
|
16
|
+
task :restart_all => :loop_dance do
|
17
|
+
LoopDance.restart_all
|
18
|
+
end
|
19
|
+
|
15
20
|
desc "Stop all dancers"
|
16
21
|
task :stop_all => :loop_dance do
|
17
22
|
LoopDance.stop_all
|
@@ -34,6 +39,10 @@ namespace :loop_dance do
|
|
34
39
|
dancer.controller.safely_start
|
35
40
|
end
|
36
41
|
|
42
|
+
task :restart => :loop_dance do
|
43
|
+
dancer.controller.safely_restart
|
44
|
+
end
|
45
|
+
|
37
46
|
desc "Stop #{dancer}"
|
38
47
|
task :stop => :loop_dance do
|
39
48
|
dancer.controller.safely_stop
|
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:
|
5
|
-
prerelease:
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Danil Pismenny
|
@@ -15,12 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-01-
|
18
|
+
date: 2011-01-21 00:00:00 +03:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
|
23
|
-
name: activesupport
|
22
|
+
type: :runtime
|
24
23
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
25
24
|
none: false
|
26
25
|
requirements:
|
@@ -32,10 +31,10 @@ dependencies:
|
|
32
31
|
- 0
|
33
32
|
version: "3.0"
|
34
33
|
requirement: *id001
|
35
|
-
type: :runtime
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
34
|
prerelease: false
|
38
|
-
name:
|
35
|
+
name: activesupport
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
type: :runtime
|
39
38
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
40
39
|
none: false
|
41
40
|
requirements:
|
@@ -46,10 +45,10 @@ dependencies:
|
|
46
45
|
- 0
|
47
46
|
version: "0"
|
48
47
|
requirement: *id002
|
49
|
-
type: :runtime
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
48
|
prerelease: false
|
52
|
-
name:
|
49
|
+
name: i18n
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
type: :runtime
|
53
52
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
53
|
none: false
|
55
54
|
requirements:
|
@@ -62,10 +61,10 @@ dependencies:
|
|
62
61
|
- 5
|
63
62
|
version: 0.2.5
|
64
63
|
requirement: *id003
|
65
|
-
type: :runtime
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
64
|
prerelease: false
|
68
|
-
name:
|
65
|
+
name: daemon_controller
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
type: :development
|
69
68
|
version_requirements: &id004 !ruby/object:Gem::Requirement
|
70
69
|
none: false
|
71
70
|
requirements:
|
@@ -78,10 +77,10 @@ dependencies:
|
|
78
77
|
- 0
|
79
78
|
version: 1.0.0
|
80
79
|
requirement: *id004
|
81
|
-
type: :development
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
80
|
prerelease: false
|
84
|
-
name:
|
81
|
+
name: bundler
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
type: :development
|
85
84
|
version_requirements: &id005 !ruby/object:Gem::Requirement
|
86
85
|
none: false
|
87
86
|
requirements:
|
@@ -94,10 +93,10 @@ dependencies:
|
|
94
93
|
- 2
|
95
94
|
version: 1.5.2
|
96
95
|
requirement: *id005
|
97
|
-
type: :development
|
98
|
-
- !ruby/object:Gem::Dependency
|
99
96
|
prerelease: false
|
100
|
-
name:
|
97
|
+
name: jeweler
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
type: :development
|
101
100
|
version_requirements: &id006 !ruby/object:Gem::Requirement
|
102
101
|
none: false
|
103
102
|
requirements:
|
@@ -108,10 +107,10 @@ dependencies:
|
|
108
107
|
- 0
|
109
108
|
version: "0"
|
110
109
|
requirement: *id006
|
111
|
-
type: :development
|
112
|
-
- !ruby/object:Gem::Dependency
|
113
110
|
prerelease: false
|
114
|
-
name:
|
111
|
+
name: rcov
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
type: :development
|
115
114
|
version_requirements: &id007 !ruby/object:Gem::Requirement
|
116
115
|
none: false
|
117
116
|
requirements:
|
@@ -122,10 +121,10 @@ dependencies:
|
|
122
121
|
- 0
|
123
122
|
version: "0"
|
124
123
|
requirement: *id007
|
125
|
-
type: :development
|
126
|
-
- !ruby/object:Gem::Dependency
|
127
124
|
prerelease: false
|
128
|
-
name:
|
125
|
+
name: ruby-debug
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
type: :development
|
129
128
|
version_requirements: &id008 !ruby/object:Gem::Requirement
|
130
129
|
none: false
|
131
130
|
requirements:
|
@@ -136,10 +135,10 @@ dependencies:
|
|
136
135
|
- 0
|
137
136
|
version: "0"
|
138
137
|
requirement: *id008
|
139
|
-
type: :development
|
140
|
-
- !ruby/object:Gem::Dependency
|
141
138
|
prerelease: false
|
142
|
-
name:
|
139
|
+
name: rspec
|
140
|
+
- !ruby/object:Gem::Dependency
|
141
|
+
type: :development
|
143
142
|
version_requirements: &id009 !ruby/object:Gem::Requirement
|
144
143
|
none: false
|
145
144
|
requirements:
|
@@ -150,7 +149,8 @@ dependencies:
|
|
150
149
|
- 0
|
151
150
|
version: "0"
|
152
151
|
requirement: *id009
|
153
|
-
|
152
|
+
prerelease: false
|
153
|
+
name: shoulda
|
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: []
|
@@ -195,6 +195,7 @@ files:
|
|
195
195
|
- rails_example/config/initializers/session_store.rb
|
196
196
|
- rails_example/config/locales/en.yml
|
197
197
|
- rails_example/config/routes.rb
|
198
|
+
- rails_example/db/schema.rb
|
198
199
|
- rails_example/db/seeds.rb
|
199
200
|
- rails_example/lib/dancers.rb
|
200
201
|
- rails_example/lib/tasks/.gitkeep
|
@@ -247,7 +248,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
247
248
|
requirements: []
|
248
249
|
|
249
250
|
rubyforge_project:
|
250
|
-
rubygems_version: 1.
|
251
|
+
rubygems_version: 1.4.2
|
251
252
|
signing_key:
|
252
253
|
specification_version: 3
|
253
254
|
summary: Daemon builder and controller. Easy setup and managed from the rails application or rake tasks. Autostart at rails server startup
|