hobo-inviqa 0.0.6 → 0.0.7.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (60) hide show
  1. checksums.yaml +15 -0
  2. data/.editorconfig +10 -0
  3. data/Gemfile.lock +7 -3
  4. data/Guardfile +2 -2
  5. data/Hobofile +5 -1
  6. data/bin/hobo +12 -18
  7. data/hobo.gemspec +2 -0
  8. data/lib/hobo.rb +8 -1
  9. data/lib/hobo/cli.rb +14 -4
  10. data/lib/hobo/config/file.rb +1 -1
  11. data/lib/hobo/error_handlers/debug.rb +5 -2
  12. data/lib/hobo/error_handlers/exit_code_map.rb +16 -0
  13. data/lib/hobo/error_handlers/friendly.rb +13 -8
  14. data/lib/hobo/errors.rb +11 -1
  15. data/lib/hobo/helper/http_download.rb +41 -0
  16. data/lib/hobo/helper/shell.rb +21 -5
  17. data/lib/hobo/helper/vm_command.rb +127 -17
  18. data/lib/hobo/lib/host_check.rb +20 -6
  19. data/lib/hobo/lib/host_check/deps.rb +22 -4
  20. data/lib/hobo/lib/host_check/git.rb +41 -17
  21. data/lib/hobo/lib/host_check/ruby.rb +30 -20
  22. data/lib/hobo/lib/host_check/vagrant.rb +37 -6
  23. data/lib/hobo/lib/s3sync.rb +23 -40
  24. data/lib/hobo/lib/seed/project.rb +8 -1
  25. data/lib/hobo/lib/seed/seed.rb +15 -3
  26. data/lib/hobo/patches/slop.rb +21 -2
  27. data/lib/hobo/tasks/assets.rb +32 -20
  28. data/lib/hobo/tasks/config.rb +15 -0
  29. data/lib/hobo/tasks/deps.rb +29 -4
  30. data/lib/hobo/tasks/seed.rb +1 -1
  31. data/lib/hobo/tasks/system.rb +15 -0
  32. data/lib/hobo/tasks/system/completions.rb +76 -0
  33. data/lib/hobo/tasks/tools.rb +10 -6
  34. data/lib/hobo/tasks/vm.rb +74 -6
  35. data/lib/hobo/ui.rb +27 -10
  36. data/lib/hobo/util.rb +36 -2
  37. data/lib/hobo/version.rb +2 -2
  38. data/spec/hobo/asset_applicator_spec.rb +2 -2
  39. data/spec/hobo/cli_spec.rb +35 -24
  40. data/spec/hobo/config/file_spec.rb +1 -3
  41. data/spec/hobo/error_handlers/debug_spec.rb +39 -5
  42. data/spec/hobo/error_handlers/friendly_spec.rb +38 -21
  43. data/spec/hobo/help_formatter_spec.rb +3 -3
  44. data/spec/hobo/helpers/file_locator_spec.rb +2 -2
  45. data/spec/hobo/helpers/shell_spec.rb +2 -2
  46. data/spec/hobo/helpers/vm_command_spec.rb +36 -24
  47. data/spec/hobo/lib/s3sync_spec.rb +6 -3
  48. data/spec/hobo/lib/seed/project_spec.rb +2 -3
  49. data/spec/hobo/lib/seed/replacer_spec.rb +1 -2
  50. data/spec/hobo/lib/seed/seed_spec.rb +2 -3
  51. data/spec/hobo/logging_spec.rb +2 -2
  52. data/spec/hobo/metadata_spec.rb +2 -2
  53. data/spec/hobo/null_spec.rb +2 -2
  54. data/spec/hobo/paths_spec.rb +1 -2
  55. data/spec/hobo/ui_spec.rb +104 -20
  56. data/spec/hobo/util_spec.rb +75 -0
  57. data/spec/spec_helper.rb +1 -0
  58. metadata +43 -49
  59. data/lib/hobo/tasks/console.rb +0 -18
  60. data/lib/hobo/tasks/host.rb +0 -17
@@ -1,6 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'hobo/paths'
3
- require 'hobo/config/file'
4
2
 
5
3
  describe Hobo::Config::File do
6
4
  before do
@@ -55,4 +53,4 @@ describe Hobo::Config::File do
55
53
  expect { Hobo::Config::File.load("test.yaml") }.to raise_error(RuntimeError, "Invalid hobo configuration (test.yaml)")
56
54
  end
57
55
  end
58
- end
56
+ end
@@ -1,10 +1,44 @@
1
- require 'hobo/error_handlers/debug'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::ErrorHandlers::Debug do
4
+ before do
5
+ Hobo.ui = double(Hobo::Ui.new).as_null_object
6
+ end
7
+
8
+ def faked_exception(error_template)
9
+ error = nil
10
+ begin
11
+ raise error_template
12
+ rescue Exception => error
13
+ end
14
+
15
+ return error
16
+ end
17
+
4
18
  describe "handle" do
5
- it "should re-raise the error" do
6
- exception = Exception.new
7
- expect { Hobo::ErrorHandlers::Debug.new.handle(exception) }.to raise_error exception
19
+ it "should dump the error" do
20
+ error = nil
21
+ begin
22
+ raise Exception.new('error_message')
23
+ rescue Exception => error
24
+ end
25
+
26
+ Hobo.ui.should_receive(:error).with(/\(Exception\).*error_message.*debug_spec.rb.*/m)
27
+ Hobo::ErrorHandlers::Debug.new.handle(error)
28
+ end
29
+
30
+ it "should return exit code according to exit_code_map" do
31
+ File.write("temp_log", "command output")
32
+ output = Struct.new(:path).new
33
+ output.path = "temp_log"
34
+
35
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Interrupt.new).should eq 1
36
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Hobo::ExternalCommandError.new("command", 128, output)).should eq 3
37
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Hobo::InvalidCommandOrOpt.new("command")).should eq 4
38
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Hobo::MissingArgumentsError.new("command", ["arg1"])).should eq 5
39
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Hobo::UserError.new("user error")).should eq 6
40
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Hobo::ProjectOnlyError.new).should eq 7
41
+ Hobo::ErrorHandlers::Debug.new.handle(faked_exception Exception.new "general").should eq 128
8
42
  end
9
43
  end
10
- end
44
+ end
@@ -1,5 +1,4 @@
1
- require 'hobo/error_handlers/friendly'
2
- require 'hobo/ui'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Hobo::ErrorHandlers::Friendly do
5
4
  before do
@@ -13,9 +12,19 @@ describe Hobo::ErrorHandlers::Friendly do
13
12
  FakeFS.deactivate!
14
13
  end
15
14
 
15
+ def faked_exception(error_template)
16
+ error = nil
17
+ begin
18
+ raise error_template
19
+ rescue Exception => error
20
+ end
21
+
22
+ return error
23
+ end
24
+
16
25
  describe "handle" do
17
26
  it "should display specialized error for Interrupt" do
18
- error = Interrupt.new
27
+ error = faked_exception(Interrupt.new)
19
28
  Hobo.ui.should_receive(:warning).with(/Caught Interrupt/)
20
29
  Hobo::ErrorHandlers::Friendly.new.handle(error)
21
30
  end
@@ -24,7 +33,9 @@ describe Hobo::ErrorHandlers::Friendly do
24
33
  File.write("temp_log", "command output")
25
34
  output = Struct.new(:path).new
26
35
  output.path = "temp_log"
27
- error = Hobo::ExternalCommandError.new("command", 128, output)
36
+
37
+ error = faked_exception Hobo::ExternalCommandError.new("command", 128, output)
38
+
28
39
  Hobo.ui.should_receive(:error).with(/The following external command appears to have failed \(exit status 128\)/)
29
40
  Hobo::ErrorHandlers::Friendly.new.handle(error)
30
41
  end
@@ -33,49 +44,55 @@ describe Hobo::ErrorHandlers::Friendly do
33
44
  File.write("temp_log", "command output")
34
45
  output = Struct.new(:path).new
35
46
  output.path = "temp_log"
36
- error = Hobo::ExternalCommandError.new("command", 128, output)
47
+
48
+ error = faked_exception Hobo::ExternalCommandError.new("command", 128, output)
49
+
37
50
  Hobo::ErrorHandlers::Friendly.new.handle(error)
38
51
  File.read(File.join(Dir.tmpdir, 'hobo_error.log')).should match "command output"
39
52
  end
40
53
 
41
54
  it "should display specialized error for invalid command or opt error" do
42
- error = Hobo::InvalidCommandOrOpt.new("command")
55
+ error = faked_exception Hobo::InvalidCommandOrOpt.new("command")
43
56
  Hobo.ui.should_receive(:error).with(/Invalid command or option specified: 'command'/)
44
57
  Hobo::ErrorHandlers::Friendly.new.handle(error)
45
58
  end
46
59
 
47
60
  it "should display specialized error for missing argument error" do
48
- error = Hobo::MissingArgumentsError.new("command", ["arg1"])
61
+ error = faked_exception Hobo::MissingArgumentsError.new("command", ["arg1"])
49
62
  Hobo.ui.should_receive(:error).with(/Not enough arguments for command/)
50
63
  Hobo::ErrorHandlers::Friendly.new.handle(error)
51
64
  end
52
65
 
53
66
  it "should display specialized error for user error" do
54
- error = Hobo::UserError.new("user error")
67
+ error = faked_exception Hobo::UserError.new("user error")
55
68
  Hobo.ui.should_receive(:error).with(/user error/)
56
69
  Hobo::ErrorHandlers::Friendly.new.handle(error)
57
70
  end
58
71
 
59
72
  it "should display generic error for other exception" do
60
- error = nil
61
- begin
62
- raise Exception.new("general error")
63
- rescue Exception => error
64
- end
65
-
73
+ error = faked_exception Exception.new("general error")
66
74
  Hobo.ui.should_receive(:error).with(/An unexpected error has occured/)
67
75
  Hobo::ErrorHandlers::Friendly.new.handle(error)
68
76
  end
69
77
 
70
78
  it "should write error backtrace to /tmp/hobo_error.log for other exception" do
71
- error = nil
72
- begin
73
- raise Exception.new("general error")
74
- rescue Exception => error
75
- end
76
-
79
+ error = faked_exception Exception.new("general error")
77
80
  Hobo::ErrorHandlers::Friendly.new.handle(error)
78
81
  File.read(File.join(Dir.tmpdir, 'hobo_error.log')).should match /\(Exception\) general error/
79
82
  end
83
+
84
+ it "should return exit code according to exit_code_map" do
85
+ File.write("temp_log", "command output")
86
+ output = Struct.new(:path).new
87
+ output.path = "temp_log"
88
+
89
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Interrupt.new).should eq 1
90
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Hobo::ExternalCommandError.new("command", 128, output)).should eq 3
91
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Hobo::InvalidCommandOrOpt.new("command")).should eq 4
92
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Hobo::MissingArgumentsError.new("command", ["arg1"])).should eq 5
93
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Hobo::UserError.new("user error")).should eq 6
94
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Hobo::ProjectOnlyError.new).should eq 7
95
+ Hobo::ErrorHandlers::Friendly.new.handle(faked_exception Exception.new "general").should eq 128
96
+ end
80
97
  end
81
- end
98
+ end
@@ -1,4 +1,4 @@
1
- require 'hobo/help_formatter'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::HelpFormatter do
4
4
  help = nil
@@ -38,8 +38,8 @@ describe Hobo::HelpFormatter do
38
38
 
39
39
  help = Hobo::HelpFormatter.new slop
40
40
  help.command_map = map
41
- HighLine.use_color = false
42
41
  Hobo.ui = Hobo::Ui.new
42
+ Hobo.ui.use_color false
43
43
  end
44
44
 
45
45
  describe "help" do
@@ -160,4 +160,4 @@ describe Hobo::HelpFormatter do
160
160
  end
161
161
  end
162
162
  end
163
- end
163
+ end
@@ -1,4 +1,4 @@
1
- require 'hobo/helper/file_locator'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::Helper do
4
4
  describe "locate" do
@@ -8,4 +8,4 @@ describe Hobo::Helper do
8
8
  it "should chdir to file path before yielding"
9
9
  it "should yield once for each matching file"
10
10
  end
11
- end
11
+ end
@@ -1,4 +1,4 @@
1
- require 'hobo/helper/shell'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::Helper do
4
4
  describe "bundle_shell" do
@@ -18,4 +18,4 @@ describe Hobo::Helper do
18
18
  it "should colour stderr output with red"
19
19
  it "should set ENV args for command if specified with :env"
20
20
  end
21
- end
21
+ end
@@ -1,9 +1,4 @@
1
- require 'hobo/config'
2
- require 'hobo/logging'
3
- require 'hobo/ui'
4
- require 'hobo/patches/deepstruct'
5
- require 'hobo/helper/vm_command'
6
-
1
+ require 'spec_helper'
7
2
 
8
3
  describe Hobo::Helper do
9
4
  before do
@@ -12,29 +7,46 @@ describe Hobo::Helper do
12
7
  :mysql => {
13
8
  :username => "test_user",
14
9
  :password => "test_pass"
10
+ },
11
+ :vm => {
12
+ :project_mount_path => '/'
15
13
  }
16
14
  })
15
+
16
+ Hobo.ui = Hobo::Ui.new
17
+
18
+ vmi_double = double(Hobo::Helper::VmInspector).as_null_object
19
+ vmi_double.should_receive(:ssh_config).and_return({
20
+ :ssh_host => 'fakehost',
21
+ :ssh_user => 'fakeuser',
22
+ :ssh_port => '999',
23
+ :ssh_identity => 'fakeidentity'
24
+ })
25
+
26
+ Hobo::Helper::VmCommand.class_eval do
27
+ class_variable_set '@@vm_inspector', vmi_double
28
+ end
17
29
  end
18
30
 
19
31
  describe "vm_command" do
20
32
  it "should create a new vm command wrapper with specified command" do
21
- vm_command("my_command").to_s.should match /-- my_command/
33
+ vm_command("my_command", :pwd => '/').to_s.should match /-c my_command/
22
34
  end
23
35
 
24
- it "should default to using a psuedo tty" do
25
- vm_command("my_command").to_s.should match /\s-t\s/
36
+ it "should default to not using a psuedo tty" do
37
+ vm_command("my_command", :pwd => '/').to_s.should_not match /\s-t\s/
26
38
  end
27
39
 
28
- it "should default to vagrant user" do
29
- vm_command("my_command").to_s.should match /vagrant@/
40
+ it "should default to ssh_config user" do
41
+ vm_command("my_command", :pwd => '/').to_s.should match /fakeuser@/
30
42
  end
31
43
 
32
- it "should default to project host name" do
33
- vm_command("my_command").to_s.should match /@test_hostname/
44
+ it "should default to ssh_config host name" do
45
+ vm_command("my_command", :pwd => '/').to_s.should match /@fakehost/
34
46
  end
35
47
 
36
48
  it "should not wrap piped commands with echo by default" do
37
- c = vm_command("my_command")
49
+ c = vm_command("my_command", :pwd => '/')
38
50
  c << "test"
39
51
  c.to_s.should_not match /^echo test/
40
52
  end
@@ -42,24 +54,24 @@ describe Hobo::Helper do
42
54
 
43
55
  describe "vm_mysql" do
44
56
  it "should use mysql command by default" do
45
- vm_mysql.to_s.should match /-- mysql/
57
+ vm_mysql(:pwd => '/').to_s.should match /-c mysql/
46
58
  end
47
59
 
48
60
  it "should use project config mysql username & password if set" do
49
- vm_mysql.to_s.should match /-- mysql.*-utest_user.*-ptest_pass/
61
+ vm_mysql(:pwd => '/').to_s.should match /-c mysql.*-utest_user.*-ptest_pass/
50
62
  end
51
63
 
52
- it "should default to root/root if project config mysql credentials not set" do
64
+ it "should not pass user / pass if project config mysql credentials not set" do
53
65
  Hobo.project_config = DeepStruct.wrap({})
54
- vm_mysql.to_s.should match /-- mysql.*-uroot.*-proot/
66
+ vm_mysql(:pwd => '/').to_s.should match /-c mysql'/
55
67
  end
56
68
 
57
69
  it "should allow specifying the database in options" do
58
- vm_mysql(:db => "test_db").to_s.should match /-- mysql.*test_db$/
70
+ vm_mysql(:pwd => '/', :db => "test_db").to_s.should match /-c mysql.*test_db'/
59
71
  end
60
72
 
61
73
  it "should enable auto echo of piped commands" do
62
- c = vm_mysql
74
+ c = vm_mysql(:pwd => '/')
63
75
  c << "SELECT 1"
64
76
  c.to_s.should match /^echo SELECT\\ 1/
65
77
  end
@@ -69,12 +81,12 @@ describe Hobo::Helper do
69
81
  it "should execute the command using the shell helper" do
70
82
  Hobo::Helper.class_eval do
71
83
  alias :old_shell :shell
72
- def shell command
73
- command.should match /ssh.* -- my_command/
84
+ def shell command, opts
85
+ command.to_s.should match /ssh.* -c my_command/
74
86
  end
75
87
  end
76
88
 
77
- vm_shell "my_command"
89
+ vm_shell "my_command", :pwd => '/'
78
90
 
79
91
  Hobo::Helper.class_eval do
80
92
  remove_method :shell
@@ -82,4 +94,4 @@ describe Hobo::Helper do
82
94
  end
83
95
  end
84
96
  end
85
- end
97
+ end
@@ -1,7 +1,10 @@
1
- require 'hobo/logging'
2
- require 'hobo/lib/s3sync'
1
+ require 'spec_helper'
3
2
 
4
3
  describe Hobo::Lib::S3Sync do
4
+ before do
5
+ AWS.stub!
6
+ end
7
+
5
8
  describe "sync" do
6
9
  it "should synchronize s3 files to local"
7
10
  it "should synchronize local files to s3"
@@ -10,4 +13,4 @@ describe Hobo::Lib::S3Sync do
10
13
  it "should remove files that do not exist in source"
11
14
  it "should update progress as files are transferred"
12
15
  end
13
- end
16
+ end
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'hobo'
3
2
 
4
3
  describe Hobo::Lib::Seed::Project do
5
4
  pwd = nil
@@ -12,7 +11,7 @@ describe Hobo::Lib::Seed::Project do
12
11
  Dir.chdir tmp_dir
13
12
  FileUtils.mkdir_p "project_path"
14
13
  FileUtils.touch "project_path/test"
15
- Hobo.ui = Hobo::Ui.new
14
+ Hobo.ui = double(Hobo::Ui).as_null_object
16
15
  default_config = {
17
16
  :config_class => double(Hobo::Config::File).as_null_object,
18
17
  :replacer => double(Hobo::Lib::Seed::Replacer.new).as_null_object
@@ -79,4 +78,4 @@ describe Hobo::Lib::Seed::Project do
79
78
  it "should set hostname in config"
80
79
  it "should set asset bucket in config"
81
80
  end
82
- end
81
+ end
@@ -1,5 +1,4 @@
1
- require "spec_helper"
2
- require "hobo/lib/seed/replacer"
1
+ require 'spec_helper'
3
2
 
4
3
  describe Hobo::Lib::Seed::Replacer do
5
4
  before do
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'hobo'
3
2
 
4
3
  describe Hobo::Lib::Seed::Seed do
5
4
  pwd = nil
@@ -9,7 +8,7 @@ describe Hobo::Lib::Seed::Seed do
9
8
  tmp_dir = Dir.mktmpdir
10
9
  pwd = Dir.pwd
11
10
  Dir.chdir tmp_dir
12
- Hobo.ui = Hobo::Ui.new
11
+ Hobo.ui = double(Hobo::Ui).as_null_object
13
12
  end
14
13
 
15
14
  after do
@@ -91,4 +90,4 @@ describe Hobo::Lib::Seed::Seed do
91
90
  seed.version.should eq `cd seeds/seed_4 && git rev-parse --short HEAD`.strip
92
91
  end
93
92
  end
94
- end
93
+ end
@@ -1,4 +1,4 @@
1
- require 'hobo/logging'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::Logging do
4
4
  before do
@@ -25,4 +25,4 @@ describe Hobo::Logging do
25
25
  Hobo::Logging.logger.level.should eq Logger::WARN
26
26
  end
27
27
  end
28
- end
28
+ end
@@ -1,4 +1,4 @@
1
- require 'hobo/metadata'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::Metadata do
4
4
  before do
@@ -53,4 +53,4 @@ describe Hobo::Metadata do
53
53
  Hobo::Metadata.store.should eq({ :type => "default" })
54
54
  end
55
55
  end
56
- end
56
+ end
@@ -1,4 +1,4 @@
1
- require 'hobo/null'
1
+ require 'spec_helper'
2
2
 
3
3
  describe Hobo::Null do
4
4
  it "should return itself for any method call" do
@@ -28,4 +28,4 @@ describe Hobo::Null do
28
28
  maybe(1).should eq 1
29
29
  end
30
30
  end
31
- end
31
+ end