pigeon 0.4.8 → 0.4.9

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.8
1
+ 0.4.9
data/lib/pigeon/engine.rb CHANGED
@@ -60,6 +60,29 @@ class Pigeon::Engine
60
60
  @name or self.to_s.gsub(/::/, ' ')
61
61
  end
62
62
 
63
+ # Returns the custom process name for this engine or nil if not assigned.
64
+ def self.process_name
65
+ @process_name
66
+ end
67
+
68
+ # Assigns the process name. This will be applied only when the engine is
69
+ # started.
70
+ def self.process_name=(value)
71
+ @process_name = value
72
+ end
73
+
74
+ # Returns the user this process should run as, or nil if no particular
75
+ # user is required. This will be applied after the engine has been started
76
+ # and the after_start call has been triggered.
77
+ def self.user
78
+ @user
79
+ end
80
+
81
+ # Assigns the user this process should run as, given a username.
82
+ def self.user=(value)
83
+ @user = value
84
+ end
85
+
63
86
  # Returns the name of the PID file to use. The full path to the file
64
87
  # is specified elsewhere.
65
88
  def self.pid_file_name
@@ -231,6 +254,8 @@ class Pigeon::Engine
231
254
  # Handles the run phase of the engine, triggers the before_start and
232
255
  # after_start events accordingly.
233
256
  def run
257
+ assign_process_name!
258
+
234
259
  run_chain(:before_start)
235
260
 
236
261
  STDOUT.sync = true
@@ -238,6 +263,8 @@ class Pigeon::Engine
238
263
  logger.info("Engine \##{id} Running")
239
264
 
240
265
  run_chain(:after_start)
266
+
267
+ switch_to_effective_user! if (self.class.user)
241
268
  end
242
269
 
243
270
  # Used to periodically execute a task or block. When giving a task name,
@@ -374,4 +401,27 @@ protected
374
401
  def run_chain(chain_name)
375
402
  self.class.run_chain(chain_name, self)
376
403
  end
404
+
405
+ def switch_to_effective_user!
406
+ require 'etc'
407
+
408
+ requested_user = Etc.getpwnam(self.class.user)
409
+ requested_uid = (requested_user and requested_user.uid)
410
+
411
+ if (Process.uid != requested_uid)
412
+ switched_to_uid = Process::UID.change_privilege(requested_uid)
413
+
414
+ unless (requested_uid == switched_to_uid)
415
+ STDERR.puts "Could not switch to effective UID #{uid} (#{self.class.user})"
416
+ exit(-9)
417
+ end
418
+ end
419
+ end
420
+
421
+ def assign_process_name!
422
+ puts self.class.process_name.inspect
423
+ if (self.class.process_name)
424
+ $0 = self.class.process_name
425
+ end
426
+ end
377
427
  end
@@ -42,6 +42,7 @@ class Pigeon::SortedArray < Array
42
42
  elsif (comparison > 0)
43
43
  low = mid + 1
44
44
  else
45
+ low = mid
45
46
  break
46
47
  end
47
48
  end
data/pigeon.gemspec CHANGED
@@ -1,76 +1,74 @@
1
1
  # Generated by jeweler
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{pigeon}
8
- s.version = "0.4.8"
8
+ s.version = "0.4.9"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["tadman"]
12
- s.date = %q{2011-01-06}
12
+ s.date = %q{2011-01-18}
13
13
  s.default_executable = %q{launcher.example}
14
14
  s.description = %q{Pigeon is a simple way to get started building an EventMachine engine that's intended to run as a background job.}
15
15
  s.email = %q{github@tadman.ca}
16
16
  s.executables = ["launcher.example"]
17
17
  s.extra_rdoc_files = [
18
18
  "LICENSE",
19
- "README.rdoc"
19
+ "README.rdoc"
20
20
  ]
21
21
  s.files = [
22
22
  ".document",
23
- ".gitignore",
24
- "LICENSE",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "bin/launcher.example",
29
- "lib/pigeon.rb",
30
- "lib/pigeon/dispatcher.rb",
31
- "lib/pigeon/engine.rb",
32
- "lib/pigeon/launcher.rb",
33
- "lib/pigeon/logger.rb",
34
- "lib/pigeon/option_accessor.rb",
35
- "lib/pigeon/pidfile.rb",
36
- "lib/pigeon/processor.rb",
37
- "lib/pigeon/queue.rb",
38
- "lib/pigeon/scheduler.rb",
39
- "lib/pigeon/sorted_array.rb",
40
- "lib/pigeon/support.rb",
41
- "lib/pigeon/task.rb",
42
- "pigeon.gemspec",
43
- "test/helper.rb",
44
- "test/unit/pigeon_backlog_test.rb",
45
- "test/unit/pigeon_dispatcher_test.rb",
46
- "test/unit/pigeon_engine_test.rb",
47
- "test/unit/pigeon_launcher_test.rb",
48
- "test/unit/pigeon_option_accessor_test.rb",
49
- "test/unit/pigeon_processor_test.rb",
50
- "test/unit/pigeon_queue_test.rb",
51
- "test/unit/pigeon_scheduler_test.rb",
52
- "test/unit/pigeon_sorted_array_test.rb",
53
- "test/unit/pigeon_task_test.rb",
54
- "test/unit/pigeon_test.rb"
23
+ "LICENSE",
24
+ "README.rdoc",
25
+ "Rakefile",
26
+ "VERSION",
27
+ "bin/launcher.example",
28
+ "lib/pigeon.rb",
29
+ "lib/pigeon/dispatcher.rb",
30
+ "lib/pigeon/engine.rb",
31
+ "lib/pigeon/launcher.rb",
32
+ "lib/pigeon/logger.rb",
33
+ "lib/pigeon/option_accessor.rb",
34
+ "lib/pigeon/pidfile.rb",
35
+ "lib/pigeon/processor.rb",
36
+ "lib/pigeon/queue.rb",
37
+ "lib/pigeon/scheduler.rb",
38
+ "lib/pigeon/sorted_array.rb",
39
+ "lib/pigeon/support.rb",
40
+ "lib/pigeon/task.rb",
41
+ "pigeon.gemspec",
42
+ "test/helper.rb",
43
+ "test/unit/pigeon_backlog_test.rb",
44
+ "test/unit/pigeon_dispatcher_test.rb",
45
+ "test/unit/pigeon_engine_test.rb",
46
+ "test/unit/pigeon_launcher_test.rb",
47
+ "test/unit/pigeon_option_accessor_test.rb",
48
+ "test/unit/pigeon_processor_test.rb",
49
+ "test/unit/pigeon_queue_test.rb",
50
+ "test/unit/pigeon_scheduler_test.rb",
51
+ "test/unit/pigeon_sorted_array_test.rb",
52
+ "test/unit/pigeon_task_test.rb",
53
+ "test/unit/pigeon_test.rb"
55
54
  ]
56
55
  s.homepage = %q{http://github.com/twg/pigeon}
57
- s.rdoc_options = ["--charset=UTF-8"]
58
56
  s.require_paths = ["lib"]
59
57
  s.rubygems_version = %q{1.3.7}
60
58
  s.summary = %q{Simple daemonized EventMachine engine framework with plug-in support}
61
59
  s.test_files = [
62
60
  "test/helper.rb",
63
- "test/unit/pigeon_backlog_test.rb",
64
- "test/unit/pigeon_dispatcher_test.rb",
65
- "test/unit/pigeon_engine_test.rb",
66
- "test/unit/pigeon_launcher_test.rb",
67
- "test/unit/pigeon_option_accessor_test.rb",
68
- "test/unit/pigeon_processor_test.rb",
69
- "test/unit/pigeon_queue_test.rb",
70
- "test/unit/pigeon_scheduler_test.rb",
71
- "test/unit/pigeon_sorted_array_test.rb",
72
- "test/unit/pigeon_task_test.rb",
73
- "test/unit/pigeon_test.rb"
61
+ "test/unit/pigeon_backlog_test.rb",
62
+ "test/unit/pigeon_dispatcher_test.rb",
63
+ "test/unit/pigeon_engine_test.rb",
64
+ "test/unit/pigeon_launcher_test.rb",
65
+ "test/unit/pigeon_option_accessor_test.rb",
66
+ "test/unit/pigeon_processor_test.rb",
67
+ "test/unit/pigeon_queue_test.rb",
68
+ "test/unit/pigeon_scheduler_test.rb",
69
+ "test/unit/pigeon_sorted_array_test.rb",
70
+ "test/unit/pigeon_task_test.rb",
71
+ "test/unit/pigeon_test.rb"
74
72
  ]
75
73
 
76
74
  if s.respond_to? :specification_version then
@@ -21,13 +21,15 @@ class PigeonSortedArrayTest < Test::Unit::TestCase
21
21
  def test_does_sorting
22
22
  array = Pigeon::SortedArray.new
23
23
 
24
- test_array = (0..100).to_a.reverse
24
+ test_array = [2, 2, 2, 2, 3, 3, 3]
25
25
 
26
- array += test_array
26
+ test_array.each do |i|
27
+ array << i
28
+ end
27
29
 
28
- assert_equal (0..100).to_a, array
30
+ assert_equal [2, 2, 2, 2, 3, 3, 3], array.to_a
29
31
  end
30
-
32
+
31
33
  def test_does_sorting_with_insertion_in_order
32
34
  array = Pigeon::SortedArray.new
33
35
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 4
8
- - 8
9
- version: 0.4.8
8
+ - 9
9
+ version: 0.4.9
10
10
  platform: ruby
11
11
  authors:
12
12
  - tadman
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-06 00:00:00 -05:00
17
+ date: 2011-01-18 00:00:00 -05:00
18
18
  default_executable: launcher.example
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -41,7 +41,6 @@ extra_rdoc_files:
41
41
  - README.rdoc
42
42
  files:
43
43
  - .document
44
- - .gitignore
45
44
  - LICENSE
46
45
  - README.rdoc
47
46
  - Rakefile
@@ -78,8 +77,8 @@ homepage: http://github.com/twg/pigeon
78
77
  licenses: []
79
78
 
80
79
  post_install_message:
81
- rdoc_options:
82
- - --charset=UTF-8
80
+ rdoc_options: []
81
+
83
82
  require_paths:
84
83
  - lib
85
84
  required_ruby_version: !ruby/object:Gem::Requirement
data/.gitignore DELETED
@@ -1,14 +0,0 @@
1
- *.gem
2
- *.log
3
-
4
- .DS_Store
5
- *.tmproj
6
- tmtags
7
- *~
8
- \#*
9
- .\#*
10
- *.swp
11
- coverage
12
- rdoc
13
- pkg
14
-