launchd 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9eb4f58d9f4e2f2a13283946c5ed6daf978ef441
4
- data.tar.gz: 62837d74534dc815513129b957d3a051a05f3ef0
3
+ metadata.gz: 8fb752b754bb2198fdadd8ebbf74280e6f79aeaf
4
+ data.tar.gz: 1ec69bbdf2d510e349c1bfe4041cdebc8fcdd8fe
5
5
  SHA512:
6
- metadata.gz: 3964fa06b8d10448933e1a8be4cc21ad765be7141274bcc9c09ccc5d897f56f93cf92ca3b37c82bdaa1bc620033008f065a4e662f5abb741e1e267bf051d68fa
7
- data.tar.gz: fa878a6fea4541c4d67d601605f6356af2c207d6a342f1b42ff0fc43702be968a732053b8614c2c1ee2d18d3bd89b379bc37d53351c68a7acf3e11fb80d9f55b
6
+ metadata.gz: e74098bed3e054e22185f09bf27528d1858186ca3042a05b4a3a69b4d0027ddc473a21e82f2ceae57bf31c27551653d9c8bdccc7ee592c13c43c0e3fcf74722d
7
+ data.tar.gz: a6fc55dcf1d6cbce2aa3726df13afb5b85bbd07364c0b8174c2f8dc07055e9e3107a8b4b2354eef26f93ac65019376634272532b53b64e473103ec7c79d43cc5
@@ -0,0 +1 @@
1
+ system
data/README.md CHANGED
@@ -3,8 +3,6 @@
3
3
  Ruby-Launchd is like launchctl (or the famous lunchy). It lets you easily
4
4
  create, start and stop services on Mac OS X, but with Ruby.
5
5
 
6
- **NOTE: This is currently just the README without any code!**
7
-
8
6
 
9
7
  ## Installation
10
8
 
@@ -22,29 +20,19 @@ Or install it yourself as:
22
20
 
23
21
  $ gem install launchd
24
22
 
25
- ## Usage
26
-
27
- A new service requires a label (in reverse-domain-notation) and the actual
28
- command to run as array:
29
23
 
30
- ```Ruby
31
- service = Launchd.new 'com.example.chunkybacon', %w(/usr/sbin/chunkyd --bacon)
32
- ```
24
+ ## Usage
33
25
 
34
- Then start and stop it with...
26
+ Deploy (install & restart) a service:
35
27
 
36
28
  ```Ruby
37
- service.start # Starts the service if not already running.
38
- service.stop # Stops the service unless already stopped.
29
+ service = Launchd::Service.new 'com.example.chunkybacon', # Label of service
30
+ program_arguments: %w(/usr/sbin/chunkyd --bacon), # command line as array
31
+ keep_alive: true # Shall launchd keep it running?
32
+ service.deploy
39
33
  ```
40
34
 
41
- Both return `true` on success or `false` otherwise, i.e. if a job was already running.
42
-
43
- Use the bang-version to forcefully overwrite an already running service:
44
-
45
- ```Ruby
46
- service.start! # Stops, updates and starts service, no matter if it's running or not.
47
- ```
35
+ **NOTE: All options are also required!**
48
36
 
49
37
 
50
38
  ## Development
@@ -19,6 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ['lib']
21
21
 
22
+ spec.add_dependency 'plist', '~> 3.1'
23
+
22
24
  spec.add_development_dependency 'bundler', '~> 1.10'
23
25
  spec.add_development_dependency 'rake', '~> 10.0'
24
26
  spec.add_development_dependency 'rspec'
@@ -1,4 +1,7 @@
1
- require "launchd/version"
1
+ require 'plist'
2
+
3
+ require 'launchd/version'
4
+ require 'launchd/service'
2
5
 
3
6
  module Launchd
4
7
  # Your code goes here...
@@ -0,0 +1,70 @@
1
+ module Launchd
2
+ class Service
3
+ attr_reader :label
4
+
5
+ def initialize(label, opts = {})
6
+ @label = label
7
+ @opts = opts
8
+ end
9
+
10
+ # Deploy (install & restart) the service.
11
+ #
12
+ # If running as root, it will get installed as system-wide daemon,
13
+ # otherwise as agent.
14
+ #
15
+ def deploy
16
+ stop if running?
17
+ write_plist
18
+ start
19
+ end
20
+
21
+ # Stops the service.
22
+ def stop
23
+ system("launchctl unload -w #{label}")
24
+ end
25
+
26
+ # Starts the service.
27
+ def start
28
+ system("launchctl load -w #{label}")
29
+ end
30
+
31
+ # Returns true, when this service is runnung (loaded), otherwise false.
32
+ def running?
33
+ !!system("launchctl list #{label}")
34
+ end
35
+
36
+ private
37
+
38
+ # Save actual plist to disk.
39
+ def write_plist
40
+ File.open(plist_path, 'w') do |file|
41
+ file.puts properties.to_plist
42
+ end
43
+ end
44
+
45
+ # Returns path to plist.
46
+ def plist_path
47
+ plist_dir.join "#{label}.plist"
48
+ end
49
+
50
+ # Returns directory where plist is stored.
51
+ def plist_dir
52
+ Pathname.new(
53
+ root? ? '/Library/LaunchDaemons' : '~/Library/LaunchAgents')
54
+ end
55
+
56
+ # Returns true, when running as root, otherwise false.
57
+ def root?
58
+ Process.euid.zero?
59
+ end
60
+
61
+ # Returns hash of plist properties.
62
+ def properties
63
+ {
64
+ 'Label' => label,
65
+ 'ProgramArguments' => @opts[:program_arguments],
66
+ 'KeepAlive' => @opts[:keep_alive]
67
+ }
68
+ end
69
+ end
70
+ end
@@ -1,3 +1,3 @@
1
1
  module Launchd
2
- VERSION = '0.0.1'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: launchd
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Björn Albers
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-09-23 00:00:00.000000000 Z
11
+ date: 2015-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: plist
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '3.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '3.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -62,6 +76,7 @@ extra_rdoc_files: []
62
76
  files:
63
77
  - .gitignore
64
78
  - .rspec
79
+ - .ruby-version
65
80
  - .travis.yml
66
81
  - CODE_OF_CONDUCT.md
67
82
  - Gemfile
@@ -72,6 +87,7 @@ files:
72
87
  - bin/setup
73
88
  - launchd.gemspec
74
89
  - lib/launchd.rb
90
+ - lib/launchd/service.rb
75
91
  - lib/launchd/version.rb
76
92
  homepage: https://github.com/bjoernalbers/ruby-launchd
77
93
  licenses: