reservoir 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,9 +1,9 @@
1
- version: 0.0.3
2
- remotes:
3
- - user: deployer
4
- server: a4word.com
5
- - user:
6
- server:
1
+ version: 0.0.4
2
+ # remotes:
3
+ # - user: deployer
4
+ # server: a4word.com
5
+ # - user:
6
+ # server:
7
7
  scripts:
8
8
  - name: ruby
9
9
  - name: rvm
@@ -2,42 +2,52 @@ module Reservoir
2
2
 
3
3
  class Application
4
4
 
5
+ attr_accessor :print_mode
6
+
7
+ def initialize(data = {})
8
+ @print_mode = data[:print_mode] || :stdio
9
+ end
10
+
11
+ def print_mode=(val)
12
+ @print_mode = val || :stdio
13
+ end
14
+
5
15
  def welcome_message
6
- "reservoir, version #{Reservoir::VERSION}\n"
16
+ print "reservoir, version #{Reservoir::VERSION}\n"
7
17
  end
8
18
 
9
19
  def usage_message
10
- "USAGE: reservoir <project_file1> <project_file2> ...\n or reservoir help to see this message\n"
20
+ print "USAGE: reservoir <project_file1> <project_file2> ...\n or reservoir help to see this message\n"
11
21
  end
12
22
 
13
23
  def exception_message(error)
14
- "ERROR: #{error.message}\n\n #{error.backtrace.join('\n ')}"
24
+ print "ERROR: #{error.message}\n\n #{error.backtrace.join('\n ')}"
15
25
  end
16
26
 
17
27
  def project_message(project)
18
- "\n===\nLoading Project: #{project.name} [#{project.file}]\n===\n"
28
+ print "\n===\nLoading Project: #{project.name} [#{project.file}]\n===\n"
19
29
  end
20
30
 
21
- def which_script_message(which_script)
22
- which_script.to_s
31
+ def which_version_message(script,version,path)
32
+ print "#{script} : #{version} : #{path}\n"
23
33
  end
24
-
34
+
25
35
 
26
36
  def run(args)
27
37
 
28
38
  if args.nil? || args.empty?
29
- Application.print usage_message
39
+ usage_message
30
40
  return
31
41
  end
32
42
 
33
- Application.print welcome_message
43
+ welcome_message
34
44
 
35
45
  if ["--version","-version","-v","--v","version"].include?(args[0])
36
46
  return
37
47
  end
38
48
 
39
49
  if ["--help","-help","-h","--h","help"].include?(args[0])
40
- Application.print usage_message
50
+ usage_message
41
51
  return
42
52
  end
43
53
 
@@ -45,35 +55,28 @@ module Reservoir
45
55
  args.each do |filename|
46
56
  all_projects = Project.load_from_file(filename)
47
57
  all_projects.each do |p|
48
- Application.print project_message(p)
49
- which_script = p.which_script_template
58
+ print_mode = p.output
59
+ project_message(p)
50
60
  p.scripts.each do |script|
61
+ which_script = p.template(WhichScript)
62
+ version = p.template(Version)
51
63
  which_script.go(script)
52
- Application.print which_script_message(which_script)
64
+ version.go(script)
65
+ which_version_message(script,version.version,which_script.response)
53
66
  end
54
67
  end
55
68
  end
56
69
  rescue
57
- Application.print exception_message($!)
70
+ exception_message($!)
58
71
  end
59
- Application.print ""
60
- end
61
-
62
- # Provide the ability to direct the stdio with a print_mode switch
63
- @@print_mode = :stdio
64
- def self.print_mode=(val)
65
- @@print_mode = val
66
- end
67
- def self.print_mode
68
- @@print_mode
69
- end
70
- def self.reset_print_mode
71
- @@print_mode = :stdio
72
+ print ""
72
73
  end
73
74
 
74
- def self.print(output)
75
- if @@print_mode == :stdio
75
+ def print(output)
76
+ if @print_mode == :stdio
76
77
  STDOUT.puts output
78
+ elsif @print_mode.kind_of?(Hash) && !@print_mode[:file].nil?
79
+ open(@print_mode[:file], 'a') { |f| f.puts(output) }
77
80
  else
78
81
  output
79
82
  end
@@ -18,7 +18,7 @@ module Reservoir
18
18
  def go(command = nil)
19
19
  begin
20
20
  @command = command unless command.nil?
21
- @response = `#{full_command}`
21
+ @response = Caller.exec(full_command).strip
22
22
  @success = true
23
23
  rescue
24
24
  @response = "#{$!}"
@@ -44,6 +44,11 @@ module Reservoir
44
44
  "#{ssh} '#{@command}'"
45
45
  end
46
46
 
47
+ def self.exec(full_command)
48
+ `#{full_command}`
49
+ end
50
+
51
+
47
52
  end
48
53
 
49
54
  end
@@ -2,18 +2,19 @@ module Reservoir
2
2
 
3
3
  class Project
4
4
 
5
- attr_accessor :scripts, :file, :remote_user, :remote_server
5
+ attr_accessor :scripts, :file, :remote_user, :remote_server, :output
6
6
 
7
7
  def initialize(data = {})
8
8
  @file = data[:file]
9
9
  @remote_user = data[:remote_user]
10
10
  @remote_server = data[:remote_server]
11
11
  @scripts = data[:scripts] || []
12
+ @output = data[:output]
12
13
  end
13
14
 
14
15
  def self.load_from_file(file)
15
16
  options = YAML::load( File.open( file ) )
16
- default_args = { file: file, scripts: options["scripts"].each.collect { |script| script["name"] } }
17
+ default_args = { file: file, scripts: options["scripts"].each.collect { |script| script["name"] }, output: options["output"] }
17
18
 
18
19
  all_projects = []
19
20
  all_servers = options["remotes"]
@@ -21,14 +22,14 @@ module Reservoir
21
22
  all_projects << Project.new(default_args)
22
23
  else
23
24
  all_servers.each do |remote|
24
- all_projects << Project.new(default_args.merge( remote_user: remote["user"], remote_server: remote["server"]))
25
+ all_projects << Project.new(default_args.merge( remote_user: remote["user"], remote_server: remote["server"], output: resolve_placeholders(default_args[:output],remote)))
25
26
  end
26
27
  end
27
28
  all_projects
28
29
  end
29
30
 
30
- def which_script_template
31
- WhichScript.new(remote_user: @remote_user, remote_server: @remote_server)
31
+ def template(clazz)
32
+ clazz.new(remote_user: @remote_user, remote_server: @remote_server)
32
33
  end
33
34
 
34
35
  def name
@@ -37,6 +38,14 @@ module Reservoir
37
38
  "#{@remote_user}@#{@remote_server}"
38
39
  end
39
40
 
41
+ private
42
+
43
+ def self.resolve_placeholders(var,remote)
44
+ return var if var.nil?
45
+ var = var.gsub("@@SERVER_NAME@@",remote["server"])
46
+ var
47
+ end
48
+
40
49
  end
41
50
 
42
51
  end
@@ -1,34 +1,91 @@
1
1
  module Reservoir
2
2
 
3
- VERSION = "0.0.3"
3
+ VERSION = "0.0.4"
4
4
 
5
5
  class Version
6
6
 
7
7
  attr_accessor :version_info, :version, :version_parts
8
+
9
+ def initialize(data = {})
10
+ @caller = Caller.new(:remote_server => data[:remote_server], :remote_user => data[:remote_user])
11
+ @success = false
12
+ end
13
+
14
+ def remote_user
15
+ @caller.remote_user
16
+ end
17
+
18
+ def remote_server
19
+ @caller.remote_server
20
+ end
21
+
22
+
23
+ def possible_commands(script_name)
24
+ return [] if script_name.nil? || script_name == ""
25
+ known_arguments = Version.arguments[script_name]
26
+ return ["#{script_name} #{known_arguments}"] unless known_arguments.nil?
27
+ ["--version","-version"].collect { |args| "#{script_name} #{args}"}
28
+ end
29
+
30
+ def go(script_name)
31
+ @success = false
32
+ possible_commands(script_name).each do |command|
33
+ if @caller.go(command) && read(@caller.response)
34
+ break
35
+ end
36
+ end
37
+ @success
38
+ end
39
+
40
+ def success?
41
+ @success
42
+ end
8
43
 
9
44
  def read(version_info)
10
45
  @version_info = version_info
46
+ @version_parts = nil
47
+ @version = nil
48
+ @success = false
11
49
 
12
50
  major_minor_revision_match = /(\d*)\.(\d*)\.(\d*)/
13
51
  mmr_patchlevel_match = /(\d*)\.(\d*)\.(\d*).*(patchlevel)\s*(\d*)/
52
+ rvm_match = /rvm\s*(\d*)\.(\d*)\.(\d*)/
14
53
 
15
54
 
16
55
  m = version_info.match(mmr_patchlevel_match)
17
56
  unless m.nil?
18
57
  @version_parts = [ m[1], m[2], m[3], m[5] ]
19
58
  @version = @version_parts[0..2].join(".") + "-p" + m[5]
20
- return
59
+ @success = true
60
+ return @success
21
61
  end
22
62
 
23
- m = version_info.match(major_minor_revision_match)
24
- unless m.nil?
25
- @version_parts = [ m[1], m[2], m[3] ]
26
- @version = @version_parts.join(".")
27
- return
63
+ if major_minor_revision(rvm_match)
64
+ return @success
65
+ end
66
+
67
+ if major_minor_revision(major_minor_revision_match)
68
+ return @success
28
69
  end
29
70
 
71
+ @version_info = nil
72
+ @success
30
73
  end
31
74
 
75
+ private
76
+
77
+ def major_minor_revision(matcher)
78
+ m = @version_info.match(matcher)
79
+ if m.nil?
80
+ false
81
+ else
82
+ @version_parts = [ m[1], m[2], m[3] ]
83
+ @version = @version_parts.join(".")
84
+ @success = true
85
+ @success
86
+ end
87
+ end
88
+
32
89
  end
33
90
 
34
91
  end
@@ -0,0 +1,13 @@
1
+ module Reservoir
2
+
3
+ class Version
4
+
5
+ def self.arguments
6
+ {
7
+ "ruby" => "--version",
8
+ }
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -17,11 +17,6 @@ module Reservoir
17
17
  @caller.remote_server
18
18
  end
19
19
 
20
- def to_s
21
- return "WhichScript called before any #go(script) was performed" if @script.nil?
22
- "#{@script} : #{@response}"
23
- end
24
-
25
20
  def go(app_name)
26
21
  @script = app_name
27
22
  @path = @caller.go_with_response("which #{app_name}")
data/lib/reservoir.rb CHANGED
@@ -1,6 +1,8 @@
1
1
  require 'yaml'
2
2
 
3
+
3
4
  require "reservoir/version"
5
+ require "reservoir/version_arguments"
4
6
  require 'reservoir/caller'
5
7
  require 'reservoir/which_script'
6
8
  require 'reservoir/project'
@@ -8,7 +8,25 @@ module Reservoir
8
8
  @project_file = File.dirname(__FILE__) + '/sample_project.yml'
9
9
  @project_file2 = File.dirname(__FILE__) + '/sample_project2.yml'
10
10
  @application = Application.new
11
- Application.print_mode = :string
11
+ @application.print_mode = :string
12
+
13
+ Caller.stub!(:exec).with("which ruby").and_return("/path/to/ruby")
14
+ Caller.stub!(:exec).with("which rvm").and_return("/path/to/rvm")
15
+ Caller.stub!(:exec).with("which node").and_return("/path/to/node")
16
+ Caller.stub!(:exec).with("ssh aforward@a4word.com 'which ruby'").and_return("/path/to/a4word/ruby")
17
+
18
+ Caller.stub!(:exec).with("ruby --version").and_return("v1.2.3")
19
+ Caller.stub!(:exec).with("rvm --version").and_return("1.2.4")
20
+ Caller.stub!(:exec).with("node --version").and_return("")
21
+ Caller.stub!(:exec).with("node -version").and_return("")
22
+ Caller.stub!(:exec).with("ssh aforward@a4word.com 'ruby --version'").and_return("1.2.6")
23
+
24
+ File.delete("output.txt") if File.exist?("output.txt")
25
+ File.delete("a4word.com.reservoir") if File.exist?("a4word.com.reservoir")
26
+ end
27
+
28
+ after(:all) do
29
+ File.delete("output.txt") if File.exist?("output.txt")
12
30
  end
13
31
 
14
32
  describe "#run" do
@@ -66,20 +84,20 @@ module Reservoir
66
84
  it "should handle one file" do
67
85
  @application.should_receive(:welcome_message)
68
86
  @application.should_receive(:project_message)
69
- @application.should_receive(:which_script_message).exactly(3).times
87
+ @application.should_receive(:which_version_message).with("ruby","1.2.3","/path/to/ruby")
88
+ @application.should_receive(:which_version_message).with("rvm","1.2.4","/path/to/rvm")
89
+ @application.should_receive(:which_version_message).with("node",nil,"/path/to/node")
70
90
  @application.should_not_receive(:exception_message)
71
91
  @application.run([@project_file])
72
92
  end
73
93
 
74
94
  it "should handle multiple file" do
75
- @mock = Caller.new
76
- @mock.stub!(:go).and_return(true)
77
- Caller.stub!(:new).and_return(@mock)
78
95
  @application.should_receive(:welcome_message)
79
96
  @application.should_receive(:project_message).exactly(2).times
80
- @application.should_receive(:which_script_message).exactly(4).times
97
+ @application.should_receive(:which_version_message).exactly(4).times
81
98
  @application.should_not_receive(:exception_message)
82
99
  @application.run([@project_file,@project_file2])
100
+ File.exists?("a4word.com.reservoir")
83
101
  end
84
102
 
85
103
  end
@@ -89,14 +107,21 @@ module Reservoir
89
107
  describe "#print_mode" do
90
108
 
91
109
  it "should be settable" do
92
- Application.print_mode = :a
93
- Application.print_mode.should == :a
110
+ @application.print_mode = :a
111
+ @application.print_mode.should == :a
112
+ end
113
+
114
+ it "should default to stdio" do
115
+ @application.print_mode = nil
116
+ @application.print_mode.should == :stdio
94
117
  end
95
118
 
96
- it "should be resetable" do
97
- Application.print_mode = :a
98
- Application.reset_print_mode
99
- Application.print_mode.should == :stdio
119
+ it "should default to :stdio" do
120
+ Application.new.print_mode.should == :stdio
121
+ end
122
+
123
+ it "should be settable in constructor" do
124
+ Application.new(print_mode: :blah).print_mode.should == :blah
100
125
  end
101
126
 
102
127
  end
@@ -104,7 +129,7 @@ module Reservoir
104
129
  describe "#messages" do
105
130
 
106
131
  it "should welcome_message" do
107
- @application.welcome_message.should == "reservoir, version 0.0.3\n"
132
+ @application.welcome_message.should == "reservoir, version 0.0.4\n"
108
133
  end
109
134
 
110
135
  it "should usage_message" do
@@ -124,20 +149,31 @@ module Reservoir
124
149
  end
125
150
  end
126
151
 
152
+ it "should which_version_message" do
153
+ @application.which_version_message("a","1.2.3","/path/to/a").should == "a : 1.2.3 : /path/to/a\n"
154
+ end
155
+
127
156
 
128
157
  end
129
158
 
130
159
  describe "#print" do
131
160
 
132
161
  it "should return a string if print_mode :string" do
133
- Application.print_mode = :string
134
- Application.print("x").should == "x"
162
+ @application.print_mode = :string
163
+ @application.print("x").should == "x"
135
164
  end
136
165
 
137
166
  it "should write to output if print_mode :stdio" do
138
167
  STDOUT.should_receive(:puts).with("x")
139
- Application.print_mode = :stdio
140
- Application.print("x")
168
+ @application.print_mode = :stdio
169
+ @application.print("x")
170
+ end
171
+
172
+ it "should write to file" do
173
+ @application.print_mode = { file: "output.txt" }
174
+ @application.print("x")
175
+ @application.print("y")
176
+ IO.read("output.txt").should == "x\ny\n"
141
177
  end
142
178
 
143
179
  end
data/spec/caller_spec.rb CHANGED
@@ -51,6 +51,12 @@ module Reservoir
51
51
  @caller.response.should == "No such file or directory - garbligook"
52
52
  end
53
53
 
54
+ it "should strip whitespace" do
55
+ Caller.stub!(:exec).with("garble").and_return("blah\n")
56
+ @caller.command = "garble"
57
+ @caller.go_with_response.should == "blah"
58
+ end
59
+
54
60
  end
55
61
 
56
62
 
data/spec/project_spec.rb CHANGED
@@ -30,30 +30,37 @@ module Reservoir
30
30
  all.size.should == 1
31
31
  project = all.first
32
32
  project.scripts.should == [ "ruby", "rvm", "node"]
33
+ project.output.should == :string
33
34
  end
34
35
 
35
36
  end
36
37
 
37
- describe "#which_script_template" do
38
+ describe "#template" do
38
39
 
39
- it "should set the remote_user and remote_server" do
40
- all = Project.load_from_file(File.dirname(__FILE__) + '/sample_project2.yml')
41
- all.size.should == 1
42
- project = all.first
40
+ [WhichScript,Version].each do |clazz|
43
41
 
44
- which_script = project.which_script_template
45
- which_script.remote_user.should == 'aforward'
46
- which_script.remote_server.should == 'a4word.com'
47
- end
42
+ it "should set the remote_user and remote_server for #{clazz}" do
43
+ all = Project.load_from_file(File.dirname(__FILE__) + '/sample_project2.yml')
44
+ all.size.should == 1
45
+ project = all.first
48
46
 
49
- it "should ignore remote data if not set" do
50
- all = Project.load_from_file(File.dirname(__FILE__) + '/sample_project.yml')
51
- all.size.should == 1
52
- project = all.first
47
+ t = project.template(clazz)
48
+ t.remote_user.should == 'aforward'
49
+ t.remote_server.should == 'a4word.com'
50
+ project.output.should == "a4word.com.reservoir"
51
+ end
52
+
53
+ it "should ignore remote data if not set" do
54
+ all = Project.load_from_file(File.dirname(__FILE__) + '/sample_project.yml')
55
+ all.size.should == 1
56
+ project = all.first
53
57
 
54
- which_script = project.which_script_template
55
- which_script.remote_user.should == nil
56
- which_script.remote_server.should == nil
58
+ t = project.template(clazz)
59
+ t.remote_user.should == nil
60
+ t.remote_server.should == nil
61
+ end
62
+
63
+
57
64
  end
58
65
 
59
66
 
@@ -1,4 +1,5 @@
1
- version: 0.0.3
1
+ version: 0.0.4
2
+ output: :string
2
3
  scripts:
3
4
  - name: ruby
4
5
  - name: rvm
@@ -1,4 +1,5 @@
1
- version: 0.0.3
1
+ version: 0.0.4
2
+ output: @@SERVER_NAME@@.reservoir
2
3
  remotes:
3
4
  - user: aforward
4
5
  server: a4word.com
data/spec/version_spec.rb CHANGED
@@ -5,46 +5,120 @@ module Reservoir
5
5
  describe Version do
6
6
 
7
7
  before (:each) do
8
- @analyzer = Version.new
8
+ @version = Version.new
9
9
  end
10
10
 
11
- describe "#analyze" do
11
+ describe "#go" do
12
12
 
13
- it "should store version_info" do
14
- @analyzer.read("blah")
15
- @analyzer.version_info.should == "blah"
13
+ it "should use arguments if set" do
14
+ Version.stub!(:arguments).and_return({ "garble" => "-vgarble" })
15
+ Caller.stub!(:exec).with("garble -vgarble").and_return("garble v1.2.3")
16
+ @version.go("garble").should == true
17
+ @version.success?.should == true
18
+ @version.version_info.should == "garble v1.2.3"
19
+ @version.version.should == "1.2.3"
20
+ end
21
+
22
+ it "should return false if unable to locate version" do
23
+ Caller.stub!(:exec).with("garble --version").and_return("blah")
24
+ Caller.stub!(:exec).with("garble -version").and_return("")
25
+ @version.go("garble").should == false
26
+ @version.success?.should == false
27
+ @version.version_info.should == nil
28
+ @version.version.should == nil
29
+ end
30
+
31
+ it "should support remote calls" do
32
+ Caller.stub!(:exec).with("ssh a@b 'garble --version'").and_return("v1.2.4")
33
+ version = Version.new(remote_user: "a", remote_server: "b")
34
+ version.go("garble").should == true
35
+ version.version_info.should == "v1.2.4"
36
+ version.version_parts.should == ["1","2","4"]
37
+ version.version.should == "1.2.4"
38
+ end
39
+
40
+ it "should support multiple gos" do
41
+ Caller.stub!(:exec).with("garble --version").and_return("v1.2.4")
42
+ Caller.stub!(:exec).with("marble --version").and_return("")
43
+ Caller.stub!(:exec).with("marble -version").and_return("")
44
+
45
+ @version.go("garble").should == true
46
+ @version.version_info.should == "v1.2.4"
47
+ @version.version_parts.should == ["1","2","4"]
48
+ @version.version.should == "1.2.4"
49
+
50
+ @version.go("marble").should == false
51
+ @version.version_info.should == nil
52
+ @version.version_parts.should == nil
53
+ @version.version.should == nil
54
+ end
55
+
56
+
57
+ end
58
+
59
+ describe "#command" do
60
+
61
+ it "should support nil" do
62
+ @version.possible_commands(nil).should == []
63
+ @version.possible_commands("").should == []
64
+ end
65
+
66
+ it "should use arguments if set" do
67
+ Version.stub!(:arguments).and_return({ "garble" => "-vgarble" })
68
+ @version.possible_commands("garble").should == ["garble -vgarble"]
69
+ end
70
+
71
+ it "should provide possible answers if not in known set" do
72
+ @version.possible_commands("garble").should == ["garble --version","garble -version"]
73
+ end
74
+
75
+ end
76
+
77
+
78
+ describe "#read" do
79
+
80
+ it "should store version_info if found" do
81
+ @version.read("blah").should == false
82
+ @version.version_info.should == nil
83
+ @version.version.should == nil
16
84
  end
17
85
 
18
86
  describe "#version" do
19
87
 
20
88
  it "should understand RVM" do
21
- @analyzer.read("rvm 1.2.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]")
22
- @analyzer.version_parts.should == ["1","2","3"]
23
- @analyzer.version.should == "1.2.3"
89
+ @version.read("rvm 1.2.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]").should == true
90
+ @version.version_parts.should == ["1","2","3"]
91
+ @version.version.should == "1.2.3"
92
+ end
93
+
94
+ it "should understand RVM under a gemset" do
95
+ @version.read("Using /Users/aforward/.rvm/gems/ruby-1.9.2-p180 with gemset reservoirc\nrvm 1.2.3 by Wayne E. Seguin (wayneeseguin@gmail.com) [https://rvm.beginrescueend.com/]").should == true
96
+ @version.version_parts.should == ["1","2","3"]
97
+ @version.version.should == "1.2.3"
24
98
  end
25
99
 
26
100
  it "should understand node.js" do
27
- @analyzer.read("v0.4.8")
28
- @analyzer.version_parts.should == ["0","4","8"]
29
- @analyzer.version.should == "0.4.8"
101
+ @version.read("v0.4.8").should == true
102
+ @version.version_parts.should == ["0","4","8"]
103
+ @version.version.should == "0.4.8"
30
104
  end
31
105
 
32
106
  it "should understand ruby" do
33
- @analyzer.read("ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]")
34
- @analyzer.version_parts.should == ["1","8","7","72"]
35
- @analyzer.version.should == "1.8.7-p72"
107
+ @version.read("ruby 1.8.7 (2008-08-11 patchlevel 72) [x86_64-linux]").should == true
108
+ @version.version_parts.should == ["1","8","7","72"]
109
+ @version.version.should == "1.8.7-p72"
36
110
  end
37
111
 
38
112
  it "should understand nginx" do
39
- @analyzer.read("nginx: nginx version: nginx/1.4.5")
40
- @analyzer.version_parts.should == ["1","4","5"]
41
- @analyzer.version.should == "1.4.5"
113
+ @version.read("nginx: nginx version: nginx/1.4.5").should == true
114
+ @version.version_parts.should == ["1","4","5"]
115
+ @version.version.should == "1.4.5"
42
116
  end
43
117
 
44
118
  it "should understand passenger" do
45
- @analyzer.read("Phusion Passenger version 3.0.7")
46
- @analyzer.version_parts.should == ["3","0","7"]
47
- @analyzer.version.should == "3.0.7"
119
+ @version.read("Phusion Passenger version 3.0.7").should == true
120
+ @version.version_parts.should == ["3","0","7"]
121
+ @version.version.should == "3.0.7"
48
122
  end
49
123
 
50
124
  end
@@ -6,8 +6,6 @@ module Reservoir
6
6
 
7
7
  before (:each) do
8
8
  @which_script = WhichScript.new
9
- @caller = Caller.new
10
- Caller.stub!(:new).and_return(@caller)
11
9
  end
12
10
 
13
11
  describe "#initialize" do
@@ -24,7 +22,7 @@ module Reservoir
24
22
  it "should set the path" do
25
23
  @which_script.go('ruby').should == true
26
24
  @which_script.success?.should == true
27
- @which_script.path.should == `which ruby`
25
+ @which_script.path.should == `which ruby`.strip
28
26
  @which_script.response.should == @which_script.path
29
27
  end
30
28
 
@@ -36,30 +34,22 @@ module Reservoir
36
34
  end
37
35
 
38
36
  it "should analyze on remote server if set in constructor" do
39
- Caller.should_receive(:new).with(remote_server: 'a', remote_user: 'b')
40
- @caller.should_receive(:go_with_response).with("which ruby").and_return("blah")
37
+ Caller.stub!(:exec).with("ssh b@a 'which ruby'").and_return("blah")
41
38
  @which_script = WhichScript.new(remote_server: 'a', remote_user: 'b')
42
39
  @which_script.go('ruby').should == true
43
40
  @which_script.success?.should == true
44
41
  @which_script.path.should == "blah"
45
42
  end
46
-
47
- end
48
-
49
- describe "#to_s" do
50
-
51
- it "should say unknown if not known" do
52
- @which_script.to_s.should == "WhichScript called before any #go(script) was performed"
53
- end
54
-
55
- it "should say where the script went" do
56
- @which_script.script = "a"
57
- @which_script.response = "b"
58
- @which_script.to_s.should == "a : b"
43
+
44
+ it "should strip extra white space" do
45
+ Caller.stub!(:exec).with("which ruby").and_return("blah\n")
46
+ @which_script.go('ruby').should == true
47
+ @which_script.success?.should == true
48
+ @which_script.path.should == "blah"
59
49
  end
60
50
 
61
51
  end
62
-
52
+
63
53
  end
64
54
 
65
55
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reservoir
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
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: 2011-08-30 00:00:00.000000000Z
12
+ date: 2011-09-15 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70341800548200 !ruby/object:Gem::Requirement
16
+ requirement: &70343763104020 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70341800548200
24
+ version_requirements: *70343763104020
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: autotest
27
- requirement: &70341800547780 !ruby/object:Gem::Requirement
27
+ requirement: &70343763103600 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70341800547780
35
+ version_requirements: *70343763103600
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: autotest-fsevent
38
- requirement: &70341800547320 !ruby/object:Gem::Requirement
38
+ requirement: &70343763103140 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70341800547320
46
+ version_requirements: *70343763103140
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rb-fsevent
49
- requirement: &70341800546900 !ruby/object:Gem::Requirement
49
+ requirement: &70343763102720 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,7 +54,7 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70341800546900
57
+ version_requirements: *70343763102720
58
58
  description: Helps manage cloud-based server instances by enumerating, comparing and
59
59
  diff'ing application configurations
60
60
  email:
@@ -76,6 +76,7 @@ files:
76
76
  - lib/reservoir/caller.rb
77
77
  - lib/reservoir/project.rb
78
78
  - lib/reservoir/version.rb
79
+ - lib/reservoir/version_arguments.rb
79
80
  - lib/reservoir/which_script.rb
80
81
  - reservoir.gemspec
81
82
  - spec/application_spec.rb