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 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