hobo-inviqa 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. data/Gemfile +4 -0
  2. data/Gemfile.lock +93 -0
  3. data/Guardfile +14 -0
  4. data/Hobofile +34 -0
  5. data/Rakefile +2 -0
  6. data/bin/hobo +23 -0
  7. data/features/deps.feature +43 -0
  8. data/features/hobo/basic.feature +30 -0
  9. data/features/hobo/help.feature +12 -0
  10. data/features/hobo/subcommands.feature +16 -0
  11. data/features/seed/plant.feature +64 -0
  12. data/features/step_definitions/seed.rb +11 -0
  13. data/features/support/env.rb +6 -0
  14. data/features/vm.feature +0 -0
  15. data/hobo.gemspec +37 -0
  16. data/lib/hobo.rb +44 -0
  17. data/lib/hobo/cli.rb +185 -0
  18. data/lib/hobo/config/file.rb +21 -0
  19. data/lib/hobo/error_handlers/debug.rb +9 -0
  20. data/lib/hobo/error_handlers/friendly.rb +52 -0
  21. data/lib/hobo/errors.rb +60 -0
  22. data/lib/hobo/help_formatter.rb +111 -0
  23. data/lib/hobo/helper/file_locator.rb +39 -0
  24. data/lib/hobo/helper/shell.rb +59 -0
  25. data/lib/hobo/lib/seed/project.rb +41 -0
  26. data/lib/hobo/lib/seed/replacer.rb +57 -0
  27. data/lib/hobo/lib/seed/seed.rb +43 -0
  28. data/lib/hobo/metadata.rb +28 -0
  29. data/lib/hobo/patches/rake.rb +56 -0
  30. data/lib/hobo/patches/slop.rb +22 -0
  31. data/lib/hobo/paths.rb +49 -0
  32. data/lib/hobo/tasks/debug.rb +22 -0
  33. data/lib/hobo/tasks/deps.rb +45 -0
  34. data/lib/hobo/tasks/seed.rb +43 -0
  35. data/lib/hobo/tasks/tools.rb +13 -0
  36. data/lib/hobo/tasks/vm.rb +49 -0
  37. data/lib/hobo/ui.rb +96 -0
  38. data/lib/hobo/util.rb +7 -0
  39. data/lib/hobo/version.rb +3 -0
  40. data/spec/hobo/cli_spec.rb +135 -0
  41. data/spec/hobo/config/file_spec.rb +48 -0
  42. data/spec/hobo/error_handlers/debug_spec.rb +10 -0
  43. data/spec/hobo/error_handlers/friendly_spec.rb +81 -0
  44. data/spec/hobo/error_spec.rb +0 -0
  45. data/spec/hobo/help_formatter_spec.rb +131 -0
  46. data/spec/hobo/helpers/file_locator_spec.rb +7 -0
  47. data/spec/hobo/helpers/shell_spec.rb +7 -0
  48. data/spec/hobo/lib/seed/project_spec.rb +83 -0
  49. data/spec/hobo/lib/seed/replacer_spec.rb +47 -0
  50. data/spec/hobo/lib/seed/seed_spec.rb +95 -0
  51. data/spec/hobo/metadata_spec.rb +46 -0
  52. data/spec/hobo/patches/rake_spec.rb +0 -0
  53. data/spec/hobo/paths_spec.rb +77 -0
  54. data/spec/hobo/ui_spec.rb +64 -0
  55. data/spec/spec_helper.rb +6 -0
  56. metadata +355 -0
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Use hobo.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,93 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ hobo-inviqa (0.0.2)
5
+ bundler
6
+ highline
7
+ rake
8
+ rake-hooks
9
+ slop
10
+
11
+ GEM
12
+ remote: https://rubygems.org/
13
+ specs:
14
+ aruba (0.5.4)
15
+ childprocess (>= 0.3.6)
16
+ cucumber (>= 1.1.1)
17
+ rspec-expectations (>= 2.7.0)
18
+ builder (3.2.2)
19
+ celluloid (0.15.2)
20
+ timers (~> 1.1.0)
21
+ childprocess (0.4.0)
22
+ ffi (~> 1.0, >= 1.0.11)
23
+ coderay (1.1.0)
24
+ cucumber (1.3.10)
25
+ builder (>= 2.1.2)
26
+ diff-lcs (>= 1.1.3)
27
+ gherkin (~> 2.12)
28
+ multi_json (>= 1.7.5, < 2.0)
29
+ multi_test (>= 0.0.2)
30
+ diff-lcs (1.2.5)
31
+ fakefs (0.5.0)
32
+ ffi (1.9.3)
33
+ formatador (0.2.4)
34
+ gherkin (2.12.2)
35
+ multi_json (~> 1.3)
36
+ guard (2.2.5)
37
+ formatador (>= 0.2.4)
38
+ listen (~> 2.1)
39
+ lumberjack (~> 1.0)
40
+ pry (>= 0.9.12)
41
+ thor (>= 0.18.1)
42
+ guard-cucumber (1.4.1)
43
+ cucumber (>= 1.2.0)
44
+ guard (>= 1.1.0)
45
+ guard-rspec (4.2.5)
46
+ guard (~> 2.1)
47
+ rspec (>= 2.14, < 4.0)
48
+ highline (1.6.20)
49
+ listen (2.4.0)
50
+ celluloid (>= 0.15.2)
51
+ rb-fsevent (>= 0.9.3)
52
+ rb-inotify (>= 0.9)
53
+ lumberjack (1.0.4)
54
+ method_source (0.8.2)
55
+ multi_json (1.8.4)
56
+ multi_test (0.0.3)
57
+ pry (0.9.12.6)
58
+ coderay (~> 1.0)
59
+ method_source (~> 0.8)
60
+ slop (~> 3.4)
61
+ rake (10.1.1)
62
+ rake-hooks (1.2.3)
63
+ rake
64
+ rb-fsevent (0.9.4)
65
+ rb-inotify (0.9.3)
66
+ ffi (>= 0.5.0)
67
+ rr (1.1.2)
68
+ rspec (2.14.1)
69
+ rspec-core (~> 2.14.0)
70
+ rspec-expectations (~> 2.14.0)
71
+ rspec-mocks (~> 2.14.0)
72
+ rspec-core (2.14.7)
73
+ rspec-expectations (2.14.4)
74
+ diff-lcs (>= 1.1.3, < 2.0)
75
+ rspec-mocks (2.14.4)
76
+ slop (3.4.7)
77
+ thor (0.18.1)
78
+ timers (1.1.0)
79
+
80
+ PLATFORMS
81
+ ruby
82
+
83
+ DEPENDENCIES
84
+ aruba
85
+ bundler
86
+ fakefs
87
+ guard (~> 2.2.5)
88
+ guard-cucumber (~> 1.4.1)
89
+ guard-rspec (~> 4.2.4)
90
+ hobo-inviqa!
91
+ rake
92
+ rr
93
+ rspec
data/Guardfile ADDED
@@ -0,0 +1,14 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard :rspec do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
10
+ guard 'cucumber' do
11
+ watch(%r{^features/.+\.feature$})
12
+ watch(%r{^features/support/.+$}) { 'features' }
13
+ watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
14
+ end
data/Hobofile ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ desc "lala"
4
+ task "top-level" do
5
+ Hobo.ui.info "top level"
6
+ end
7
+
8
+ namespace :test do
9
+ desc "Does non-interactive things"
10
+ task 'non-interactive' do
11
+ Hobo.ui.info Hobo.ui.ask "A question", default: "Used defaults"
12
+ end
13
+
14
+ task "subcommand" do
15
+ Hobo.ui.info "Subcommand test"
16
+ end
17
+
18
+ desc "description"
19
+ long_desc "long description"
20
+ option "-o", "--option", "Option description"
21
+ hidden true
22
+ task "metadata", [ :arg ] do
23
+ Hobo.ui.info "metadata"
24
+ end
25
+
26
+ option "--testing=", "description"
27
+ task 'option-test' do |task|
28
+ Hobo.ui.info task.opts[:testing]
29
+ end
30
+
31
+ task 'argument-test', [ :test ] do |task, args|
32
+ Hobo.ui.info args[:test]
33
+ end
34
+ end
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
data/bin/hobo ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Hack to allow testing with Aruba (for now)
4
+ $:.push File.expand_path(File.join("..", "..", "lib"), __FILE__)
5
+
6
+ require 'hobo'
7
+ require 'slop'
8
+
9
+ error_handler = Hobo::ErrorHandlers::Friendly.new
10
+ Hobo.ui = Hobo::Ui.new
11
+
12
+ # Options parsed here will be hidden from the main app
13
+ slop = Slop.parse! do
14
+ on '--debug' do
15
+ error_handler = Hobo::ErrorHandlers::Debug.new
16
+ end
17
+ end
18
+
19
+ begin
20
+ Hobo::Cli.new(slop: slop).start
21
+ rescue Exception => error
22
+ exit error_handler.handle(error)
23
+ end
@@ -0,0 +1,43 @@
1
+ Feature: Dependencies
2
+
3
+ Scenario: deps:gems should install Gemfile dependencies
4
+ Given a file named "Gemfile" with:
5
+ """
6
+ source 'https://rubygems.org'
7
+ gem 'bundler'
8
+ """
9
+ And an empty file named "Hobofile"
10
+ When I run `hobo deps gems`
11
+ Then the output should contain "Using bundler"
12
+ And a file named "Gemfile.lock" should exist
13
+
14
+ Scenario: deps:composer should install composer dependencies
15
+ Given a file named "composer.json" with:
16
+ """
17
+ {
18
+ "require": {
19
+ "whatthejeff/fab": "*"
20
+ }
21
+ }
22
+ """
23
+ And an empty file named "Hobofile"
24
+ When I run `hobo deps composer`
25
+ Then the output should contain "Installing whatthejeff/fab"
26
+ And a file named "composer.lock" should exist
27
+
28
+ Scenario: deps:chef should install chef dependencies
29
+ Given a file named "Cheffile" with:
30
+ """
31
+ site 'http://community.opscode.com/api/v1'
32
+ cookbook 'apache2'
33
+ """
34
+ And an empty file named "Hobofile"
35
+ And a file named "Gemfile" with:
36
+ """
37
+ source 'https://rubygems.org'
38
+ gem 'librarian-chef'
39
+ """
40
+ When I run `bundle install`
41
+ And I run `hobo deps chef`
42
+ Then the output should contain "apache2"
43
+ And a file named "Cheffile.lock" should exist
@@ -0,0 +1,30 @@
1
+ Feature: Basics
2
+ Scenario: No arguments should show help
3
+ When I run `hobo`
4
+ Then the output should contain "Usage:"
5
+
6
+ Scenario: -v should show version
7
+ When I run `hobo -v`
8
+ Then the output should contain "Hobo version"
9
+
10
+ Scenario: --version should show version
11
+ When I run `hobo --version`
12
+ Then the output should contain "Hobo version"
13
+
14
+ Scenario: An invalid command should fail gracefully
15
+ When I run `hobo jibberjabber`
16
+ Then the output should contain "Invalid command or option"
17
+ And the exit status should be 4
18
+
19
+ Scenario: An invalid option should fail gracefully
20
+ When I run `hobo --jibberjabber`
21
+ Then the output should contain "Invalid command or option"
22
+ And the exit status should be 4
23
+
24
+ Scenario: --debug should display backtraces
25
+ When I run `hobo jibberjabber --debug`
26
+ Then the output should contain "Hobo::InvalidCommandOrOpt"
27
+
28
+ Scenario: --non-interactive should cause default options to be used
29
+ When I run `hobo test non-interactive --non-interactive`
30
+ Then the output should contain "Used defaults"
@@ -0,0 +1,12 @@
1
+ Feature: Hobo help
2
+ Scenario: --help should show help
3
+ When I run `hobo --help`
4
+ Then the output should contain "Usage:"
5
+ And the output should contain "Global options:"
6
+ And the output should contain "Commands:"
7
+
8
+ Scenario: --h should show help
9
+ When I run `hobo --help`
10
+ Then the output should contain "Usage:"
11
+ And the output should contain "Global options:"
12
+ And the output should contain "Commands:"
@@ -0,0 +1,16 @@
1
+ Feature: Subcommands
2
+
3
+ Scenario: Subcommand with --help should show command help
4
+ When I run `hobo test non-interactive --help`
5
+ Then the output should contain "hobo test non-interactive [options]"
6
+
7
+ Scenario: Namespace should show subcommands
8
+ When I run `hobo test`
9
+ Then the output should contain "non-interactive"
10
+ And the output should contain "Does non-interactive things"
11
+
12
+ Scenario: Subcommand should execute
13
+ When I run `hobo test non-interactive` interactively
14
+ And I type "Testing"
15
+ Then the output should contain "Subcommand test"
16
+ And the output should contain "Testing"
@@ -0,0 +1,64 @@
1
+ Feature: Plant
2
+
3
+ Scenario: Plant without name should fail gracefully
4
+ When I run `hobo seed plant`
5
+ Then the output should contain "Not enough arguments for seed:plant"
6
+
7
+ Scenario: Plant with name should prompt for repository and seed
8
+ Given there is a seed called "testing" with:
9
+ """
10
+ test
11
+ """
12
+ And I run `hobo seed plant seed_plant_0` interactively
13
+ And I type "git://test_repo"
14
+ And I type "./testing"
15
+ And I run `sleep 0.5`
16
+ And I run `git --git-dir=seed_plant_0/.git remote show origin -n`
17
+ Then the output should contain "git://test_repo"
18
+ And the file "seed_plant_0/test" should contain "test"
19
+
20
+ Scenario: Plant with name and --git-url should prompt for seed
21
+ Given there is a seed called "testing" with:
22
+ """
23
+ test
24
+ """
25
+ When I run `hobo seed plant seed_plant_0 --git-url=git://test_repo` interactively
26
+ And I type "./testing"
27
+ And I run `sleep 0.5`
28
+ And I run `git --git-dir=seed_plant_0/.git remote show origin -n`
29
+ Then the output should contain "git://test_repo"
30
+ And the file "seed_plant_0/test" should contain "test"
31
+
32
+ Scenario: Plant with name, --git-url and --seed should not prompt
33
+ Given there is a seed called "testing" with:
34
+ """
35
+ test
36
+ """
37
+ When I run `hobo seed plant seed_plant_0 --git-url=git://test_repo --seed=./testing`
38
+ And I run `sleep 0.5`
39
+ And I run `git --git-dir=seed_plant_0/.git remote show origin -n`
40
+ Then the output should contain "git://test_repo"
41
+ And the file "seed_plant_0/test" should contain "test"
42
+
43
+ Scenario: Plant should replace placeholders
44
+ Given there is a seed called "testing" with:
45
+ """
46
+ NAME:{{name}}
47
+ SEED:{{seed.name}}
48
+ """
49
+ When I run `hobo seed plant seed_plant_0 --git-url=git://test_repo --seed=./testing`
50
+ Then the file "seed_plant_0/test" should contain "NAME:seed_plant_0"
51
+ And the file "seed_plant_0/test" should contain "SEED:testing"
52
+
53
+ Scenario: Plant should fail gracefully with invalid seed
54
+ When I run `hobo seed plant seed_plant_0 --git-url=git://test_repo --seed=./not-exist`
55
+ Then the output should contain "The following external command appears to have failed"
56
+
57
+ Scenario: Plant should fail gracefully if target directory exists
58
+ Given there is a seed called "testing" with:
59
+ """
60
+ test
61
+ """
62
+ And an empty file named "seed_plant_0"
63
+ When I run `hobo seed plant seed_plant_0 --git-url=git://test_repo --seed=./not-exist`
64
+ Then the output should contain "seed_plant_0 already exists"
@@ -0,0 +1,11 @@
1
+ require 'fileutils'
2
+
3
+ Given(/^there is a seed called "(.*?)" with:$/) do |seed, contents|
4
+ create_dir(seed)
5
+ cd(seed)
6
+ write_file("test", contents)
7
+ run_simple(unescape("git init"))
8
+ run_simple(unescape("git add *"))
9
+ run_simple(unescape("git commit -m 'init'"))
10
+ cd('..')
11
+ end
@@ -0,0 +1,6 @@
1
+ require 'aruba/cucumber'
2
+
3
+ Before do
4
+ # bundler / composer features need this
5
+ @aruba_timeout_seconds = 120
6
+ end
File without changes
data/hobo.gemspec ADDED
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+
5
+ require 'hobo/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "hobo-inviqa"
9
+ spec.version = Hobo::VERSION
10
+ spec.authors = ["Mike Simons"]
11
+ spec.email = ["msimons@inviqa.com"]
12
+ spec.description = %q{Inviqan toolbelt}
13
+ spec.summary = %q{Inviqan toolbelt}
14
+ spec.homepage = ""
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ # TODO pin
22
+ spec.add_dependency "slop"
23
+ spec.add_dependency "highline"
24
+ spec.add_dependency "rake"
25
+ spec.add_dependency "rake-hooks"
26
+ spec.add_dependency "bundler"
27
+
28
+ spec.add_development_dependency "bundler"
29
+ spec.add_development_dependency "rake"
30
+ spec.add_development_dependency "aruba"
31
+ spec.add_development_dependency "rspec"
32
+ spec.add_development_dependency "fakefs"
33
+ spec.add_development_dependency "rr"
34
+ spec.add_development_dependency "guard", "~> 2.2.5"
35
+ spec.add_development_dependency "guard-rspec", "~> 4.2.4"
36
+ spec.add_development_dependency "guard-cucumber", "~> 1.4.1"
37
+ end
data/lib/hobo.rb ADDED
@@ -0,0 +1,44 @@
1
+ # External deps
2
+ require 'rake'
3
+ require 'rake/hooks'
4
+ require 'slop'
5
+ require 'highline'
6
+ require 'open3'
7
+ require 'tempfile'
8
+ require 'shellwords'
9
+ require 'find'
10
+
11
+ # DSL enhancements
12
+ require 'hobo/metadata'
13
+ require 'hobo/patches/rake'
14
+ require 'hobo/patches/slop'
15
+
16
+ # Task helpers
17
+ require 'hobo/helper/shell'
18
+ require 'hobo/helper/file_locator'
19
+
20
+ # Basics
21
+ require 'hobo/version'
22
+ require 'hobo/paths'
23
+ require 'hobo/errors'
24
+ require 'hobo/ui'
25
+ require 'hobo/util'
26
+ require 'hobo/help_formatter'
27
+ require 'hobo/error_handlers/debug'
28
+ require 'hobo/error_handlers/friendly'
29
+ require 'hobo/config/file'
30
+
31
+ # Libs
32
+ require 'hobo/lib/seed/project'
33
+ require 'hobo/lib/seed/replacer'
34
+ require 'hobo/lib/seed/seed'
35
+
36
+ # Built-in tasks
37
+ require 'hobo/tasks/debug'
38
+ require 'hobo/tasks/deps'
39
+ require 'hobo/tasks/seed'
40
+ require 'hobo/tasks/vm'
41
+ require 'hobo/tasks/tools'
42
+
43
+ # App
44
+ require 'hobo/cli'