process-daemon 0.1.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b9fd3e1daea454199404057b9b504216e8a93a5e
4
- data.tar.gz: 0b3858725986811d62424f5182deba146f7d96a0
3
+ metadata.gz: ad2299e94a6c61f1720944c19525b84c535c597f
4
+ data.tar.gz: 38aed4cdf9ee795711e7b9507bb1008e7a9940c4
5
5
  SHA512:
6
- metadata.gz: c65fb3fd1f265a5fc532331435eb2905d7ca0bcc8de4d3b8cc2c0598196a0d3c5627d1542ed8baa93839595247902e5238e79342c8ed41a05d83d3b5bbcba502
7
- data.tar.gz: 8a121e07c4d44af7c8c2a653ec44ed2c78455b5b372057f7f14b05f52ffbc8405e7f0f4979bf1f42d6630851a5c0337aac7110c0030bafa38cf36c9fe78d3dc0
6
+ metadata.gz: e6653cc71627aac7a2ebb0c5bf90c71eda263507d01f6ab5d1a6bd267fdfb866cf84a92e5f9ff13dc50219f2eca3e607843a4e161b9ddfdd87559bb6a3b3c662
7
+ data.tar.gz: 85831d76b49be8ee9e046e6a4921d72fa4ffd08b80fcee77dfb98652ce710504e9057a42cd645d758ed593ddef389a03de96b9b1c638ef1ba6a4e265be36ecbb
@@ -130,10 +130,30 @@ module Process
130
130
  Process.kill(0, :INT)
131
131
  end
132
132
 
133
+ # Helper methods for static daemon instance
134
+
135
+ def self.instance
136
+ @instance ||= self.new
137
+ end
138
+
139
+ # Main entry point for command line:
133
140
  def self.daemonize(argv = ARGV)
134
- @@instance ||= self.new
135
-
136
- Controller.daemonize(@@instance, argv)
141
+ Controller.daemonize(instance, argv)
142
+ end
143
+
144
+ # Start the daemon instance:
145
+ def self.start
146
+ Controller.start(instance)
147
+ end
148
+
149
+ # Stop the daemon instance:
150
+ def self.stop
151
+ Controller.stop(instance)
152
+ end
153
+
154
+ # Get the status of the daemon instance, `:stopped`, `:running` or `:unknown`.
155
+ def self.status
156
+ ProcessFile.status(instance)
137
157
  end
138
158
  end
139
159
  end
@@ -29,24 +29,24 @@ module Process
29
29
  module Controller
30
30
  # This function is called from the daemon executable. It processes ARGV and checks whether the user is asking for `start`, `stop`, `restart`, `status`.
31
31
  def self.daemonize(daemon, argv = ARGV)
32
- case argv.shift
33
- when 'start'
32
+ case argv.shift.to_sym
33
+ when :start
34
34
  start(daemon)
35
35
  status(daemon)
36
- when 'stop'
36
+ when :stop
37
37
  stop(daemon)
38
38
  status(daemon)
39
39
  ProcessFile.cleanup(daemon)
40
- when 'restart'
40
+ when :restart
41
41
  stop(daemon)
42
42
  ProcessFile.cleanup(daemon)
43
43
  start(daemon)
44
44
  status(daemon)
45
- when 'status'
45
+ when :status
46
46
  status(daemon)
47
47
  else
48
48
  puts "Invalid command. Please specify start, restart, stop or status."
49
- exit
49
+ exit 1
50
50
  end
51
51
  end
52
52
 
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Process
22
22
  class Daemon
23
- VERSION = "0.1.0"
23
+ VERSION = "0.3.0"
24
24
  end
25
25
  end
@@ -20,5 +20,6 @@ Gem::Specification.new do |spec|
20
20
  spec.add_dependency "rainbow", "~> 2.0"
21
21
 
22
22
  spec.add_development_dependency "bundler", "~> 1.3"
23
+ spec.add_development_dependency "minitest", "~> 5.3.2"
23
24
  spec.add_development_dependency "rake"
24
25
  end
data/test/daemon.rb ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'process/daemon'
4
+
5
+ require 'webrick'
6
+ require 'webrick/https'
7
+
8
+ require 'xmlrpc/server'
9
+
10
+ # Very simple XMLRPC daemon
11
+ class XMLRPCDaemon < Process::Daemon
12
+ def base_directory
13
+ File.join(__dir__, "tmp")
14
+ end
15
+
16
+ def startup
17
+ puts "Starting server..."
18
+
19
+ @rpc_server = WEBrick::HTTPServer.new(
20
+ :Port => 31337,
21
+ :BindAddress => "0.0.0.0"
22
+ )
23
+
24
+ @listener = XMLRPC::WEBrickServlet.new
25
+
26
+ @listener.add_handler("fourty-two") do |amount|
27
+ "Hello World"
28
+ end
29
+
30
+ @rpc_server.mount("/RPC2", @listener)
31
+
32
+ begin
33
+ @rpc_server.start
34
+ rescue Interrupt
35
+ puts "Daemon interrupted..."
36
+ ensure
37
+ @rpc_server.shutdown
38
+ end
39
+ end
40
+
41
+ def shutdown
42
+ puts "Stopping the RPC server..."
43
+ @rpc_server.stop
44
+ end
45
+ end
46
+
47
+ XMLRPCDaemon.daemonize
data/test/test_daemon.rb CHANGED
@@ -75,14 +75,23 @@ class XMLRPCDaemon < Process::Daemon
75
75
  end
76
76
  end
77
77
 
78
+ class SleepDaemon < Process::Daemon
79
+ def working_directory
80
+ File.join(__dir__, "tmp")
81
+ end
82
+
83
+ def startup
84
+ sleep 1 while true
85
+ end
86
+ end
87
+
78
88
  class DaemonTest < MiniTest::Test
79
89
  def setup
80
- @daemon = XMLRPCDaemon.new
81
- Process::Daemon::Controller.start(@daemon)
90
+ XMLRPCDaemon.start
82
91
  end
83
92
 
84
93
  def teardown
85
- Process::Daemon::Controller.stop(@daemon)
94
+ XMLRPCDaemon.stop
86
95
  end
87
96
 
88
97
  def test_connection
@@ -93,4 +102,8 @@ class DaemonTest < MiniTest::Test
93
102
 
94
103
  assert_equal 10, total
95
104
  end
105
+
106
+ def test_instances
107
+ refute_equal SleepDaemon.instance, XMLRPCDaemon.instance
108
+ end
96
109
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: process-daemon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 5.3.2
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 5.3.2
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -71,6 +85,7 @@ files:
71
85
  - lib/process/daemon/process_file.rb
72
86
  - lib/process/daemon/version.rb
73
87
  - process-daemon.gemspec
88
+ - test/daemon.rb
74
89
  - test/test_daemon.rb
75
90
  homepage: ''
76
91
  licenses:
@@ -98,4 +113,5 @@ specification_version: 4
98
113
  summary: '`Process::Daemon` is a stable and helpful base class for long running tasks
99
114
  and daemons. Provides standard `start`, `stop`, `restart`, `status` operations.'
100
115
  test_files:
116
+ - test/daemon.rb
101
117
  - test/test_daemon.rb