stalk-boss 0.1.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 +0 -0
- data/Rakefile +19 -0
- data/VERSION +1 -0
- data/bin/bossed_stalk +27 -0
- data/bin/stalk_boss +30 -0
- data/lib/stalk_boss.rb +61 -0
- data/spec/stalk_boss_spec.rb +48 -0
- metadata +83 -0
data/README
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'jeweler'
|
4
|
+
|
5
|
+
Jeweler::Tasks.new do |s|
|
6
|
+
s.name = "stalk-boss"
|
7
|
+
s.summary = "A wrapper for adding hot reloading to Stalker."
|
8
|
+
s.description = "A wrapper for adding hot reloading to Stalker"
|
9
|
+
s.author = "Ryan Dew"
|
10
|
+
s.email = "ryan@delorum.com"
|
11
|
+
s.executables = [ "stalk_boss", "bossed_stalk" ]
|
12
|
+
|
13
|
+
s.add_dependency 'stalker'
|
14
|
+
|
15
|
+
s.files = FileList["[A-Z]*", "{bin,lib}/**/*"]
|
16
|
+
end
|
17
|
+
Jeweler::GemcutterTasks.new
|
18
|
+
|
19
|
+
RSpec::Core::RakeTask.new(:test)
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/bin/bossed_stalk
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
STDERR.sync = STDOUT.sync = true
|
4
|
+
|
5
|
+
require 'stalker'
|
6
|
+
require File.expand_path('../../lib/stalk_boss', __FILE__)
|
7
|
+
include Stalker
|
8
|
+
|
9
|
+
usage = "stalk <jobs.rb> [<job>[,<job>,..]]"
|
10
|
+
file = ARGV.shift or abort usage
|
11
|
+
jobs = ARGV.shift.split(',') rescue nil
|
12
|
+
|
13
|
+
file = "./#{file}" unless file.match(/^[\/.]/)
|
14
|
+
|
15
|
+
require file
|
16
|
+
|
17
|
+
trap('QUIT') do
|
18
|
+
puts "\rSafely Exiting"
|
19
|
+
Stalker.soft_quit = true
|
20
|
+
end
|
21
|
+
|
22
|
+
trap('INT') do
|
23
|
+
puts "\rExiting"
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
Stalker.work jobs
|
data/bin/stalk_boss
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
STDERR.sync = STDOUT.sync = true
|
4
|
+
|
5
|
+
require File.expand_path('../../lib/stalk_boss', __FILE__)
|
6
|
+
include StalkBoss
|
7
|
+
|
8
|
+
usage = "stalk_boss <stalk_boss_config.rb>"
|
9
|
+
file = ARGV.shift or abort usage
|
10
|
+
|
11
|
+
file = "./#{file}" unless file.match(/^[\/.]/)
|
12
|
+
|
13
|
+
require file
|
14
|
+
|
15
|
+
trap('INT') do
|
16
|
+
puts "\rExiting"
|
17
|
+
StalkBoss.term
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
trap('QUIT') do
|
22
|
+
StalkBoss.soft_quit
|
23
|
+
end
|
24
|
+
|
25
|
+
trap('USR2') do
|
26
|
+
StalkBoss.start
|
27
|
+
StalkBoss.soft_quit
|
28
|
+
end
|
29
|
+
|
30
|
+
StalkBoss.start
|
data/lib/stalk_boss.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
module Stalker
|
2
|
+
def soft_quit?
|
3
|
+
@soft_quit ||= false
|
4
|
+
end
|
5
|
+
|
6
|
+
def soft_quit=(soft_quit)
|
7
|
+
@soft_quit = soft_quit
|
8
|
+
end
|
9
|
+
|
10
|
+
alias :work_one_job_stalker :work_one_job
|
11
|
+
|
12
|
+
def work_one_job
|
13
|
+
exit if soft_quit?
|
14
|
+
work_one_job_stalker
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
module StalkBoss
|
19
|
+
class Stalk
|
20
|
+
attr_accessor :pipe, :worker, :log
|
21
|
+
|
22
|
+
def initialize(worker, log=nil?)
|
23
|
+
super
|
24
|
+
@worker = worker
|
25
|
+
@log = log
|
26
|
+
end
|
27
|
+
|
28
|
+
def pid
|
29
|
+
@pipe.pid unless @pipe.nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
def start
|
33
|
+
@pipe = IO.popen("bossed_stalk #{@worker} #{@log}")
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
def stalk_jobs
|
39
|
+
@stalk_jobs ||= []
|
40
|
+
end
|
41
|
+
|
42
|
+
def stalk_job(worker, options={}, &block)
|
43
|
+
stalk = Stalk.new(worker, options[:log])
|
44
|
+
yield(stalk) if block_given?
|
45
|
+
stalk_jobs << stalk
|
46
|
+
stalk
|
47
|
+
end
|
48
|
+
|
49
|
+
def term
|
50
|
+
stalk_jobs.each{ |s| Process.kill 'INT', s.pid }
|
51
|
+
end
|
52
|
+
|
53
|
+
def soft_quit
|
54
|
+
stalk_jobs.each{ |s| Process.kill 'QUIT', s.pid }
|
55
|
+
end
|
56
|
+
|
57
|
+
def start
|
58
|
+
stalk_jobs.each{ |s| s.start }
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'stalker'
|
2
|
+
require File.expand_path('../../lib/stalk_boss', __FILE__)
|
3
|
+
|
4
|
+
module StalkBoss
|
5
|
+
def stock_jobs=(stock_jobs)
|
6
|
+
@stock_jobs = stock_jobs if stock_jobs.is_a?(Array)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
include StalkBoss
|
11
|
+
|
12
|
+
describe StalkBoss, "#stock_job" do
|
13
|
+
@worker = 'worker.rb'
|
14
|
+
@log = 'my_log.log'
|
15
|
+
it "creates a stalk item with dsl" do
|
16
|
+
stalk = stalk_job(@worker, {:log => @log})
|
17
|
+
stalk.is_a?(Stalk).should == true
|
18
|
+
end
|
19
|
+
it "properly sets stalk item worker" do
|
20
|
+
stalk = stalk_job(@worker, {:log => @log})
|
21
|
+
stalk.worker.should == @worker
|
22
|
+
end
|
23
|
+
it "properly sets stalk item log" do
|
24
|
+
worker = 'worker.rb'
|
25
|
+
log = 'my_log.log'
|
26
|
+
stalk = stalk_job(@worker, {:log => @log})
|
27
|
+
stalk.log.should == @log
|
28
|
+
end
|
29
|
+
it "properly sets stalk item log with block" do
|
30
|
+
stalk = stalk_job(@worker) do |s| s.log = @log end
|
31
|
+
stalk.log.should == @log
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe StalkBoss, "#stock_jobs" do
|
36
|
+
@worker = 'worker.rb'
|
37
|
+
@log = 'my_log.log'
|
38
|
+
it "retains stalk items" do
|
39
|
+
(1..10).each {|i| stalk_job("#{i}#{@worker}", {:log => "#{i}#{@log}"})}
|
40
|
+
stalk_jobs.size.should == 10
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe Stalker, "#soft_quit?" do
|
45
|
+
it "has soft_quit? attribute" do
|
46
|
+
Stalker.respond_to?('soft_quit?').should == true
|
47
|
+
end
|
48
|
+
end
|
metadata
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stalk-boss
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
- 0
|
9
|
+
version: 0.1.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Ryan Dew
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-01-10 00:00:00 -07:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: stalker
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
version: "0"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
description: A wrapper for adding hot reloading to Stalker
|
34
|
+
email: ryan@delorum.com
|
35
|
+
executables:
|
36
|
+
- stalk_boss
|
37
|
+
- bossed_stalk
|
38
|
+
extensions: []
|
39
|
+
|
40
|
+
extra_rdoc_files:
|
41
|
+
- README
|
42
|
+
files:
|
43
|
+
- README
|
44
|
+
- Rakefile
|
45
|
+
- VERSION
|
46
|
+
- bin/bossed_stalk
|
47
|
+
- bin/stalk_boss
|
48
|
+
- lib/stalk_boss.rb
|
49
|
+
- spec/stalk_boss_spec.rb
|
50
|
+
has_rdoc: true
|
51
|
+
homepage:
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
requirements: []
|
76
|
+
|
77
|
+
rubyforge_project:
|
78
|
+
rubygems_version: 1.3.7
|
79
|
+
signing_key:
|
80
|
+
specification_version: 3
|
81
|
+
summary: A wrapper for adding hot reloading to Stalker.
|
82
|
+
test_files:
|
83
|
+
- spec/stalk_boss_spec.rb
|