highlander 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/CHANGES ADDED
@@ -0,0 +1,2 @@
1
+ = 0.1.0: 12-Dec-2010
2
+ * Initial release
@@ -0,0 +1,7 @@
1
+ * CHANGES
2
+ * README
3
+ * MANIFEST
4
+ * Rakefile
5
+ * highlander.gemspec
6
+ * lib/highlander.rb
7
+ * test/test_highlander.rb
data/README ADDED
@@ -0,0 +1,45 @@
1
+ = Description
2
+ A gem that ensures only one instance of your main script is running.
3
+ In short, there can be only one.
4
+
5
+ = Installation
6
+ gem install highlander
7
+
8
+ = Synopsis
9
+ require 'highlander'
10
+ # Your code here
11
+
12
+ # Meanwhile, back on the command line...
13
+
14
+ # First attempt, works. Assume it's running in the background.
15
+ ruby your_script.rb
16
+
17
+ # Second attempt while the first instance is still running, fails.
18
+ ruby your_script.rb # => RuntimeError
19
+
20
+ = Notes
21
+ Simply requiring the highlander gem ensures that only one instance
22
+ of that script cannot be started again. If you try to start it again
23
+ it will raise a RuntimeError.
24
+
25
+ = Known Issues
26
+ If you start your program, modify it while its running, and run it again
27
+ then this library will not work.
28
+
29
+ = Acknowledgements
30
+ Ara Howard for ideas.
31
+
32
+ = License
33
+ Artistic 2.0
34
+
35
+ = Copyright
36
+ (C) 2010 Daniel J. Berger
37
+ All Rights Reserved.
38
+
39
+ == Warranty
40
+ This package is provided "as is" and without any express or
41
+ implied warranties, including, without limitation, the implied
42
+ warranties of merchantability and fitness for a particular purpose.
43
+
44
+ = Author
45
+ Daniel Berger
@@ -0,0 +1,26 @@
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/testtask'
4
+
5
+ CLEAN.include("**/*.gem", "**/*.rbc")
6
+
7
+ namespace 'gem' do
8
+ desc 'Create the highlander gem'
9
+ task :create => [:clean] do
10
+ spec = eval(IO.read('highlander.gemspec'))
11
+ Gem::Builder.new(spec).build
12
+ end
13
+
14
+ desc 'Install the highlander gem'
15
+ task :install => [:create] do
16
+ file = Dir["*.gem"].first
17
+ sh "gem install #{file}"
18
+ end
19
+ end
20
+
21
+ Rake::TestTask.new do |t|
22
+ t.verbose = true
23
+ t.warning = true
24
+ end
25
+
26
+ task :default => :test
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+
3
+ Gem::Specification.new do |gem|
4
+ gem.name = 'highlander'
5
+ gem.version = '0.1.0'
6
+ gem.license = 'Artistic 2.0'
7
+ gem.author = 'Daniel J. Berger'
8
+ gem.email = 'djberg96@gmail.com'
9
+ gem.homepage = 'http://www.rubyforge.org/projects/shards'
10
+ gem.summary = 'There can be only one! Process, that is.'
11
+ gem.test_files = Dir['test/test*']
12
+ gem.has_rdoc = true
13
+ gem.files = Dir['**/*'].reject{ |f| f.include?('git') }
14
+
15
+ gem.rubyforge_project = 'shards'
16
+ gem.extra_rdoc_files = ['README', 'CHANGES', 'MANIFEST']
17
+
18
+ gem.description = <<-EOF
19
+ The highlander gem ensures that only once instance of the current
20
+ process is running. If you try to run the same Ruby program again
21
+ it will raise a RuntimeError instead.
22
+ EOF
23
+
24
+ gem.add_development_dependency('test-unit', '>= 2.1.1')
25
+ end
@@ -0,0 +1,19 @@
1
+ module Highlander
2
+ # The version of the highlander library
3
+ VERSION = '0.1.0'
4
+
5
+ BEGIN{
6
+ unless $0 == 'irb'
7
+ program = File.expand_path($0)
8
+ DATA = File.open(program) unless defined?(DATA)
9
+ status = DATA.flock(File::LOCK_EX | File::LOCK_NB)
10
+
11
+ if status != 0
12
+ raise RuntimeError, "Program '#{program}' already running"
13
+ exit! # In case of rescue, forcibly bail
14
+ end
15
+ end
16
+ }
17
+ end
18
+
19
+ include Highlander
@@ -0,0 +1,19 @@
1
+ #######################################################################
2
+ # test_highlander.rb
3
+ #
4
+ # Test suite for the highlander gem.
5
+ #######################################################################
6
+ require 'test/unit'
7
+ require 'highlander'
8
+
9
+ class TC_Highlander < Test::Unit::TestCase
10
+ def setup
11
+ end
12
+
13
+ def test_version
14
+ assert_equal("0.1.0", Highlander::VERSION)
15
+ end
16
+
17
+ def teardown
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: highlander
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Daniel J. Berger
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-12 00:00:00 -07:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: test-unit
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 9
30
+ segments:
31
+ - 2
32
+ - 1
33
+ - 1
34
+ version: 2.1.1
35
+ type: :development
36
+ version_requirements: *id001
37
+ description: " The highlander gem ensures that only once instance of the current\n process is running. If you try to run the same Ruby program again\n it will raise a RuntimeError instead.\n"
38
+ email: djberg96@gmail.com
39
+ executables: []
40
+
41
+ extensions: []
42
+
43
+ extra_rdoc_files:
44
+ - README
45
+ - CHANGES
46
+ - MANIFEST
47
+ files:
48
+ - CHANGES
49
+ - highlander.gemspec
50
+ - lib/highlander.rb
51
+ - MANIFEST
52
+ - Rakefile
53
+ - README
54
+ - test/test_highlander.rb
55
+ has_rdoc: true
56
+ homepage: http://www.rubyforge.org/projects/shards
57
+ licenses:
58
+ - Artistic 2.0
59
+ post_install_message:
60
+ rdoc_options: []
61
+
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ hash: 3
70
+ segments:
71
+ - 0
72
+ version: "0"
73
+ required_rubygems_version: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project: shards
85
+ rubygems_version: 1.3.7
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: There can be only one! Process, that is.
89
+ test_files:
90
+ - test/test_highlander.rb