rinit 0.1.5

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ea0acfa0eb74979cb10df4d21486576f600304e2
4
+ data.tar.gz: 5b130fbf83ac7b8b82955c6be348a86a6a88d36c
5
+ SHA512:
6
+ metadata.gz: 389a152befef38018ca332c82fbbcc8527febaada6fc4c84784a889e989f46f2f2df0ea00d98de0a5be321498922a3a18e7b93d5b51f8d8d308b4b4981bc7e1d
7
+ data.tar.gz: 571ba2186bab9183b14cb484ca549de3e3d2b746d083e389328a5d4828cd5dfaed089fc3db0674e3aece20ef3e0872de4c7cd6b4c5324be9de136468432abca8
@@ -0,0 +1,20 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/foo_daemon.rb
17
+ test/test_init.rb
18
+ test/version_tmp
19
+ tmp
20
+ tags
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rinit.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 YOUR NAME
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Brad Smith
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,120 @@
1
+ # Rinit
2
+
3
+ Rinit is a `init-like` script witten in ruby.
4
+
5
+ ### This only works for Debian based systems currently.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'rinit'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install rinit
20
+
21
+ ## Usage
22
+
23
+ Let's say you have a daemon script called `foodaemon.rb`.
24
+ You want to be able to `start, stop, restart, and get the status` of said daemon.
25
+ Better yet, you need a pid file so you can use monit to monitor the process.
26
+ Create a file in `/etc/init.d/` (or where ever you like). Name it what you want and make sure it is executable.
27
+
28
+ ### your awesome damon script
29
+ ```ruby
30
+ loop do
31
+ puts "I am a daemon...and I loop loop loop and I loop loop loop!"
32
+ sleep 10
33
+ end
34
+ ```
35
+
36
+ ### a init script to control said awesomeness
37
+
38
+ ```ruby
39
+ #!/usr/bin/env ruby
40
+ require 'rinit'
41
+
42
+ extend Rinit
43
+ # app_name This is a startup script for use in /etc/init.d
44
+ #
45
+ # description: This will start, stop, and restart foo daemon
46
+
47
+ # this is an example of using ruby for a init script
48
+
49
+ APP_NAME = "foodaemon"
50
+ PIDFILE = "/tmp/#{APP_NAME}.pid"
51
+ PATH = "/home/bradleyd/Projects/rinit/test/"
52
+ DAEMON = "#{PATH}/foo_daemon.rb"
53
+ USER = ENV["USER"]
54
+
55
+ case ARGV.first
56
+ when 'status'
57
+ puts "#{APP_NAME} is #{Rinit.status(PIDFILE)}"
58
+ when 'start'
59
+ result = Rinit.start :cmd => "#{DAEMON}",
60
+ :chuid => USER,
61
+ :pidfile => PIDFILE
62
+
63
+ puts "#{APP_NAME} is started" unless result.nil?
64
+ when 'stop'
65
+ Rinit.stop(PIDFILE)
66
+ puts "#{APP_NAME} is stopped"
67
+ when 'restart'
68
+ puts "#{APP_NAME} is restarting..."
69
+ Rinit.restart(PIDFILE, :cmd => "#{DAEMON}",
70
+ :chuid => USER,
71
+ :pidfile => PIDFILE)
72
+ end
73
+
74
+ unless %w{start stop restart status}.include? ARGV.first
75
+ puts "Usage: #{APP_NAME} {start|stop|restart}"
76
+ exit
77
+ end
78
+ ```
79
+
80
+ Then you can do this
81
+
82
+ ```bash
83
+ ./foo status
84
+ foo is stoppped
85
+ ```
86
+
87
+ ```bash
88
+ ./foo start
89
+ foo is running
90
+ ```
91
+ You get the idea...
92
+
93
+ ### Simple Template Builder
94
+
95
+ `rinit` also has a simple template builder. For example,
96
+ to generate a init script to be used in `init.d/` one could do this
97
+
98
+ * only monit and init templates are supported as of now
99
+
100
+ ```ruby
101
+ -t, --template type generator for init template
102
+ -n, --daemon-name name name of the dameon
103
+ -h, --help Show this message
104
+ ```
105
+
106
+ ```ruby
107
+ rinit -t init -n foobar
108
+ ```
109
+
110
+ This will create a file in the current directory where you ran `rinit`
111
+
112
+ * your milage may vary
113
+
114
+ ## Contributing
115
+
116
+ 1. Fork it
117
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
118
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
119
+ 4. Push to the branch (`git push origin my-new-feature`)
120
+ 5. Create new Pull Request
@@ -0,0 +1,8 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs.push "lib"
6
+ t.test_files = FileList['test/*_test.rb']
7
+ t.verbose = true
8
+ end
data/TODO ADDED
@@ -0,0 +1,4 @@
1
+ TODO:
2
+ Fix LICENSE with your name
3
+ Fix Rakefile with your name and contact info
4
+ Add your code to lib/<%= name %>.rb
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
4
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
5
+ require "bundler/setup"
6
+ require 'rinit'
7
+ require 'optparse'
8
+
9
+ options = {}
10
+ banner = nil
11
+
12
+ # set the default option is none are given
13
+ #
14
+ OptionParser.new do |opts|
15
+ opts.banner = "Usage: #{__FILE__} [options]"
16
+
17
+ opts.on("-t ", "--template type", "generator for init template") do |t|
18
+ options[:template] = t
19
+ end
20
+
21
+ opts.on("-n ", "--daemon-name name", "name of the dameon") do |n|
22
+ options[:name] = n
23
+ end
24
+
25
+
26
+
27
+ opts.on_tail("-h", "--help", "Show this message") do
28
+ puts opts
29
+ exit
30
+ end
31
+ #set current options
32
+ banner = opts
33
+
34
+ end.parse!
35
+
36
+ if options.empty?
37
+ puts banner
38
+ exit
39
+ end
40
+
41
+ template = Rinit::TemplateBuilder.new(options)
42
+ template.build
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rinit'
3
+
4
+ extend Rinit
5
+
6
+ # app_name This is a startup script for use in /etc/init.d
7
+ #
8
+ # description: This will start, stop, and restart <%= @name %>
9
+
10
+ # this is an example of using ruby for a init script
11
+
12
+ APP_NAME = <%= @name %>
13
+ PIDFILE = "/tmp/#{APP_NAME}.pid"
14
+ # change PATH to point at your daemon path
15
+ PATH = File.expand_path File.dirname(__FILE__)
16
+ DAEMON = File.join(PATH, <%= @name %>)
17
+ # @todo change this to the user you want the daemon to run as
18
+ USER = ENV["USER"]
19
+
20
+ case ARGV.first
21
+ when "status"
22
+ puts "#{APP_NAME} is #{Rinit.status(PIDFILE) ? "running" : "stopped"}"
23
+ when "start"
24
+ result = Rinit.start(cmd: DAEMON,
25
+ chuid: USER,
26
+ pidfile: PIDFILE)
27
+
28
+ puts "#{APP_NAME} has started" unless result.nil?
29
+ when "stop"
30
+ Rinit.stop(PIDFILE)
31
+ puts "#{APP_NAME} is stopped"
32
+ when "restart"
33
+ puts "#{APP_NAME} is restarting..."
34
+ Rinit.restart(PIDFILE, cmd: DAEMON,
35
+ chuid: USER,
36
+ pidfile: PIDFILE)
37
+ end
38
+
39
+ unless %w{start stop restart status}.include? ARGV.first
40
+ puts "Usage: #{APP_NAME} {start|stop|restart}"
41
+ exit
42
+ end
@@ -0,0 +1,8 @@
1
+ check process <%= @name %>
2
+ with pidfile /var/run/<%= @name %>.pid
3
+ start program = "/etc/init.d/<%= @name %> start"
4
+ stop program = "/etc/init.d/<%= @name %> stop"
5
+ if cpu > 60% for 2 cycles then alert
6
+ if failed host 127.0.0.1 port 3000 protocol http
7
+ then alert
8
+
@@ -0,0 +1,8 @@
1
+ require "rinit/version"
2
+ require "rinit/exceptions"
3
+ require "rinit/process_utils"
4
+ require "rinit/commands"
5
+ require "rinit/template_builder"
6
+
7
+ module Rinit
8
+ end
@@ -0,0 +1,41 @@
1
+ require "open4"
2
+ module Rinit
3
+ class << self
4
+ include ProcessUtils
5
+
6
+ # @param opts [Hash] opts :cmd, :chuid, :pidfile
7
+ # @return [nil]
8
+ # @example
9
+ # {cmd: "/tmp/foo_daemon.rb", chuid: "foo", pidfile: "/tmp/foo.pid"}
10
+ #
11
+ def start(opts={})
12
+ command = opts.fetch(:cmd) { raise Rinit::CommandException.new "No command given" }
13
+ user = opts.fetch(:chuid) { raise Rinit::CommandException.new "No user given" }
14
+ pidfile = opts.fetch(:pidfile) { raise Rinit::CommandException.new "No pidfile was given" }
15
+ may_the_fork_be_with_you(command, pidfile)
16
+ end
17
+
18
+ # @param pidfile [String] the full pidfile path
19
+ # @return [nil] if there were not any errors
20
+ def stop(pidfile)
21
+ kill_process(pidfile)
22
+ pidfile_cleanup(pidfile)
23
+ end
24
+
25
+ # @param pidfile [String] the full pidfile path
26
+ # @return process_status [String] Started or Stopped
27
+ def status pidfile
28
+ is_process_running?(pidfile)
29
+ end
30
+
31
+ # @param pidfile [String] the full pidfile path
32
+ # @param opts [Hash] see #start
33
+ # @return process_status [String] Started or Stopped
34
+ # @example
35
+ # "/tmp/foo.pid", {cmd: "/tmp/foo_daemon.rb", chuid: "foo", pidfile: "/tmp/foo.pid"}
36
+ def restart(pidfile, opts={})
37
+ stop(pidfile)
38
+ start(opts)
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,4 @@
1
+ module Rinit
2
+ class CommandException < StandardError; end
3
+ class ProcessException < StandardError; end
4
+ end
@@ -0,0 +1,80 @@
1
+ require "sys/proctable"
2
+ require "fileutils"
3
+
4
+ module Rinit
5
+ module ProcessUtils
6
+ include Sys
7
+
8
+ # @private
9
+ def may_the_fork_be_with_you(command, pidfile)
10
+ rd, wr = IO.pipe
11
+ pid = fork do
12
+ rd.close
13
+ begin
14
+ exec(command)
15
+ rescue SystemCallError
16
+ wr.write('!')
17
+ exit 1
18
+ end
19
+ end
20
+ wr.close
21
+ command_result = if rd.eof?
22
+ write_pidfile(pid, pidfile)
23
+ else
24
+ nil
25
+ end
26
+ end
27
+
28
+ # @private
29
+ def get_pid_from_file(filename)
30
+ begin
31
+ pid = IO.readlines(filename)
32
+ rescue Errno::ENOENT => e
33
+ puts e.message + "---Are you sure it is running?"
34
+ exit 1
35
+ end
36
+ # if the file is there but no pid was written to_i returns 0
37
+ pid.empty? ? -1 : pid[0].to_i
38
+ end
39
+
40
+ # @private
41
+ def is_process_running?(pidfile)
42
+ pid = get_pid_from_file(pidfile)
43
+ ProcTable.ps{ |process|
44
+ return true if process.pid == pid
45
+ }
46
+ false
47
+ end
48
+
49
+ # @private
50
+ def pidfile_cleanup pidfile
51
+ begin
52
+ FileUtils.rm(pidfile)
53
+ rescue Errno::ENOENT => e
54
+ puts e.message
55
+ exit 1
56
+ end
57
+ end
58
+
59
+ # @private
60
+ def kill_process(pidfile)
61
+ pid = get_pid_from_file(pidfile)
62
+ # should never be negative unless there is an issue with writing the pid
63
+ return if pid < 0
64
+ begin
65
+ Process.kill(9,pid)
66
+ rescue Errno::ESRCH => e
67
+ puts e.message
68
+ puts "The pid file may not have been cleaned up properly."
69
+ exit 1
70
+ end
71
+ end
72
+
73
+ # @private
74
+ def write_pidfile(pid, pidfile)
75
+ File.open(pidfile, 'w') { |f| f.write(pid) }
76
+ end
77
+
78
+ end
79
+
80
+ end
@@ -0,0 +1,38 @@
1
+ require "erb"
2
+ module Rinit
3
+ # simple template generator
4
+ #
5
+ # @note only supports init and monit right now
6
+ class TemplateBuilder
7
+
8
+ def initialize(opts={})
9
+ @template = opts.fetch(:template) { 'init' }
10
+ @name = opts.fetch(:name) { 'foobar' }
11
+ end
12
+
13
+ # @params nil [nil]
14
+ # @return [nil]
15
+ def build
16
+ @erb_temp = ERB.new(File.read(template_file)) #.result(binding)
17
+ write_out_file
18
+ end
19
+
20
+ private
21
+ # @private
22
+ def write_out_file
23
+ File.open(example_name, 'w') do |f|
24
+ f.write @erb_temp.result(binding)
25
+ end
26
+ end
27
+
28
+ # @private
29
+ def example_name
30
+ "#{@name}.#{@template}"
31
+ end
32
+
33
+ # @private
34
+ def template_file
35
+ File.join(File.expand_path(File.dirname(__FILE__)), "../../", "examples", @template)
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,3 @@
1
+ module Rinit
2
+ VERSION = "0.1.5"
3
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rinit/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rinit"
8
+ spec.version = Rinit::VERSION
9
+ spec.authors = ["Bradley Smith"]
10
+ spec.email = ["bradleydsmith@gmail.com"]
11
+ spec.description = %q{ Provides init-like script structure for ruby}
12
+ spec.summary = %q{ Provides init-like script structure for ruby so you can control your daemons. }
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "sys-proctable"
22
+ spec.add_dependency "open4"
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "mocha"
26
+ spec.add_development_dependency "minitest"
27
+ end
@@ -0,0 +1,52 @@
1
+ require_relative "test_helper"
2
+ require 'tempfile'
3
+ require 'sys/proctable'
4
+ require "ostruct"
5
+
6
+ class RinitCommandsTest < MiniTest::Unit::TestCase
7
+ extend Rinit
8
+ include Sys
9
+
10
+ DAEMON = File.join(File.expand_path(File.dirname(__FILE__)), "support", "foo_daemon.rb")
11
+ USER = ENV["USER"]
12
+
13
+ def setup
14
+ @rinit = Rinit
15
+ @pidfile = Tempfile.new("foo.pid")
16
+ @pidfile.rewind
17
+ end
18
+
19
+ def teardown
20
+ #@pidfile.unlink
21
+ end
22
+
23
+ def test_that_respond_to_start
24
+ assert_respond_to @rinit, :start
25
+ end
26
+
27
+ def test_that_respond_to_stop
28
+ assert_respond_to @rinit, :stop
29
+ end
30
+
31
+ def test_that_respond_to_status
32
+ assert_respond_to @rinit, :status
33
+ end
34
+
35
+ def test_that_respond_to_restart
36
+ assert_respond_to @rinit, :restart
37
+ end
38
+
39
+ def test_should_start_daemon_and_stop_daemon
40
+ assert(@rinit.start(:cmd => DAEMON,
41
+ :chuid => USER,
42
+ :pidfile => @pidfile.path))
43
+
44
+ assert(@rinit.status(@pidfile.path))
45
+ assert(@rinit.stop(@pidfile.path))
46
+ end
47
+
48
+ def test_status_should_be_stopped
49
+ refute(@rinit.status(@pidfile.path))
50
+ end
51
+
52
+ end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ loop do
5
+ File.open("/tmp/looper", "a+") { |f| f.write "loop de do!!" }
6
+ sleep 60
7
+ exit
8
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+ require 'rinit'
3
+
4
+ extend Rinit
5
+
6
+ # app_name This is a startup script for use in /etc/init.d
7
+ #
8
+ # description: This will start, stop, and restart foo daemon
9
+
10
+ # this is an example of using ruby for a init script
11
+
12
+ APP_NAME = "Foodaemon"
13
+ PIDFILE = "/tmp/#{APP_NAME}.pid"
14
+ PATH = File.expand_path File.dirname(__FILE__)
15
+ DAEMON = File.join(PATH, "foo_daemon.rb")
16
+ USER = ENV["USER"]
17
+
18
+ case ARGV.first
19
+ when "status"
20
+ puts "#{APP_NAME} is #{Rinit.status(PIDFILE) ? "running" : "stopped"}"
21
+ when "start"
22
+ result = Rinit.start(cmd: DAEMON,
23
+ chuid: USER,
24
+ pidfile: PIDFILE)
25
+
26
+ puts "#{APP_NAME} has started" unless result.nil?
27
+ when "stop"
28
+ Rinit.stop(PIDFILE)
29
+ puts "#{APP_NAME} is stopped"
30
+ when "restart"
31
+ puts "#{APP_NAME} is restarting..."
32
+ Rinit.restart(PIDFILE, cmd: DAEMON,
33
+ chuid: USER,
34
+ pidfile: PIDFILE)
35
+ end
36
+
37
+ unless %w{start stop restart status}.include? ARGV.first
38
+ puts "Usage: #{APP_NAME} {start|stop|restart}"
39
+ exit
40
+ end
41
+
@@ -0,0 +1,29 @@
1
+ require_relative "test_helper"
2
+ require_relative './test_helper'
3
+
4
+ class RinitTemplateBuilderTest < MiniTest::Unit::TestCase
5
+
6
+ def setup
7
+ @name = 'foobar'
8
+ @template = 'init'
9
+ @example_file = File.join(File.expand_path(File.dirname(__FILE__)), "../",
10
+ "#{@name}.#{@template}")
11
+ @generator = Rinit::TemplateBuilder.new(template: @template, name: @name)
12
+ end
13
+
14
+ def test_should_respond_to_build
15
+ assert_respond_to(@generator, :build)
16
+ end
17
+
18
+ def test_should_create_template
19
+ @generator.build
20
+ assert(File.exist?(@example_file), "cant find file")
21
+ end
22
+
23
+ def teardown
24
+ begin
25
+ FileUtils.rm(@example_file)
26
+ rescue
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,4 @@
1
+ require "minitest/autorun"
2
+ require "minitest/pride"
3
+ require "mocha/setup"
4
+ require "rinit"
metadata ADDED
@@ -0,0 +1,156 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rinit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.5
5
+ platform: ruby
6
+ authors:
7
+ - Bradley Smith
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sys-proctable
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: open4
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mocha
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: ' Provides init-like script structure for ruby'
98
+ email:
99
+ - bradleydsmith@gmail.com
100
+ executables:
101
+ - rinit
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - .gitignore
106
+ - Gemfile
107
+ - LICENSE
108
+ - LICENSE.txt
109
+ - README.md
110
+ - Rakefile
111
+ - TODO
112
+ - bin/rinit
113
+ - examples/init
114
+ - examples/monit
115
+ - lib/rinit.rb
116
+ - lib/rinit/commands.rb
117
+ - lib/rinit/exceptions.rb
118
+ - lib/rinit/process_utils.rb
119
+ - lib/rinit/template_builder.rb
120
+ - lib/rinit/version.rb
121
+ - rinit.gemspec
122
+ - test/rinit_commands_test.rb
123
+ - test/support/foo_daemon.rb
124
+ - test/support/sample_init.rb
125
+ - test/template_builder_test.rb
126
+ - test/test_helper.rb
127
+ homepage: ''
128
+ licenses:
129
+ - MIT
130
+ metadata: {}
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - '>='
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ required_rubygems_version: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ requirements: []
146
+ rubyforge_project:
147
+ rubygems_version: 2.0.0
148
+ signing_key:
149
+ specification_version: 4
150
+ summary: Provides init-like script structure for ruby so you can control your daemons.
151
+ test_files:
152
+ - test/rinit_commands_test.rb
153
+ - test/support/foo_daemon.rb
154
+ - test/support/sample_init.rb
155
+ - test/template_builder_test.rb
156
+ - test/test_helper.rb