hem 1.0.1.beta6 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +32 -45
  3. data/Hemfile +4 -2
  4. data/README.md +4 -0
  5. data/bin/hem +5 -6
  6. data/hem.gemspec +15 -15
  7. data/lib/hem.rb +47 -45
  8. data/lib/hem/asset_applicators/files.rb +1 -1
  9. data/lib/hem/cli.rb +36 -29
  10. data/lib/hem/error_handlers/debug.rb +1 -1
  11. data/lib/hem/error_handlers/friendly.rb +3 -3
  12. data/lib/hem/errors.rb +23 -12
  13. data/lib/hem/help_formatter.rb +12 -3
  14. data/lib/hem/helper/argument_parser.rb +30 -0
  15. data/lib/hem/helper/command.rb +2 -1
  16. data/lib/hem/helper/file_locator.rb +34 -7
  17. data/lib/hem/helper/shell.rb +0 -1
  18. data/lib/hem/helper/vm_command.rb +2 -2
  19. data/lib/hem/lib/host_check/vagrant.rb +2 -3
  20. data/lib/hem/lib/s3/sync.rb +2 -2
  21. data/lib/hem/lib/seed/project.rb +10 -13
  22. data/lib/hem/lib/seed/replacer.rb +9 -31
  23. data/lib/hem/lib/seed/template.rb +21 -0
  24. data/lib/hem/lib/vm/inspector.rb +1 -1
  25. data/lib/hem/patches/deepstruct.rb +4 -0
  26. data/lib/hem/patches/rake.rb +42 -11
  27. data/lib/hem/plugins.rb +129 -0
  28. data/lib/hem/setup.rb +6 -0
  29. data/lib/hem/tasks.rb +15 -0
  30. data/lib/hem/tasks/deps.rb +13 -14
  31. data/lib/hem/tasks/exec.rb +4 -2
  32. data/lib/hem/tasks/magento.rb +13 -275
  33. data/lib/hem/tasks/mysql.rb +16 -0
  34. data/lib/hem/tasks/ops.rb +2 -1
  35. data/lib/hem/tasks/plugin.rb +16 -0
  36. data/lib/hem/tasks/redis.rb +26 -0
  37. data/lib/hem/tasks/seed.rb +4 -2
  38. data/lib/hem/tasks/self.rb +7 -6
  39. data/lib/hem/tasks/tools.rb +1 -1
  40. data/lib/hem/tasks/vm.rb +8 -16
  41. data/lib/hem/util.rb +6 -16
  42. data/lib/hem/version.rb +12 -1
  43. data/lib/hobo/tasks/magento.rb +2 -1
  44. data/spec/hem/cli_spec.rb +1 -0
  45. data/spec/hem/helpers/argument_parser_spec.rb +57 -0
  46. data/spec/hem/lib/seed/project_spec.rb +1 -0
  47. data/spec/hem/lib/seed/replacer_spec.rb +12 -13
  48. data/spec/hem/lib/seed/seed_spec.rb +1 -0
  49. metadata +50 -42
  50. data/lib/hem/lib/github/api.rb +0 -48
  51. data/lib/hem/lib/github/client.rb +0 -52
  52. data/lib/hem/tasks/pr.rb +0 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 464afc8e551b0a00daad552544ab7d939d0fb0f0
4
- data.tar.gz: c36788f90cb8a124df6fd45efb8f2872ef05093d
3
+ metadata.gz: 9f00e9f984cfc0962397a24b9bdf60183723a957
4
+ data.tar.gz: c7d3b06d842443da2b534f83fb751b7b2ae89858
5
5
  SHA512:
6
- metadata.gz: 5126f005b480789a700e71c442aca4f9443ee45bec148abb7bacd2abdb81b3dd6396381384af602127c410cce5aebdc7231932e3dfd5a100db64b86034b12d91
7
- data.tar.gz: ad45a6aba07525e19a4d2c5a6c3de35a0eb3932e826e8d8b8ec5f04d3a87fa04a0b42b3cfd8ba21589300ff96125b72bf84b6639d50e57ac4c1648a4ce29693f
6
+ metadata.gz: 41f8b0a2edda8503154da2fde23b87ee507c0da76f6b5d737b874ae242bb55cccdcb4b66a18ef31138619ae643155a17dea1769c327ed3b4a07b29b115dace99
7
+ data.tar.gz: ad3771fc35f6a0e76495904e1205d6afda03bfb79bfa2acc1d3c1890a53eb0d547da22948683cdd9e39b056647eef3f1057d505b8fa53bada45ab2a2c6fd2539
@@ -1,64 +1,51 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hem (1.0.1.beta6)
5
- aws-sdk (~> 2.0.24)
6
- deepstruct (~> 0.0.5)
7
- highline (~> 1.6.20)
4
+ hem (1.1.0)
5
+ aws-sdk (~> 2.3.8)
6
+ deepstruct (~> 0.0.7)
7
+ highline (~> 1.7.3)
8
+ jmespath (~> 1.1.3)
9
+ json (~> 1.8.1)
8
10
  net-ssh-simple (~> 1.6.3)
9
- octokit (~> 3.0)
10
- pry (~> 0.9.12)
11
- rake (~> 10.1.1)
12
- ruby-progressbar (~> 1.4.1)
13
- semantic (~> 1.3.0)
14
- slop (~> 3.4.7)
11
+ pry (~> 0.10.3)
12
+ rake (~> 11.1.2)
13
+ ruby-progressbar (~> 1.8.1)
14
+ slop (~> 3.6.0)
15
15
  teerb (~> 0.0.1)
16
16
 
17
17
  GEM
18
18
  remote: https://rubygems.org/
19
19
  specs:
20
- addressable (2.3.8)
21
- aws-sdk (2.0.48)
22
- aws-sdk-resources (= 2.0.48)
23
- aws-sdk-core (2.0.48)
24
- builder (~> 3.0)
20
+ aws-sdk (2.3.8)
21
+ aws-sdk-resources (= 2.3.8)
22
+ aws-sdk-core (2.3.8)
25
23
  jmespath (~> 1.0)
26
- multi_json (~> 1.0)
27
- aws-sdk-resources (2.0.48)
28
- aws-sdk-core (= 2.0.48)
29
- blockenspiel (0.4.5)
30
- builder (3.2.2)
31
- coderay (1.1.0)
24
+ aws-sdk-resources (2.3.8)
25
+ aws-sdk-core (= 2.3.8)
26
+ blockenspiel (0.5.0)
27
+ coderay (1.1.1)
32
28
  deepstruct (0.0.7)
33
- faraday (0.9.2)
34
- multipart-post (>= 1.2, < 3)
35
- hashie (3.4.3)
36
- highline (1.6.21)
29
+ hashie (3.4.4)
30
+ highline (1.7.8)
37
31
  jmespath (1.1.3)
32
+ json (1.8.3)
38
33
  method_source (0.8.2)
39
- multi_json (1.11.2)
40
- multipart-post (2.0.0)
41
34
  net-scp (1.2.1)
42
35
  net-ssh (>= 2.6.5)
43
- net-ssh (3.0.1)
44
- net-ssh-simple (1.6.12)
45
- blockenspiel (= 0.4.5)
46
- hashie (= 3.4.3)
36
+ net-ssh (3.1.1)
37
+ net-ssh-simple (1.6.15)
38
+ blockenspiel (= 0.5.0)
39
+ hashie (= 3.4.4)
47
40
  net-scp (= 1.2.1)
48
- net-ssh (= 3.0.1)
49
- octokit (3.8.0)
50
- sawyer (~> 0.6.0, >= 0.5.3)
51
- pry (0.9.12.6)
52
- coderay (~> 1.0)
53
- method_source (~> 0.8)
41
+ net-ssh (= 3.1.1)
42
+ pry (0.10.3)
43
+ coderay (~> 1.1.0)
44
+ method_source (~> 0.8.1)
54
45
  slop (~> 3.4)
55
- rake (10.1.1)
56
- ruby-progressbar (1.4.2)
57
- sawyer (0.6.0)
58
- addressable (~> 2.3.5)
59
- faraday (~> 0.8, < 0.10)
60
- semantic (1.3.1)
61
- slop (3.4.7)
46
+ rake (11.1.2)
47
+ ruby-progressbar (1.8.1)
48
+ slop (3.6.0)
62
49
  teerb (0.0.1)
63
50
 
64
51
  PLATFORMS
@@ -68,4 +55,4 @@ DEPENDENCIES
68
55
  hem!
69
56
 
70
57
  BUNDLED WITH
71
- 1.10.6
58
+ 1.12.4
data/Hemfile CHANGED
@@ -24,7 +24,8 @@ namespace :test do
24
24
  long_desc "long description"
25
25
  option "-o", "--option", "Option description"
26
26
  hidden true
27
- task "metadata", [ :arg ] do
27
+ argument 'arg'
28
+ task "metadata" do
28
29
  Hem.ui.info "metadata"
29
30
  end
30
31
 
@@ -33,7 +34,8 @@ namespace :test do
33
34
  Hem.ui.info task.opts[:testing]
34
35
  end
35
36
 
36
- task 'argument-test', [ :test ] do |task, args|
37
+ argument 'test'
38
+ task 'argument-test' do |task, args|
37
39
  Hem.ui.info args[:test]
38
40
  end
39
41
 
data/README.md CHANGED
@@ -10,6 +10,10 @@ Many more features are planned including assisting with host machine configurati
10
10
 
11
11
  # Installing & using
12
12
 
13
+ * [OSX](https://github.com/inviqa/hem/wiki/Installing-on-OSX)
14
+ * [Linux](https://github.com/inviqa/hem/wiki/Installing-on-Linux)
15
+ * [Windows](https://github.com/inviqa/hem/wiki/Installing-on-Windows)
16
+
13
17
  Full instructions for installing and using hem are available in the [User guide](https://github.com/inviqa/hem/wiki/User-guide). For information on the task DSL, see the [DSL guide](https://github.com/inviqa/hem/wiki/Hemfile-DSL).
14
18
 
15
19
  Please ensure that you run the following command after installing and that it does not raise any issues:
data/bin/hem CHANGED
@@ -1,10 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # Hack to allow testing with Aruba (for now)
4
- $:.push File.expand_path(File.join("..", "..", "lib"), __FILE__)
5
-
6
3
  def init_hem
7
- require 'hem'
4
+ require_relative '../lib/hem/setup'
8
5
 
9
6
  # Default main classes
10
7
  error_handler = Hem::ErrorHandlers::Friendly.new
@@ -12,6 +9,8 @@ def init_hem
12
9
  Hem.logger = Logger.new(STDOUT)
13
10
  Hem.logger.level = Logger::WARN
14
11
 
12
+ Hem.plugins = Hem::Plugins.new(Hem.project_path || Hem.config_path, Hem.project_dsl_file)
13
+
15
14
  # Low level / early arg parsing
16
15
  # Anything that can alter ui / logger / cli should be here
17
16
  # Early termination args should also go here
@@ -49,13 +48,13 @@ def init_hem
49
48
  Hem.cli = Hem::Cli.new(slop: slop)
50
49
  Hem.cli.start
51
50
  rescue Exception => error
52
- exit error_handler.handle(error)
51
+ exit error_handler.handle(Hem.cli, error)
53
52
  end
54
53
  end
55
54
 
56
55
  Gem.configuration.verbose = false
57
56
 
58
- require 'hem/patches/rubygems'
57
+ require_relative '../lib/hem/patches/rubygems'
59
58
 
60
59
  # Suppress Net/SSH/Simple warning on windows
61
60
  $SUPPRESS_32BIT_WARNING=1
@@ -6,9 +6,9 @@ require 'hem/version'
6
6
 
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = "hem"
9
- spec.version = Hem::VERSION.gsub('-', '.')
10
- spec.authors = ["Mike Simons"]
11
- spec.email = ["msimons@inviqa.com"]
9
+ spec.version = Hem::VERSION
10
+ spec.authors = ["Mike Simons", "Andy Thompson"]
11
+ spec.email = ["athompson@inviqa.com"]
12
12
  spec.description = %q{Inviqan toolbelt}
13
13
  spec.summary = %q{Inviqan toolbelt}
14
14
  spec.homepage = ""
@@ -20,28 +20,28 @@ Gem::Specification.new do |spec|
20
20
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "slop", "~> 3.4.7"
24
- spec.add_dependency "highline", "~> 1.6.20"
25
- spec.add_dependency "rake", "~> 10.1.1"
26
- spec.add_dependency "deepstruct", "~> 0.0.5"
27
- spec.add_dependency "semantic", "~> 1.3.0"
28
- spec.add_dependency "aws-sdk", "~> 2.0.24"
29
- spec.add_dependency "ruby-progressbar", "~> 1.4.1"
30
- spec.add_dependency "teerb", "~> 0.0.1"
23
+ spec.add_dependency "aws-sdk", "~> 2.3.8"
24
+ spec.add_dependency "deepstruct", "~> 0.0.7"
25
+ spec.add_dependency "highline", "~> 1.7.3"
26
+ spec.add_dependency "jmespath", "~> 1.1.3"
27
+ spec.add_dependency "json", "~> 1.8.1"
31
28
  spec.add_dependency "net-ssh-simple", "~> 1.6.3"
32
- spec.add_dependency "pry", "~> 0.9.12"
33
- spec.add_dependency "octokit", "~> 3.0"
29
+ spec.add_dependency "pry", "~> 0.10.3"
30
+ spec.add_dependency "rake", "~> 11.1.2"
31
+ spec.add_dependency "ruby-progressbar", "~> 1.8.1"
32
+ spec.add_dependency "slop", "~> 3.6.0"
33
+ spec.add_dependency "teerb", "~> 0.0.1"
34
34
 
35
35
  # This prevents Bundler.setup from complaining that rubygems did not install dev deps
36
36
  # If you want to run dev deps you need to ensure HEM_ENV=dev is set for bundle install & bundle exec
37
37
  if ENV['HEM_ENV'] == 'dev'
38
38
  spec.add_development_dependency "aruba", "~> 0.5.4"
39
- spec.add_development_dependency "rspec", "~> 2.14.1"
40
39
  spec.add_development_dependency "fakefs", "~> 0.5.0"
41
- spec.add_development_dependency "rr", "~> 1.1.2"
42
40
  spec.add_development_dependency "guard", "~> 2.2.5"
43
41
  spec.add_development_dependency "guard-rspec", "~> 4.2.4"
44
42
  spec.add_development_dependency "guard-cucumber", "~> 1.4.1"
43
+ spec.add_development_dependency "rr", "~> 1.1.2"
44
+ spec.add_development_dependency "rspec", "~> 2.14.1"
45
45
  spec.add_development_dependency "simplecov", "~> 0.7.1"
46
46
  end
47
47
  end
data/lib/hem.rb CHANGED
@@ -3,72 +3,74 @@ require 'slop'
3
3
  require 'rake'
4
4
  require 'deepstruct'
5
5
  require 'logger'
6
+ require 'json'
6
7
 
7
8
  require 'shellwords'
8
9
  require 'fileutils'
9
10
 
10
11
  # DSL enhancements
11
- require 'hem/metadata'
12
- require 'hem/patches/rake'
13
- require 'hem/patches/slop'
14
- require 'hem/patches/deepstruct'
12
+ require_relative 'hem/metadata'
13
+ require_relative 'hem/patches/rake'
14
+ require_relative 'hem/patches/slop'
15
+ require_relative 'hem/patches/deepstruct'
15
16
 
16
17
  # Basics
17
- require 'hem/version'
18
- require 'hem/null'
19
- require 'hem/paths'
20
- require 'hem/errors'
21
- require 'hem/logging'
22
- require 'hem/ui'
23
- require 'hem/util'
24
- require 'hem/help_formatter'
25
- require 'hem/error_handlers/exit_code_map'
26
- require 'hem/error_handlers/debug'
27
- require 'hem/error_handlers/friendly'
28
- require 'hem/config/file'
29
- require 'hem/config'
18
+ require_relative 'hem/version'
19
+ require_relative 'hem/null'
20
+ require_relative 'hem/paths'
21
+ require_relative 'hem/errors'
22
+ require_relative 'hem/logging'
23
+ require_relative 'hem/plugins'
24
+ require_relative 'hem/ui'
25
+ require_relative 'hem/util'
26
+ require_relative 'hem/help_formatter'
27
+ require_relative 'hem/error_handlers/exit_code_map'
28
+ require_relative 'hem/error_handlers/debug'
29
+ require_relative 'hem/error_handlers/friendly'
30
+ require_relative 'hem/config/file'
31
+ require_relative 'hem/config'
30
32
 
31
33
  # Asset sync
32
- require 'hem/lib/s3/sync'
33
- require 'hem/lib/s3/local/file'
34
- require 'hem/lib/s3/local/iohandler'
35
- require 'hem/lib/s3/remote/file'
36
- require 'hem/lib/s3/remote/iohandler'
34
+ require_relative 'hem/lib/s3/sync'
35
+ require_relative 'hem/lib/s3/local/file'
36
+ require_relative 'hem/lib/s3/local/iohandler'
37
+ require_relative 'hem/lib/s3/remote/file'
38
+ require_relative 'hem/lib/s3/remote/iohandler'
37
39
 
38
40
  # Task helpers
39
- require 'hem/helper/command'
40
- require 'hem/helper/shell'
41
- require 'hem/helper/file_locator'
42
- require 'hem/helper/github'
43
- require 'hem/helper/http_download'
44
- require 'hem/helper/vm_command'
41
+ require_relative 'hem/helper/argument_parser'
42
+ require_relative 'hem/helper/command'
43
+ require_relative 'hem/helper/shell'
44
+ require_relative 'hem/helper/file_locator'
45
+ require_relative 'hem/helper/github'
46
+ require_relative 'hem/helper/http_download'
47
+ require_relative 'hem/helper/vm_command'
45
48
 
46
- require 'hem/lib/local/command'
49
+ require_relative 'hem/lib/local/command'
47
50
 
48
- require 'hem/lib/vm/inspector'
49
- require 'hem/lib/vm/command'
51
+ require_relative 'hem/lib/vm/inspector'
52
+ require_relative 'hem/lib/vm/command'
50
53
 
51
54
  # Asset applicators
52
- require 'hem/asset_applicator'
53
- require 'hem/asset_applicators/sqldump'
54
- require 'hem/asset_applicators/files'
55
+ require_relative 'hem/asset_applicator'
56
+ require_relative 'hem/asset_applicators/sqldump'
57
+ require_relative 'hem/asset_applicators/files'
55
58
 
56
59
  # Libs
57
- require 'hem/lib/seed/project'
58
- require 'hem/lib/seed/replacer'
59
- require 'hem/lib/seed/seed'
60
- require 'hem/lib/self_signed_cert_generator'
61
- require 'hem/lib/github/api'
62
- require 'hem/lib/github/client'
60
+ require_relative 'hem/lib/seed/project'
61
+ require_relative 'hem/lib/seed/replacer'
62
+ require_relative 'hem/lib/seed/seed'
63
+ require_relative 'hem/lib/seed/template'
64
+ require_relative 'hem/lib/self_signed_cert_generator'
63
65
 
64
66
  # Host checks
65
- require 'hem/lib/host_check/git'
66
- require 'hem/lib/host_check/vagrant'
67
- require 'hem/lib/host_check/deps'
68
- require 'hem/lib/host_check'
67
+ require_relative 'hem/lib/host_check/git'
68
+ require_relative 'hem/lib/host_check/vagrant'
69
+ require_relative 'hem/lib/host_check/deps'
70
+ require_relative 'hem/lib/host_check'
69
71
 
70
72
  # App
71
- require 'hem/cli'
73
+ require_relative 'hem/cli'
72
74
 
73
75
  # Hobo BC
74
76
  Hobo = Hem
@@ -1,5 +1,5 @@
1
1
  # Built in applicators
2
2
  Hem.asset_applicators.register 'files', /.*\.files\.(tgz|tar\.gz|tar\.bz2)/ do |file, _|
3
3
  Hem.ui.title "Applying file dump (#{file})"
4
- run_command "tar -xvf #{file.shellescape}"
4
+ run "tar -xvf #{file.shellescape}"
5
5
  end
@@ -27,6 +27,7 @@ module Hem
27
27
  @help_formatter = opts[:help] || Hem::HelpFormatter.new(@slop)
28
28
  @help_opts = {}
29
29
  @host_check = opts[:host_check] || Hem::Lib::HostCheck
30
+ @pre_task_namespaces = ['shell-init', 'plugin']
30
31
  end
31
32
 
32
33
  # entry point for application
@@ -36,9 +37,7 @@ module Hem
36
37
  load_builtin_tasks
37
38
  load_hemfiles
38
39
  load_project_config
39
- Hem.chefdk_compat
40
40
 
41
- tasks = structure_tasks Hem::Metadata.metadata.keys
42
41
  define_global_opts @slop
43
42
 
44
43
  begin
@@ -46,21 +45,22 @@ module Hem
46
45
  @slop.parse! args
47
46
  opts = @slop.to_hash
48
47
 
49
- perform_host_checks unless opts[:'skip-host-checks']
50
-
51
48
  @help_opts[:all] = opts[:all]
52
49
 
53
- @slop.add_callback :empty do
54
- show_help
55
- end
56
-
57
50
  # Necessary to make command level help work
58
- args.push "--help" if @slop.help?
51
+ args.push "--help" if @slop.help? || args.empty?
59
52
 
60
- @help_formatter.command_map = define_tasks(tasks, @slop)
53
+ include_pre_tasks
54
+ remaining = @slop.parse! args.dup
55
+ remaining.push "--help" if @slop.help?
61
56
 
62
- remaining = @slop.parse! args
63
- raise Hem::InvalidCommandOrOpt.new remaining.join(" "), self if remaining.size > 0
57
+ if remaining == args
58
+ include_post_tasks opts
59
+
60
+ remaining = @slop.parse! remaining
61
+ end
62
+
63
+ raise Hem::InvalidCommandOrOpt.new remaining.join(" ") if remaining.size > 0
64
64
 
65
65
  show_help if @slop.help?
66
66
  rescue Halt
@@ -80,20 +80,24 @@ module Hem
80
80
 
81
81
  private
82
82
 
83
+ def include_pre_tasks
84
+ tasks = structure_tasks Hem::Metadata.metadata.keys
85
+ pre_tasks = tasks.select { |k,_| @pre_task_namespaces.include? k }
86
+ @help_formatter.command_map = define_tasks(pre_tasks, @slop)
87
+ end
88
+
89
+ def include_post_tasks opts
90
+ load_plugins
91
+ perform_host_checks unless opts[:'skip-host-checks']
92
+
93
+ tasks = structure_tasks Hem::Metadata.metadata.keys
94
+ post_tasks = tasks.reject { |k,_| @pre_task_namespaces.include? k }
95
+
96
+ @help_formatter.command_map.merge! define_tasks(post_tasks, @slop)
97
+ end
98
+
83
99
  def load_builtin_tasks
84
- require 'hem/tasks/assets'
85
- require 'hem/tasks/config'
86
- require 'hem/tasks/deps'
87
- require 'hem/tasks/exec'
88
- require 'hem/tasks/ops'
89
- require 'hem/tasks/pr'
90
- require 'hem/tasks/seed'
91
- require 'hem/tasks/self'
92
- require 'hem/tasks/shell_init'
93
- require 'hem/tasks/system'
94
- require 'hem/tasks/system/completions'
95
- require 'hem/tasks/tools'
96
- require 'hem/tasks/vm'
100
+ require_relative 'tasks'
97
101
  end
98
102
 
99
103
  def load_user_config
@@ -120,6 +124,10 @@ module Hem
120
124
  end
121
125
  end
122
126
 
127
+ def load_plugins
128
+ Hem.plugins.setup unless Hem.plugins.setup?
129
+ end
130
+
123
131
  def perform_host_checks
124
132
  checks = [
125
133
  'vagrant.*',
@@ -207,7 +215,7 @@ module Hem
207
215
 
208
216
  description metadata[:desc]
209
217
  long_description metadata[:long_desc]
210
- arg_list task.arg_names
218
+ arg_list metadata[:arg_list]
211
219
  hidden metadata[:hidden]
212
220
  project_only metadata[:project_only]
213
221
 
@@ -223,9 +231,8 @@ module Hem
223
231
  Dir.chdir Hem.project_path if Hem.in_project?
224
232
  raise ::Hem::ProjectOnlyError.new if opts.project_only && !Hem.in_project?
225
233
  task.opts = opts.to_hash.merge({:_unparsed => hem.slop.unparsed})
226
- raise ::Hem::MissingArgumentsError.new(name, args, hem) if args && task.arg_names.length > args.length
227
- task.invoke *args
228
- args.pop(task.arg_names.size)
234
+
235
+ task.invoke *Helper::convert_args(name, args, metadata[:arg_list])
229
236
  task.opts = nil
230
237
  end
231
238
  end