foreman 0.37.2 → 0.38.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/lib/foreman/cli.rb CHANGED
@@ -10,7 +10,7 @@ class Foreman::CLI < Thor
10
10
 
11
11
  class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile"
12
12
 
13
- desc "start", "Start the application"
13
+ desc "start [PROCESS]", "Start the application (or a specific PROCESS)"
14
14
 
15
15
  class_option :procfile, :type => :string, :aliases => "-f", :desc => "Default: Procfile"
16
16
  class_option :app_root, :type => :string, :aliases => "-d", :desc => "Default: Procfile directory"
@@ -27,8 +27,9 @@ class Foreman::CLI < Thor
27
27
  end
28
28
  end
29
29
 
30
- def start
30
+ def start(process=nil)
31
31
  check_procfile!
32
+ engine.options[:concurrency] = "#{process}=1" if process
32
33
  engine.start
33
34
  end
34
35
 
@@ -23,7 +23,7 @@ class Foreman::Engine
23
23
  def initialize(procfile, options={})
24
24
  @procfile = Foreman::Procfile.new(procfile)
25
25
  @directory = options[:app_root] || File.expand_path(File.dirname(procfile))
26
- @options = options
26
+ @options = options.dup
27
27
  @environment = read_environment_files(options[:env])
28
28
  @output_mutex = Mutex.new
29
29
  end
@@ -99,6 +99,7 @@ private ######################################################################
99
99
  (rs || []).each do |r|
100
100
  data = r.gets
101
101
  next unless data
102
+ data.force_encoding("BINARY") if data.respond_to?(:force_encoding)
102
103
  ps, message = data.split(",", 2)
103
104
  color = colors[ps.split(".").first]
104
105
  info message, ps, color
@@ -1,5 +1,5 @@
1
1
  module Foreman
2
2
 
3
- VERSION = "0.37.2"
3
+ VERSION = "0.38.0"
4
4
 
5
5
  end
@@ -3,6 +3,8 @@ require "foreman/cli"
3
3
 
4
4
  describe "Foreman::CLI", :fakefs do
5
5
  subject { Foreman::CLI.new }
6
+ let(:engine) { subject.send(:engine) }
7
+ let(:entries) { engine.procfile.entries.inject({}) { |h,e| h.update(e.name => e) } }
6
8
 
7
9
  describe "start" do
8
10
  describe "with a non-existent Procfile" do
@@ -22,6 +24,15 @@ describe "Foreman::CLI", :fakefs do
22
24
  mock.instance_of(Foreman::Engine).start
23
25
  subject.start
24
26
  end
27
+
28
+ it "can run a single process" do
29
+ dont_allow(subject).error
30
+ stub(engine).watch_for_output
31
+ stub(engine).watch_for_termination
32
+ mock(entries["alpha"]).spawn(1, is_a(IO), engine.directory, {}, 5000) { [] }
33
+ mock(entries["bravo"]).spawn(0, is_a(IO), engine.directory, {}, 5100) { [] }
34
+ subject.start("alpha")
35
+ end
25
36
  end
26
37
  end
27
38
 
@@ -4,6 +4,13 @@ require "foreman/engine"
4
4
  describe "Foreman::Engine", :fakefs do
5
5
  subject { Foreman::Engine.new("Procfile", {}) }
6
6
 
7
+ before do
8
+ any_instance_of(Foreman::Engine) do |engine|
9
+ stub(engine).proctitle
10
+ stub(engine).termtitle
11
+ end
12
+ end
13
+
7
14
  describe "initialize" do
8
15
  describe "without an existing Procfile" do
9
16
  it "raises an error" do
@@ -95,7 +102,7 @@ describe "Foreman::Engine", :fakefs do
95
102
  stub(subject).watch_for_output
96
103
  stub(subject).watch_for_termination
97
104
  subject.start
98
- sleep 1
105
+ Process.waitall
99
106
  mock(subject).info(/started with pid \d+/, "utf8.1", anything)
100
107
  mock(subject).info("\xff\x03\n", "utf8.1", anything)
101
108
  subject.send(:poll_readers)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.37.2
4
+ version: 0.38.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-30 00:00:00.000000000Z
12
+ date: 2012-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: term-ansicolor
16
- requirement: &70287283568800 !ruby/object:Gem::Requirement
16
+ requirement: &70157364076040 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.0.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70287283568800
24
+ version_requirements: *70157364076040
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: thor
27
- requirement: &70287283568240 !ruby/object:Gem::Requirement
27
+ requirement: &70157364075220 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: 0.13.6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70287283568240
35
+ version_requirements: *70157364075220
36
36
  description: Process manager for applications with multiple components
37
37
  email: ddollar@gmail.com
38
38
  executables:
@@ -114,15 +114,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
114
114
  - - ! '>='
115
115
  - !ruby/object:Gem::Version
116
116
  version: '0'
117
+ segments:
118
+ - 0
119
+ hash: -2171581925377059315
117
120
  required_rubygems_version: !ruby/object:Gem::Requirement
118
121
  none: false
119
122
  requirements:
120
123
  - - ! '>='
121
124
  - !ruby/object:Gem::Version
122
125
  version: '0'
126
+ segments:
127
+ - 0
128
+ hash: -2171581925377059315
123
129
  requirements: []
124
130
  rubyforge_project:
125
- rubygems_version: 1.8.10
131
+ rubygems_version: 1.8.11
126
132
  signing_key:
127
133
  specification_version: 3
128
134
  summary: Process manager for applications with multiple components