bowler 1.1.0 → 1.2.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.
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