bowler 1.1.0 → 1.2.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: 7f3029134b99712158fefc7f67192400f1ce3a66
4
- data.tar.gz: 0cb0f7b2a4b43674be3eeb773f662f4a4db0bf2b
3
+ metadata.gz: 34dce92fc34665431104d25780c2ee924d7798bf
4
+ data.tar.gz: 30fb9e9a5d122d746f1aec3dec9d5f96f5dce6c6
5
5
  SHA512:
6
- metadata.gz: ae91243c358bbd57f95730e4f2dad029ad8ed51927b0221f31a3c40ed391eb26140d78665083452a51009018710acaf7e8a85fcf22493cd65f9b321ad9f2db2a
7
- data.tar.gz: 603644789457344e7b59a96ad9ead3aa20c9458a6e777148f2441258710a24a8f875616147dad4895a1723ed795289ff6b61443d49a4ee70660136afb95b4b92
6
+ metadata.gz: f50128ef53e016098215488f39bec12caa1fadf6c6d8ef9dbb9038de687ffdca1b5f604ca2214294fa1ec85341ca9d154f0d1a159550a8da96af24a00e386bea
7
+ data.tar.gz: d2d92d904c36456adaf7889acf16d17abe72aeb2a84f68861c0d2c000cedbe8fc849daf8b04356ae3eb0aab9b410dd4a13f83d41804b24556921990c21a47cbd
data/lib/bowler.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  require 'ostruct'
2
+ require 'bowler/version'
2
3
 
3
4
  module Bowler
4
5
 
6
+ autoload :CLI, 'bowler/cli'
5
7
  autoload :DependencyTree, 'bowler/dependency_tree'
6
8
  autoload :DSL, 'bowler/dsl'
7
9
 
8
10
  class PinfileNotFound < Exception; end
9
11
  class PinfileError < Exception; end
10
12
 
11
- end
13
+ end
data/lib/bowler/cli.rb CHANGED
@@ -1,17 +1,38 @@
1
1
  require 'logger'
2
+ require 'optparse'
2
3
 
3
4
  module Bowler
4
5
  class CLI
5
6
 
6
- def self.start(processes)
7
- tree = Bowler::DependencyTree.load
8
- process_list = processes.map(&:to_sym)
7
+ def self.start(args)
8
+ options = {
9
+ without: []
10
+ }
11
+ OptionParser.new {|opts|
12
+ opts.banner = "Usage: bowl [options] <process>..."
13
+
14
+ opts.on('-w', '--without <process>', 'Exclude a process from being launched') do |process|
15
+ options[:without] << process.to_sym
16
+ end
17
+
18
+ opts.on_tail("-h", "--help", "Show this message") do
19
+ puts opts
20
+ exit
21
+ end
9
22
 
10
- launch_string = tree.process_list_for(process_list)
23
+ opts.on_tail('-v', '--version', 'Show the gem version') do
24
+ puts "Bowler #{Bowler::VERSION}"
25
+ exit
26
+ end
27
+ }.parse!(args)
11
28
 
12
- logger.info "Starting #{tree.dependencies_for(process_list).join(', ')}.."
29
+ processes = args.map(&:to_sym)
30
+
31
+ tree = Bowler::DependencyTree.load
32
+ to_launch = tree.dependencies_for(processes) - options[:without]
33
+ logger.info "Starting #{to_launch.join(', ')}.."
13
34
 
14
- start_foreman_with launch_string
35
+ start_foreman_with( launch_string(to_launch) )
15
36
  rescue PinfileNotFound
16
37
  logger.error "Bowler could not find a Pinfile in the current directory."
17
38
  rescue PinfileError => e
@@ -19,14 +40,24 @@ module Bowler
19
40
  end
20
41
 
21
42
  def self.logger
22
- @logger ||= Logger.new(STDOUT)
43
+ @@logger ||= Logger.new(STDOUT)
44
+ end
45
+
46
+ def self.logger=(logger)
47
+ @@logger = logger
23
48
  end
24
49
 
25
50
  def self.build_command(launch_string)
26
51
  "#{self.foreman_exec} start -c #{launch_string}"
27
52
  end
28
53
 
29
- private
54
+ private
55
+ def self.launch_string(processes)
56
+ processes.map {|process|
57
+ "#{process}=1"
58
+ }.sort.join(',')
59
+ end
60
+
30
61
  def self.start_foreman_with(launch_string)
31
62
  exec ( self.build_command launch_string )
32
63
  end
@@ -20,9 +20,5 @@ module Bowler
20
20
  }.flatten.compact.uniq
21
21
  end
22
22
 
23
- def process_list_for(processes)
24
- dependencies_for(processes).map {|x| "#{x}=1" }.sort.join(',')
25
- end
26
-
27
23
  end
28
24
  end
@@ -1,3 +1,3 @@
1
1
  module Bowler
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
data/spec/cli_spec.rb CHANGED
@@ -5,6 +5,8 @@ module Bowler
5
5
 
6
6
  describe CLI do
7
7
 
8
+ include CLIHelper
9
+
8
10
  context "build_command" do
9
11
  it "should build a command from the launch string and the executable" do
10
12
  CLI.expects(:foreman_exec).returns("fort")
@@ -33,6 +35,39 @@ module Bowler
33
35
  end
34
36
  end
35
37
 
38
+ context 'excluding an app' do
39
+ it 'removes a given app from the list of apps passed to Foreman' do
40
+ stub_dependency_tree(:myapp, :myapp2)
41
+
42
+ CLI.expects(:start_foreman_with).with('myapp2=1')
43
+
44
+ CLI.start(['myapp', 'myapp2', '--without', 'myapp'])
45
+ end
46
+
47
+ it 'excludes more than one app from the list of apps passed to Foreman' do
48
+ stub_dependency_tree(:myapp, :myapp2, :myapp3)
49
+
50
+ CLI.expects(:start_foreman_with).with('myapp3=1')
51
+
52
+ CLI.start(['myapp', 'myapp2', 'myapp3', '--without', 'myapp', '--without', 'myapp2'])
53
+ end
54
+
55
+ it 'supports the short-hand argument form Foreman' do
56
+ stub_dependency_tree(:myapp, :myapp2)
57
+
58
+ CLI.expects(:start_foreman_with).with('myapp2=1')
59
+
60
+ CLI.start(['myapp', 'myapp2', '-w', 'myapp'])
61
+ end
62
+ end
63
+
64
+ it 'starts foreman with the provided processes' do
65
+ stub_dependency_tree(:a, :b)
66
+
67
+ CLI.expects(:start_foreman_with).with('a=1,b=1')
68
+
69
+ CLI.start(['a', 'b'])
70
+ end
36
71
  end
37
72
 
38
73
  end
@@ -37,10 +37,6 @@ module Bowler
37
37
  it "should find the correct dependencies" do
38
38
  @tree.dependencies_for([:app1]).should =~ [:app2, :app3, :app1]
39
39
  end
40
-
41
- it "should give a correct process list" do
42
- @tree.process_list_for([:app2]).should == "app2=1,app3=1"
43
- end
44
40
  end
45
41
 
46
42
  context "given an array of multiple processes" do
@@ -51,10 +47,6 @@ module Bowler
51
47
  it "should find the correct dependencies" do
52
48
  @tree.dependencies_for([:app1, :other]).should =~ [:app2, :app3, :app1, :a, :b, :c, :other]
53
49
  end
54
-
55
- it "should give a correct process list" do
56
- @tree.process_list_for([:app2, :other]).should == "a=1,app2=1,app3=1,b=1,c=1,other=1"
57
- end
58
50
  end
59
51
 
60
52
  end
@@ -0,0 +1,14 @@
1
+ module Bowler
2
+ module CLIHelper
3
+
4
+ # stubs the behaviour of a tree with no dependencies, but stubs out all
5
+ # the dependency-lookup behaviour and Pinfile parsing
6
+ def stub_dependency_tree(*processes)
7
+ mock_tree = mock('Bowler::DependencyTree')
8
+ Bowler::DependencyTree.expects(:load).returns(mock_tree)
9
+
10
+ mock_tree.expects(:dependencies_for).with(processes).returns(processes)
11
+ end
12
+
13
+ end
14
+ end
data/spec/spec_helper.rb CHANGED
@@ -5,6 +5,9 @@ require 'rspec/core'
5
5
  require 'bowler'
6
6
 
7
7
  require_relative 'helpers/definition_helper'
8
+ require_relative 'helpers/cli_helper'
9
+
10
+ Bowler::CLI.logger = Logger.new('/dev/null')
8
11
 
9
12
  RSpec.configure do |config|
10
13
  config.mock_framework = :mocha
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bowler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordan Hatch
@@ -102,6 +102,7 @@ files:
102
102
  - spec/fixtures/dependency_tree_pinfile
103
103
  - spec/fixtures/dsl_invalid_pinfile
104
104
  - spec/fixtures/dsl_valid_pinfile
105
+ - spec/helpers/cli_helper.rb
105
106
  - spec/helpers/definition_helper.rb
106
107
  - spec/spec_helper.rb
107
108
  homepage:
@@ -134,5 +135,6 @@ test_files:
134
135
  - spec/fixtures/dependency_tree_pinfile
135
136
  - spec/fixtures/dsl_invalid_pinfile
136
137
  - spec/fixtures/dsl_valid_pinfile
138
+ - spec/helpers/cli_helper.rb
137
139
  - spec/helpers/definition_helper.rb
138
140
  - spec/spec_helper.rb