stalk-boss 0.1.0

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